美文网首页
Broker是如何基于Dledger技术进行主从同步的

Broker是如何基于Dledger技术进行主从同步的

作者: G__yuan | 来源:发表于2021-06-30 11:45 被阅读0次

基于Dledger技术替换Broker的CommitLog

之前的文章已经写过 ,Broker高可用架构的原理,让我们知道这个CommitLog是干什么用的,就是broker会将消息写入本地磁盘的CommitLog文件中。
接下来我们来认识一下Dledger技术可以干什么。Dledger技术实际上它自己就有一个CommitLog机制,你把数据交给它,它就会写入CommitLog磁盘文件里去,这是它能干的第一件事。所以,基于Dledger技术来实现Broker高可用架构,实际上就是用Dledger先替换掉用来Broker自己管理的CommitLog。由Dledger来接管CommitLog。


image.png

注:DLedger管理了CommitLog,但是Broker还是可以基于DLedger管理的CommitLog来构建机器上的各个ConsumeQueue的磁盘文件。

DLedger是如何基于Raft协议选举Leader Broker的

Raft协议中进行多台机器的Leader选举其实就是需要发起一轮一轮的投票,通过三台机器互相投票选出来一个Leader。简单来说,就是,三台机器启动的时候,它们都会投票自己作为leader,然后把这个投票发送给其他的Broker。来举个例子:Broker01投票给自己,Broker02投票给自己,Broker3投票给自己,它们都把自己的投票发送给了别人,此时在第一轮选举中,Broker01会收到别人的投票,它发现自己是投票给自己的,但是Broker2也是投票给自己的,Broker3也是投票给自己的,发现都是投票给自己的,那么这第一轮投票选举失败。因为大家这票数一样,无法选举出leader。接下来,每个Broker都会进入一个随机时间的休眠,比如说Broker01休眠3秒,Broker02休眠5秒,Broker03休眠6秒,此时,Broker01必然是最先苏醒的,它苏醒过来之后,直接会继续投票给自己,并且发送自己的选票给别人。接着Broker02休眠5秒醒过来发现Broker01已经发送过来一个选票,投的是Broker01自己,此时自己还没投票,所以会尊重别人的选择,直接把票就投给Broker01了,同时把自己投票发送给别人。Broker3苏醒过来之后,同样的原理。此时所以人就收到三张投票,都是投给Broker01的,那么Broker01就是leader了。票数 = (机器数/2)+1 ,其实就可以当选Leader。

Dledger是如何基于Raft协议进行多副本同步的

DLedger基于Raft协议进行多副本同步,会分为两个阶段,一个是uncommitted阶段,一个是commited阶段。首先,Leader Broker上的DLedger收到一条数据之后,会标记为uncommitted状态,然后它通过自己的DledgerServer组件把这个uncommitted数据发送给Follower Broker的DledgerServer。


image.png

接着Follower Brokerde DledgerServer收到uncommitlog消息之后,必须返回一个ack给leader的DledgerServer,然后LeaderBroker收到超过半数的Follower Broker返回ack之后,就会将消息标记为committed状态。

如果Leader Broker崩溃了怎么办

如果Leader Broker挂了之后,此时剩下的两个Follower Broker会重新发起选举,他们会基于Dledger还是采用Raft协议的算法,去选举出一个新的Leader Broker继续对外提供服务,而且还会对没有完成的数据同步进行一些恢复性的操作,保证数据不丢失,新选举的Leader会把数据通过Dledger同步给剩下的一个Follower Broker。

相关文章

网友评论

      本文标题:Broker是如何基于Dledger技术进行主从同步的

      本文链接:https://www.haomeiwen.com/subject/anolultx.html