MQ全称为Message Queue-消息队列,是一种应用程序对应用程序的消息通信,一端只管往队列不断发布信息,另一端只管往队列中读取消息,发布者不需要关心读取消息的谁,读取消息者不需要关心发布消息的是谁,各干各的互不干扰
市场上现在常用的消息队列有:RabbitMQ、RocketMQ、Kafka,ActiveMQ
MQ的优势
消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。
(1) 解耦
使用消息MQ后,只需要保证消息格式不变,不需要关心发布者及消费者之间的关系,这两者不需要彼此联系
(2) 异步
在一些不需要即时(同步)的返回结果操作,通过消息队列来实现异步。
(3) 削峰
在大量请求时(秒杀场景),使用消息队列做缓冲处理,削弱峰值流量,防止系统在短时间内被峰值流量冲垮。
场景:在大量流量涌入高峰,如数据库只能抗住2000的并发流量,可以使用MQ控制2000到数据库中
(4) 日志处理
日志存储在消息队列中,用来处理日志,比如kafka。
MQ的缺点
(1)系统的可用性降低
在还未引进MQ时,系统只需要关系生产端与消费端的一致就可以,引进后,系统需要关注生产端,MQ与消费端三者的稳定性,这会增加系统的负担和运维成本的增加。
(2)系统的复杂性提高
引入MQ,需要考虑的问题会增加,如何保障消息的一致性,消费不被重复消费等问题。
(3)一致性问题
A系统发送完消息直接返回成功,但BCD系统之中若有系统写库失败,则会产生数不一致的问题。