24|从集群角度拆解RocketMQ的架构设计与实现
集群构建
- 深入了解
- 翻译
- 解释
- 总结
RocketMQ的架构设计与实现从集群构建、部署形态、数据可靠性、安全控制、可观测性等五个方面展开讨论。在集群构建方面,RocketMQ的元数据实际存储在Broker上,而NameServer只是一个缓存服务。集群构建基于第三方组件NameServer完成节点发现,Broker和NameServer之间通过心跳探测确认节点运行正常。在部署模式方面,RocketMQ经历了多次升级,包括Master/Slave、DLedger和Controller三种部署模式。数据可靠性方面,RocketMQ通过多副本提高数据可靠性,不同部署模式下副本机制和数据一致性实现不同。在安全控制方面,RocketMQ提供传输安全、认证和鉴权功能。总体而言,RocketMQ的架构设计和实现充分考虑了集群构建、部署形态、数据可靠性和安全控制等方面,为消息方向的应用提供了可靠的技术支持。 RocketMQ Broker支持TLS加密传输,配置证书的相关信息即可实现。在认证方面,RocketMQ支持明文的用户名/密码认证方式,同时区分管理员账户和普通账户权限。在鉴权方面,RocketMQ支持Topic和Group两种资源的鉴权,包含拒绝、全部权限、发送、订阅四种权限,同时也支持IP白名单认证。 在可观测性方面,RocketMQ在5.0版本重构了指标模块,基于OpenTelemetry规范重新设计实现了指标模块,支持更多维度、更丰富的指标,并提供了Pull、Push、Export兼容三种方式。在消息轨迹方面,RocketMQ的生产端和消费端的SDK集成了轨迹信息上报模块,支持全链路的轨迹记录上报功能。 总体而言,RocketMQ通过支持多种部署模式、提高数据可靠性、加强安全控制和优化可观测性,为消息队列系统提供了全面的技术支持。
《深入拆解消息队列 47 讲》,新⼈⾸单¥59
全部留言(2)
- 最新
- 精选
- Geek_4c6cb8有一些疑问请教: 1.Dledger模式是多个独立的Master注册到NameServer,每个Master背后各自一个raft集群吗? 2.Controller模式,文中提到Controller之间选主节点,这是通过选择完整性最高的Controller,在某个Master不可用之后,由Controller选择新的Master吗?2024-01-01归属地:浙江
- shanRocketMQ的三种部署模式 1. Master/Slave模式 分为Master、Slave两个角色,集群中可以有多个Master节点,一个Master节点可以有多个Slave节点。Master节点负责接收生产者发送的写入请求,将消息写入CommitLog文件,Slave节点会与Master节点建立连接,从Master节点同步消息数据(有同步复制和异步复制两种方式)。 消费者可以从Master节点拉取消息,也可以从Slave节点拉取消息。在RocketMQ 4.5版本之前,如果Master宕机,不支持自动将Slave切换为Master,需要人工介入。 优点 负载过高时,可以快速通过横向添加节点来扩容。 缺点 (1)Master节点宕机之后,不能自动将Slave节点切换为Master节点; (2)每个节点上都需要创建全量的Topic,存在性能瓶颈; 2. Dledger模式 为了解决主从架构下Slave不能自动切换为Master的问题,4.5版本之后提供了DLedger模式,使用Raft算法,如果Master节点出现故障,可以自动从Slave节点中选举出新的Master进行切换。 存在问题 (1)根据Raft算法的多数原则,集群至少有三个节点以上,在消息写入时,也需要大多数的Follower节点响应成功才能认为消息写入成功; (2)存在两套HA复制流程(个人认为是主从模式下一套、Dledger模式下一套),Dledger模无法利用RocketMQ原生的存储和复制能力。 3. DLedger Controller模式 RocketMQ 5.0以后推出了DLedger Controller模式,支持独立部署,也可以嵌入在NameServer中,Broker通过与Controller交互完成Master的选举。 在DLedger Controller模式中,数据的一致性可以通过参数inSyncReplicas配置来配置,不用向Dledger模式一样,需要要过半的Follower节点响应才算写入成功。 关于DLedger Controller模式详细信息可以参考 https://github.com/apache/rocketmq/blob/develop/docs/cn/controller/design.md2023-09-22归属地:美国