Message Queen(MQ)消息队列
为了解决分布式系统之间的通信问题。
我们原本的单体架构应用就好比一家人在一起干活,而现在的分布式架构应用就可以理解为分家了,每个人分开干活,但是这每个人之间必须可以通信才可以更好的干活。
分布式系统通信的模式有两种:直接调用模块,借助第三方完成通信。而我们MQ就是第三方,消息先发给MQ,再由MQ发给其他模块服务。
为什么要学MQ? 1、应用解耦用户发起下订单的请求,请求先来到订单系统,下订单需要调用支付系统完成支付操作,调用库存系统更新库存,调用物流系统更新物流信息。
而如果没有用消息队列,订单系统直接耦合调用这三个系统的话,如果有一个系统出错了,就会导致下订单出错。
现在有了MQ消息队列的话,订单系统就和其他系统分开,解耦合。订单系统接收到下订单的请求后只需要将请求消息发给消息队列中后,就可以返回下订单成功的消息给用户, 后续的支付、库存、物流等操作,由MQ将消息发给他们,让他们完成相应的操作,就算其中有个系统出错了,过一段时间好了也会继续完成工作的。就是订单下完直接返回成功,后面的操作肯定早晚会完成的。
2、异步提速在没有用MQ之前,用户下订单后,下订单需要先调用库存系统更新库存后,再调用支付系统完成支付操作,最后调用调用物流系统更新物流信息,这些操作是同步完成的,用户要一直等这些操作完成才能完成下订单操作。要花20+300+300+300=920ms
可见请求处理的速度大大提升了,而且单位时间处理的请求数也变多了(系统吞吐量)。
有了MQ之后,用户下订单,订单系统只需要将消息发给MQ然后保存数据到数据库后,就可以返回下单成功的信息,至于后面的库存、支付、物流的操作,后面它们自己可以从MQ中取消息完成操作,对于客户来说是透明的。只需要花20+5=25ms
3、消峰填谷举个例子,如A系统每秒最多能处理1000次请求,这个处理能力应付正常时段绰绰有余,正常时段我们发送请求一秒后就能返回结果。但是在高峰期,如果一秒钟之内有5000请求发给A系统,这时候A系统就会直接坏掉,这样就不行。使用消息队列做缓冲,把5000个请求都发给MQ,这些请求消息依次在MQ中排队,先到先出来发给A系统消费,每秒发送1000个请求给A系统处理。
对于A系统来说就是消峰了,从5000次请求消到1000次。大量请求数据堆积在MQ中,直到消费完堆积的消息,就叫填谷。