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 天前
【开题答辩全过程】以 办公自动化管理系统为例,包含答辩的问题和答案
java·eclipse
李宥小哥1 天前
C#基础11-常用类
android·java·c#
C嘎嘎嵌入式开发1 天前
(2)100天python从入门到拿捏
开发语言·python
Stanford_11061 天前
如何利用Python进行数据分析与可视化的具体操作指南
开发语言·c++·python·微信小程序·微信公众平台·twitter·微信开放平台
小许学java1 天前
数据结构-ArrayList与顺序表
java·数据结构·顺序表·arraylist·线性表
Vallelonga1 天前
Rust 中的数组和数组切片引用
开发语言·rust
Kiri霧1 天前
Rust模式匹配详解
开发语言·windows·rust
white-persist1 天前
Python实例方法与Python类的构造方法全解析
开发语言·前端·python·原型模式
千里马-horse1 天前
Async++ 源码分析8--partitioner.h
开发语言·c++·async++·partitioner
Java 码农1 天前
Centos7 maven 安装
java·python·centos·maven