MIT6.824 Lecture07 Raft part2

上节课的延续

 Log catch up

在Raft算法中,每个节点都维护了一个matchIndex和一个nextIndex值,用来实现日志的复制和同步。

matchIndex是指该节点和其他节点的日志在某个位置上已经匹配。例如,如果节点A的matchIndex是3,表示节点A和其他节点在索引为3的位置上的日志已经匹配。这个值的作用是用来判断哪些日志已经被提交,从而避免出现数据不一致的情况。

nextIndex是指该节点将要发送给其他节点的下一条日志的索引。例如,如果节点A的nextIndex是4,表示节点A将要向其他节点发送索引为4的日志。这个值的作用是用来实现日志的复制和同步,当一个节点成为领导者后,需要将自己的日志复制到其他节点,而nextIndex就是用来记录每个节点上次同步的位置,领导者需要从这个位置开始向其他节点复制日志。

当领导者收到来自跟随者的回复时,就会根据matchIndexnextIndex的值来更新自己的状态。如果该跟随者的matchIndex比领导者的要小,则领导者需要将该跟随者的日志复制到自己的日志中,而nextIndex则需要向前推进一位。如果该跟随者的matchIndex比领导者的要大,则领导者需要将nextIndex向后推进一位,重新尝试复制日志。

The plan

Log erase

在Raft算法中,为了保证数据的一致性,每个节点都需要保存一份完整的日志。但是,随着时间的推移,日志会越来越大,为了减少存储空间的占用,需要对日志进行擦除。

Raft算法中的日志擦除是通过commitIndexlastApplied来实现的。commitIndex是指已经被提交的日志的最大索引,而lastApplied是指已经被应用到状态机的最大索引。当一个节点发现自己的commitIndexlastApplied相差很大时,就说明有很多日志已经被提交但还没有被应用到状态机上,这时就可以将已经被应用的日志擦除,只保留未被应用的日志。

具体来说,节点可以将lastApplied之前的日志擦除,因为这些日志已经被应用到状态机上了,不再需要保留。而commitIndex之后的日志也可以擦除,因为这些日志还没有被提交,也不会对系统的一致性产生影响。

需要注意的是,在进行日志擦除时,需要保证已经被提交的日志不能被擦除,否则会导致数据不一致。因此,在进行擦除操作时,需要先将已经被提交的日志复制到其他节点上,确保数据的一致性。

快速追赶

图中的是不一致的一个term的第一个来加追赶, like point2 following

在Raft算法中,当一个跟随者和领导者的日志不一致时,需要通过日志复制来保持数据一致性。但是,如果跟随者的日志与领导者的日志相差很大,那么单纯的日志复制会非常耗时,影响系统的性能。为了解决这个问题,Raft算法提出了快速追赶机制。

快速追赶机制的基本思想是,在跟随者和领导者之间建立一个快照,将跟随者的日志清空,然后从领导者处重新复制日志。这样可以大大减少日志复制的时间,提高系统的性能。

具体来说,快速追赶机制分为两个阶段:

  1. 领导者发送快照:领导者先向跟随者发送快照,快照中包含了当前系统的状态和日志信息。

  2. 日志复制:跟随者接收到快照后,将自己的日志清空,然后从领导者处重新复制日志,直到与领导者的日志一致为止。

需要注意的是,在进行快速追赶时,需要保证领导者和跟随者的状态一致,否则会导致数据不一致。因此,在发送快照前,领导者需要将自己的状态同步到跟随者上,确保跟随者的状态与领导者一致。另外,在进行快速追赶时,需要保证系统的一致性和可用性,否则会影响系统的正常运行。

持久化

策略1比较慢,但相差很大的时候。第二个要三个varible一个变化时,就要写入disk

Server Recovery

like checkpoint and get more information by looking at the end of passage 

 使用Raft

clerk maintain the put get id to reduce the dupicate and which node is master

正确性:线性一致性

no possible execute like one machine 

 Q&A Phase

fork -> copy on wirte 可以一致性的快读

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值