1、MQ
MQ(Message Queue)消息队列, FIFO 数据结构。
-
角色:
- 生产者:产生数据(消息)并放入队列。
- 存储信息:即消息的队列。
- 消费者:两种获取信息的方式
- 拉:到指定队列拉取消息。
- 推:订阅相应的队列,由MQ服务端给其推送消息。
-
不同 MQ 对比:
Active MQ Rabbit MQ Kafka Rocket MQ 发布订阅 ✔ ✔ ✔ ✔ 轮询分发 ✔ ✔ ✔ ❌ 公平分发 ❌ ✔ ✔ ❌ 重发 ✔ ✔ ❌ ✔ 消息拉取 ❌ ✔ ✔ ✔
2、作用
作用:解决应用解耦,异步消息,流量削锋等问题。
实现高性能,高可用,可伸缩和最终一致性架构。
- 解耦:一个业务需要多个模块共同实现,或者一条消息有多个系统需要对应处理。
- 主业务执行结束后发送一条 MQ。
- 其余模块消费 MQ 消息,即可实现业务。
- 降低模块之间的耦合。
- 异步:业务分为需要即时处理的主业务,可后台执行的从属业务。
- 主业务执行结束后发送一条 MQ。
- 从属业务消费 MQ 信息,异步执行。
- 减低业务的响应时间,提高用户体验。
- 削峰:高并发情况下,业务异步处理,提供高峰期业务处理能力,避免系统瘫痪。
3、缺点
- 系统可用性降低:依赖服务越多,服务越容易挂掉。需要考虑MQ瘫痪的情况
- 系统复杂性提高:需要考虑消息丢失、消息重复消费、消息传递的顺序性。
- 业务一致性:主业务和从属业务需要考虑一致性的处理。