消息中间件漫谈:RocketMQ系统架构及元素

Posted 系统工程实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了消息中间件漫谈:RocketMQ系统架构及元素相关的知识,希望对你有一定的参考价值。

消息中间件是后端架构中非常重要的技术组件之一,普遍用于系统解耦、异步通信和高并发流量下的削峰填谷等场景。

典型的应用场景

典型的消息中间件系统一般具备良好的读写性能和吞吐量,系统引入消息中间件后典型的拓扑结构如下图所示,消息中间件充当不同系统间信息交互的媒介,实现数据流的中转。

消息中间件的本质决定了天然的可以用于如下场景:

解耦原来多系统间基于RPC或HTTP等方式进行直接通信,方式虽然直接,但带来了上下游系统间的天然耦合,而基于消息中间件则将耦合转移至第三方,极大了降低了原有系统间的耦合。异步原有业务场景下的系统通信可能基于同步方式等待下游系统返回,引入消息中间件后,系统将消息以可靠的方式投递到消息系统就可以返回,这种异步化处理能够极大提高上游系统的吞吐量和性能。削峰基于高耦合方式的直接通信在面对高并发请求时力不从心,基于消息中间件出色的吞吐量,将高并发请求导入的消息系统中,上游系统直接返回,下游系统异步消费,实现将流量洪峰打平。常见消息模型FIFO队列模型这种消息模型基于先进先出的队列模型,生产生生产并发送消息到队列后进行入队操作,消费者从队列拉取或推送消息进行出队操作。该种消息模型的关键点在于:队列中的消息消费进行出队操作,同一条消息只能被一个消费者消费到。消息中间件漫谈:RocketMQ系统架构及元素

发布-订阅模式发布-订阅模式由消息发布者、主题和消息订阅者组成,消息发布者发送消息到特定主题,消息订阅者订阅特定主题,并接收主题中的消息。主题是个逻辑概念,用作消息容器。发布-订阅模式解决了基于FIFO队列的“同一条消息只能被一个消费者消费”的问题。

消息中间件漫谈:RocketMQ系统架构及元素

RocketMQ 的消息模型RocketMQ的消息模型基于发布-订阅模式,如下图所示:

消息中间件漫谈:RocketMQ系统架构及元素

Producer:生产者支持分布式集群部署,通过负载均衡的方式将消息投递到Broker集群队列。Consumer:消费者同样支持分布式集群部署,支持以推或拉模式消费消息NameServer:与Kafka基于Zookeeper不同,RocketMQ使用自己的NameServer,它是一个轻量级的Topic路由注册中心,支持Broker的动态注册与发现。BrokerServer:Broker主要负责消息的存储、投递和查询以及服务高可用保证。RocketMQ的部署架构

NameServer 是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
Broker是物理概念, 可以采取主从方式部署,分为Master Broker与Slave Broker,二者之间是一对多关系。通过指定相同的BrokerName映射Master与Slave 的对应关系。Master Broker的ID为0,Slave Broker的ID为非0。 每个Broker与NameServer集群中的所有节点建立长连接,定时注册Topic信息到所有NameServer。
Producer
生产者与NameServer集群中的其中一个节点建立长连接,定期从NameServer获取Topic路由信息,并向提供Topic 服务的Master建立长连接,且定时向Master发送心跳。
Consumer
消费者与NameServer集群中的其中一个节点建立长连接,定期从NameServer获取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且 定时向Master、Slave发送心跳。
RocketMQ集群工作流程:
  1. 启动NameServer,等待Broker、Producer、Consumer连接

  2. Broker启动,跟所有的NameServer保持长连接,定时发送心跳包。

  3. 创建Topic

  4. Producer发送消息,启动时先跟NameServer集群中的其中一台建立长连接,并从NameServer中获取当前发送的Topic存在哪些Broker上,轮询从队列列表中选择一个队列,然后与队列所在的Broker建立长连接从而向Broker发消息。

  5. Consumer与NameServer建立长连接,获取当前订阅Topic的Broker信息,并与Broker建立连接通道,开始消费消息。


以上是关于消息中间件漫谈:RocketMQ系统架构及元素的主要内容,如果未能解决你的问题,请参考以下文章

以Kafka和RocketMQ为例,漫谈消息队列

主流消息中间件技术选型对比:KafkaActiveMQRabbitMQ 及 RocketMQ

RocketMQ事务性消息及持久化

阿里架构师推荐的消息中间件万字文档:RocketMQ+RabbitMQ+KafKa

消息中间件需要解决的问题及RocketMQ发展历程

RocketMQ---架构原理及环境搭建