Rockect基于Dledger的Broker主从同步原理

1.前言

此文章是在儒猿课程中的学习笔记,感兴趣的想看原来的课程可以去咨询儒猿课堂

这篇文章紧挨着上一篇博客来进行编写,有些不清楚的可以看下上一篇博客:

RocketMQ原理简述(二)-CSDN博客

2.Broker的高可用

如果想让Broker实现高可用的话,就需要有一个Broker组,这个Broker组里面有一个Leader Broker来接收写入数据,然后进行同步到其他的Follow Broker上。这样的话,一条数据就会在三个Broker上有副本,如果Leader Broker宕机了,就会从其他的Follow Broker上进行选举一个新的Leader Broker来进行接收新的请求。

1. DLedger代替broker进行管理commitLog

Broker的高可用是基于Dledger技术来实现的,Dledger技术首先它会有一个CommitLog机制,你把数据交给它,它就会将数据写入到磁盘文件中。使用Dledger技术来实现Broker的高可用就是用Dledger来代替Broker进行管理CommitLog。

2. DLedger基于Raft协议进行选举leader

那么是怎么做到选举新的Leader节点呢,是基于Raft协议来进行选择Leader节点的。这个Raft协议的具体是怎么实现的。

我们可以举一个例子,假设我们现在有三台机器,A,B,C。这三台机器在刚启动的时候都会投票给自己,让自己成为一个leader节点,然后把自己的投票信息给同步到别的机器上,那么在第一轮的时候,就会发现大家都投票给自己,那么就没办法选举出来leader节点。

紧接大家都进入一个随机时间的休眠,A休眠1秒,B休眠2秒,C休眠3秒

A会先苏醒过来,它会给自己投票成为leader,并把自己的投票信息给B,C;当B和C苏醒之后,发现已经有投票信息过来了,就会接受A的投票信息,并把自己的投票信息给A;这样的话大家都会进行投票给A机器成为Leader。超过了半数,那么A机器就会成为Leader节点。依靠这种随机时间的休眠,通过几轮的投票就会选举出来一个leader节点。

3.DLedger进行多副本数据的同步

DLedger是是基于Raft协议来进行数据信息的同步,简单来说:数据会分为两个阶段,一个阶段为uncommited阶段,一个阶段为commited阶段。首先DLedger收到数据之后,会将数据标记为uncommited状态,然后通过内部的DLedgerServer组件将这个uncommited的数据进行同步到Follower的DLedgerServer上去。然后Follower的DLedgerServer收到这个请求之后会返回一个ack到leader节点的DLedgerServer上去。当leader节点的DLedgerServer收到一半机器的ack之后,会将这个数据标记为commited状态,然后再次进行同步到follower的DLedgerServer,让他们也把数据标记为commited状态。

相关推荐
这是个栗子1 小时前
前端开发中的常用工具函数(八)
开发语言·前端·javascript
凤凰院凶涛QAQ1 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
研☆香1 小时前
为什么变量声明在赋值前也能使用?—— 深入理解 JavaScript 变量提升与作用域
开发语言·前端·javascript
右耳朵猫AI1 小时前
PHP周刊2026W28 | 安全更新、Laravel 13.18、Twig 3.28
开发语言·php·laravel
second601 小时前
第一部分:快速上手 —— 建立 C++ 基本语法与编程范式
开发语言·c++
郝学胜-神的一滴2 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法
bksczm2 小时前
linux之线程概念和控制
linux·开发语言·c++
掘金_答案2 小时前
上线那天,一个 ConcurrentHashMap 差点送走我的 AI 客服——3 天排查 JVM 血泪史
java·后端·架构
JackieZhengChina2 小时前
零依赖轻量级JS悬浮提示插件title2tip-js的使用教程
开发语言·javascript·ecmascript
hehelm2 小时前
Linux网络编程—TCP字典翻译系统
linux·开发语言·网络·c++·tcp/ip