loi*_*iao 5 distributed-computing distributed-system raft
我在木筏上遇到了问题。
在论文《寻找一种可理解的共识算法(扩展版)》中写道:
要开始选举,追随者会增加其当前任期并过渡到候选状态。(第 5.2 节)
它还说:
AppendEntries RPC 和 RequestVot RPC 中的接收者应为“Reply false if args.term < currentTerm”
所以,让我们想象一下这个场景,raft系统中有5台机器,现在机器0是leader,机器1到4是follower,现在是term 1。突然,机器1断开网络,然后机器1超时,并且它开始选举领导者,它发送RequestVot RPC,肯定会失败(网络断开)。然后它将开始新的领导者选举......等等。机器1的项是增加很多倍。也许增加到10。当机器1'Term增加到10时,它连接了网络。领导者(机器0)向机器1发送心跳,机器1将拒绝该心跳(机器0的期限小于机器1),现在机器1将无法重新加入系统。
这里要记住的重要一点是,当节点收到更大的术语时,它总是更新其本地术语。因此,由于机器 1 将拒绝领导者的请求,领导者最终将了解更高的任期 (10) 并下台,然后将选举一个任期 >10 的新节点。
显然,这是低效的,但这就是为什么大多数现实世界的实现使用所谓的“预投票”协议,检查以确保节点在转换为候选人角色并增加任期之前可以赢得选举。
| 归档时间: |
|
| 查看次数: |
777 次 |
| 最近记录: |