大家好,我叫mikechen。
MQ消息队列是大规模互联网应用,尤其是大型系统的基础。下面更详细地解释了MQ。
本文收录于mikechen的30万+字原文《阿里架构师进阶专题合集》。
MQ
MQ的正式名称是Message Queue,翻译过来就是消息队列。
如下所示:
在消息队列中,消息发送者将消息发送到队列,消息接收者从队列中检索消息并处理它们。它本质上是一个存储消息的队列。
发送者和接收者并不直接通信,而是通过共享队列间接通信。
MQ的特点
消息队列的主要特点是:
1.异步通信
消息队列支持异步通信模式,其中发送者将消息发送到队列,而不等待接收者的立即响应。
这种异步通信模型允许发送方和接收方拥有独立的消息处理时间表,从而提高系统的可扩展性和性能。
2. 解耦和松耦合
消息队列实现了发送者和接收者之间的分离,允许它们独立地开发和发展。
发送者只需将消息发送到队列中,无需关心接收者如何处理消息。松耦合的设计增加了系统的灵活性和可维护性。
3.可靠性
消息队列通常提供持久性机制来确保消息发送和接收时的可靠性。
即使消息发送后,即使收件人暂时不可用,它也会保留在队列中,从而防止消息丢失并提供处理系统内故障和异常的机制。
4、缓冲、削峰填谷
消息队列可以用作缓冲区来平衡消息生产者和消费者之间的速度差异。
当消息生产速率超过消费速率时,消息将临时存储在队列中,允许消费者按照自己的速率处理它们。这可以减少流量峰值并避免系统过载。
MQ类型
消息队列主要有两种类型。一种是点对点模型,另一种是发布/订阅模型。
1. 点对点
点对点排队模型是一种一对一的消息传递模型,其中每条消息仅可供一个接收者使用。
如下所示:
发送方将消息发送到队列,接收方从队列中检索消息并处理它们。一旦消息被接收者使用,它就会从队列中删除。
此模型适用于必须可靠传递且必须仅由一个接收者处理的消息。
2. 发布和订阅
发布/订阅模型是一种一对多消息传递模型,其中消息被发送到某个主题,并且订阅该主题的所有接收者都会收到该消息。
如下所示:
发布/订阅模型包括三个角色:主题、发布者和订阅者。
发送者向主题发布消息,订阅者通过订阅感兴趣的主题来接收消息。
该模型适用于实时广播、事件通知等需要将消息广播给多个接收者的场景。
MQ设计
MQ 实现通常包括以下核心设计:
1.制片人
生产者是消息队列中的消息发送者,它生成消息并将其发送到消息队列。
2.消费者
消费者是消息队列中的消息接收者。从消息队列中检索并处理消息。
3.经纪人(代理人)
Broker是消息队列系统的核心组件,负责接收生产者发送的消息,将其排队并发送给消费者。
消息队列需要可靠的存储机制来存储生产者和消费者之间传递的消息。
消息持久化可以通过将消息写入持久化存储介质(如磁盘)来实现。持久存储通常包括日志文件、数据库或其他持久存储系统。
4.队列(矩阵)
消息队列通常使用高效的数据结构(例如队列)来存储消息。
队列是消息在代理上存储的位置,确保消息的顺序并允许它们根据需要保留。
5.留言
消息是在生产者和消费者之间传递的数据单元,可以采用任何格式,例如文本、JSON 或XML。
6.消息路由
消息队列必须实现消息路由机制。换句话说,您需要决定消息将从生产者发送到哪个消费者。
消息路由可以基于消息主题、标签或其他属性。消息路由通常以发布/订阅或队列模式实现。
7.Acknowledgement(确认机制)
确认机制用于当消息被消费者成功处理时,向代理发送确认消息,代理从队列中删除该消息。
8. 高可用性和容错性
消息队列通常需要实现高可用性和容错机制,以便消息队列即使在系统或网络出现故障时也能正常运行。
这包括数据复制、故障转移、负载平衡和其他技术。
本文收录于mikechen的30万+字原文《阿里架构师进阶专题合集》。
常用的MQ
以下是一些常用的消息队列系统:
1. 兔子MQ
RabbitMQ是一个开源消息队列系统,实现了高级消息队列协议(AMQP)协议。
RabbitMQ 提供多种语言的客户端库,包括Java、Python、Ruby 和C#,允许开发人员轻松与RabbitMQ 集成。
RabbitMQ支持多种消息模式,包括点对点模式(队列)、发布/订阅模式(交换机)、主题模式等。
此外,RabbitMQ 提供了各种机制来确保消息的真实性,包括持久化、消息确认和发布者确认。它还支持集群模式和镜像队列,以提高可用性和可靠性。
2.阿帕奇卡夫卡
Kafka是一个高吞吐量、持久的分布式消息队列系统。
Kafka可以处理大数据流,并且具有非常高的吞吐量,往往达到每秒数百万的处理能力。
整个Kafka系统由多个节点组成,每个节点称为Kafka Broker,Kafka集群中的多个Broker协同工作,共同执行数据存储、传输和处理任务。
Kafka提供了主题和分区的概念,您可以根据需要选择合适的模式。
主题是逻辑数据流,每个主题可以分为一个或多个分区,以水平扩展数据并支持并发读写操作,从而提高系统吞吐量和性能。
3. 主动MQ
ActiveMQ是一个基于Java消息服务(JMS)规范的消息队列系统,可靠、高性能、可扩展,并且支持多种客户端编程语言。
ActiveMQ是最早的MQ,现在比较少用。
4.Rocket MQ
RocketMQ是阿里巴巴开发的队列模型消息中间件,后来开源给Apache基金会,成为Apache顶级开源项目。
整体设计类似,因为RocketMQ是一个分布式系统,一个集群包含多个Broker节点,每个Broker主要参考Kafka实现。
RocketMQ提供丰富的功能,包括事务消息、消息过滤、延迟消息、消息重试、消息跟踪等。
RocketMQ支持顺序消息传递,保证同一分区或同一队列中的消息按照发送的顺序被消费。这对于某些应用场景(日志采集、订单处理等)非常重要。
5.阿帕奇脉冲星
Pulsar是一个高性能、可扩展、持久的分布式消息和流处理平台。
下一代云原生分布式消息流平台,支持多机房多租户、持久存储、跨地域数据复制。
最重要的是
本文收录于mikechen的30万+字原文《阿里架构师进阶专题合集》。
版权声明:本文转载于今日头条,版权归作者所有。如有侵权,请联系本站编辑删除。