MQ理论
什么是MQ
MQ(Message Queue)消息队列,是基础数据结构中“先进先出”的一种数据结构。指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递——生产者产生消息并把消息放入队列,然后由消费者去处理。消费者可以到指定队列拉取消息,或者订阅相应的队列,由MQ服务端给其推送消息;MQ多用于分布式系统之间进行通讯。
分布式系统有两种通讯方式:
-
远程调用
-
消息中间件
两种通讯方式过程如图所示:
注:发送消息的是生产者,接收消息的是消费者
MQ的优势
-
应用解耦:提高系统容错性和可维护性
-
异步提速:提升用户体验和系统吞吐量
-
削峰填谷:提高系统稳定性
应用解耦
分布式系统在使用直接远程调用时通讯过程如下:
使用mq后:
异步提速
分布式系统在使用直接远程调用时通讯过程如下:
加入mq后:
削峰填谷
分布式系统:
加入mq后
MQ起到了"削峰填谷"的作用,如下所示
MQ的劣势
接下来我们通过下图展示MQ的劣势:
-
系统的可用性降低:
系统引入的依赖越多,系统稳定性越差,一旦MQ宕机,就会对业务造成影响,如何保证MQ的高可用。
-
系统复杂性提高:
MQ的加入增加了系统的复杂度,以前系统是同步的远程调用,现在是通过MQ进行异步调用。如何保证消息没有被重复消费?怎么处理消息丢失情况?怎么保证消息传递的顺序性?
-
一致性问题:
A系统处理完业务,通过MQ给B、C、D三个系统发消息数据,如果B系统、C系统处理成功,D系统处理失败,如何保证消息数据处理的一致性?