分布式系统:raft

分布式系统:一致性算法Raft

解释

nextIndex[]

  • leader要发送给follower的下一条log entry(各follower不同)
  • follower与leader一致的时候只发最新一条log
  • 有不一致的时候,nextIndex要减,一次发多条log。把不一致的部分都修正过来。

matchIndex[]

  • 已知follower上,从0开始有多少条连续的log entry与leader一致。
  • 即: 有多少条log entry已经被成功replicate到follower上了
  • 如果过半数,就可以增加commitIndex, apply到状态机, 答复客户端操作成功了

commitIndex和lastApplied有什么不同?

  • commitIndex是可以apply了,但是未必已经apply了。
  • lastApplied才是真正已写入到状态机。

裂脑

  • Raft的办法是,只有1个leader能做事。这个leader必须能够与过半服务器保持联系。
  • 另一种不同于Raft的办法是“最终一致性”。网络分区时各个server自行其是,等到网络恢复再调和分歧(reconcile)。典型系统Bayou,Dynamo。

课前问题

  • 问:Suppose we have the scenario shown in the Raft paper’s Figure 7: a cluster of seven servers, with the log contents shown. The first server crashes (the one at the top of the figure), and cannot be contacted. A leader election ensues. For each of the servers marked (a), (d), and (f), could that server be elected? If yes, which servers would vote for it? If no, what specific Raft mechanism(s) would prevent it from being elected?
  • 答:这里查考的是(extended raft paper论文)5.4.1的election resitriction。follower服务器只会投票给log比自己更新的candidate。更新的定义是,如果term更高就更新,如果term一样,就看谁的log更长就更新。
  • 于是,如果你的log比过半的人旧,就没有机会被选为leader。
  • (a)可以被选做leader 。除了 c. 同期log更长、d.更新一期 以外的人都会投票给它。
  • (d)也可以,所有人都会投票给它。
  • (f)不行,它的log还在第3期,比所有人都旧,没人会投票给它。

参见

https://pdos.csail.mit.edu/6.824/papers/raft-faq.txt

你可能感兴趣的:(分布式系统:raft)