7

从源码上看,RocketMQ 5.0 跟 RocketMQ 4.x相比增加了哪几个模块

 2 years ago
source link: https://www.51cto.com/article/740030.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

从源码上看,RocketMQ 5.0 跟 RocketMQ 4.x相比增加了哪几个模块

作者:朱晋君 2022-11-17 10:43:20
本文从源码角度讲述了 RocketMQ 5.0 主要的变化。为了更好地拥抱云原生, RocketMQ 5.0 架构上发生了比较大的变化,实现计算存储相分离,并且引入 bazel 进行构建。
466ee8c06cd82870af972860e9fd8048068bff.png

大家好,我是君哥。

今天来介绍一下 RocketMQ 5.0 源码上的变化。

RocketMQ 5.0 是一个里程碑式的版本,经历了近 5 年的打磨,代码变更达到 60%。

首先看一下源码中模块的变化,如下图:

图片

从图中可以看到,RocketMQ 5.0 主要增加了 4 个模块儿,下面介绍一下这 4 个模块儿。

1、bazel

bazel 是 Google 开源的构建工具,目前广泛用于云计算领域的开源软件(如 Kubernetes)构建,它有如下特点:1.支持增量式编译、支持缓存、支持分布式扩展;2.bazel 可以清晰地以依赖关系图的方式展现出当前的依赖关系,比 makefile 更加方便;3.bazel支持多语言构建。

RocketMQ 5.0 引入了 bazel 构建。

2、container

在 RocketMQ 4.x 时代,如果采用 Master-Slave 架构,Broke 节点一旦挂了,是不能自动切换的。RocketMQ 5.0 对这个架构进行了改进,引入了 BrokerContainer 的概念,一个 BrokerContainer 中可以部署多个 Broker,这些 Broker 拥有独立的端口,功能完全独立,并且可以共享同一个节点的资源。如下图:

图片

有创造性的是,在一个 BrokerContainer 中可以交叉部署 Master 和 Slave 节点,如下图两节点对等部署:

图片

这样做有即使 Node1 节点挂了,Node2 节点中的 Broker1 可以提供读功能,并不会丢消息,而 Broker2 则可以继续提供读写功能。

3、controller

RocketMQ 5.0 引入了 DLedger Controller 架构,解决传统 DLedger 架构的不足。

(1)传统 DLedger

在 RocketMQ 4.x 中,如果采用 DLedger 架构部署,Broker 挂掉后,是可以自动实现主从切换的。但这样需要用 Raft Commitlog 来取代 RocketMQ 自身的 Commitlog,因为只有这样 Commitlog 才会具有选举的能力。Broker 主节点挂掉后,从节点依照 DLedger 协议进行内部协商,选举出新的主节点,自动完成主备切换。

不过这样存在几个问题:

1.消息日志副本数必须是 3 个以上,这个是 Raft 协议自动选主的要求,造成资源浪费;

2.Raft 选主过程中必须有多数节点同意才能选主成功,副本数越多时间开销会越大,这会加大 ACK 延时;

3.CommitLog 主从同步需要使用 DLedger 库,也就是说 CommitLog 被看作是 Raft log 进行复制,这样 RocketMQ 原生的零拷贝、堆外内存的优势无法使用了。

(2)DLedgerController

通过引入 DLedger Controller 架构,RocketMQ 将 DLedger 选主切换的能力独立成一个可以拔插的组件,这样 Master-Slave 架构也可以具有 Failover 的能力。

DLedger Controller 可以独立部署,也可以部署在 NameServer 中,共享 NameServer 资源。

部署在 NameServer:

图片

独立部署:

图片

4、Proxy

RocketMQ 5.0 为了更好地拥抱云原生,实现了计算和存储相分离。把计算相关的功能抽象到了 Proxy,协议适配、权限管理、消息管理等。Broker 则专注于存储,架构如下图:​

图片

这样 RocketMQ 可以更好地上云,更好地进行资源调度。​

本文从源码角度讲述了 RocketMQ 5.0 主要的变化。

为了更好地拥抱云原生, RocketMQ 5.0 架构上发生了比较大的变化,实现计算存储相分离,并且引入 bazel 进行构建。

在高可用方面,RocketMQ 5.0  对传统的基于 DLedger 的高可用进行了改造,同时引入了 BrokerContainer 对等部署方案。

希望本文对你理解新版本的 RocketMQ 有所帮助。

责任编辑:姜华 来源: 君哥聊技术

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK