5 Matching Annotations
- Dec 2022
-
www.zhihu.com www.zhihu.com
-
关于 DDIA 上对 Raft 协议的这种极端场景的描述,要如何理解?
Tags
Annotators
URL
-
- Jul 2022
-
mit-public-courses-cn-translatio.gitbook.io mit-public-courses-cn-translatio.gitbook.io
-
假设S2和S3之间的差距足够大,先超时的那个节点(也就是S2)能够在另一个节点(也就是S3)超时之前,发起一轮选举,并获得过半的选票,那么那个节点(也就是S2)就可以成为新的Leader。
- 如果S2和S3的时间间隔很小,S2在收到超过半数选票成为Leader之前,S3也发出RequestVote请求并之后也收到超半数选票呢?比如说S2的网络延迟比S3大,或者S2服务器性能比S3性能低非常多等等
- 随机数算法是什么样的呢?如果是简单的随机算法,那么可能会导致两个节点随机出来的election time一样。如果节点数量更多,那么多台机器election time随机值一样的可能性更大
-
一个导致选举失败的更有趣的场景是,所有环节都在正常工作,没有故障,没有丢包,但是候选人们几乎是同时参加竞选,它们分割了选票(Split Vote)。假设我们有一个3节点的多副本系统,3个节点的选举定时器几乎同超时,进而期触发选举。首先,每个节点都会为自己投票。之后,每个节点都会收到其他节点的RequestVote消息,因为该节点已经投票给自己了,所以它会返回反对投票。这意味着,3个节点中的每个节点都只能收到一张投票(来自于自己)。没有一个节点获得了过半投票,所以也就没有人能被选上。接下来它们的选举定时器会重新计时,因为选举定时器只会在收到了AppendEntries消息时重置,但是由于没有Leader,所有也就没有AppendEntries消息。所有的选举定时器重新开始计时,如果我们不够幸运的话,所有的定时器又会在同一时间到期,所有节点又会投票给自己,又没有人获得了过半投票,这个状态可能会一直持续下去。
当election timer timeout后: 1. candidate投票给自己 2. 如果自己是candidate状态时收到其他节点的RequestVote,则投反对票
-
- May 2022
-
raft.github.io raft.github.io
Tags
Annotators
URL
-