本文介绍 SOFAStack 消息队列的系统部署架构,方便您更好地理解消息队列的高可用性。
消息队列在任何一个环境都是可扩展的,生产者必须是一个集群,消息服务器必须是一个集群,消费者也同样。集群级别的高可用,是消息队列跟其他的消息服务器的主要区别,消息生产者发送一条消息到消息服务器,消息服务器会随机的选择一个消费者,只要这个消费者消费成功就认为是成功了。
文中所提及的消息队列的服务端或者服务器包含 Name Server、Broker 等。服务端不等同于 Broker。
系统部署架构
系统部署架构如下图所示。
图中所涉及到的概念如下所述:
NameServer:是一个几乎无状态节点,可集群部署,在消息队列中提供命名服务,该组件内置 zookeeper 用来负责 Broker 的选主和集群管理。
Broker:消息中转角色,负责存储和转发消息。分为 Master Broker 和 Slave Broker,一个 Master Broker 可以对应多个 Slave Broker,但是一个 Slave Broker 只能对应一个 Master Broker。Broker 启动后需要完成一次将自己注册至 Name Server 的操作;随后每隔 30s 定期向 Name Server 上报 Topic 路由信息。
生产者 Producer:与 Name Server 集群中的其中一个节点(随机)建立长连接(Keep-alive),定期从 Name Server 读取 Topic 路由信息,并与提供 Topic 服务的 Master Broker 建立长连接,且定时向 Master Broker 发送心跳。
消费者 Consumer:与 Name Server 集群中的其中一个节点(随机)建立长连接,定期从 Name Server 拉取 Topic 路由信息,并向提供 Topic 服务的 Master Broker、Slave Broker 建立长连接,且定时向 Master Broker、Slave Broker 发送心跳。Consumer 既可以从 Master Broker 订阅消息,也可以从 Slave Broker 订阅消息,订阅规则由 Broker 配置决定。
SOFAMQ 还包含如下两个未在图中展示的组件,主要功能如下:
Console:SOFAMQ 的图形化管理控制台。
Router:LDC 场景下,根据配置的 Router 规则,进行逻辑单元之间消息转发,使 SOFAMQ 支持 LDC 能力的组件。
更多信息
消息队列中的概念详情,请参见 基础术语。