分布式理论学习(4) | 青训营笔记

21 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天

今日继续做分布式理论的笔记,主要是共识协议:raft、paxos协议等。这些也可结合mit6.824课程进行学习。

共识协议

Raft协议:一种分布式一致性算法,即使出现部分节点故障,也不影响各节点,进而提高系统的整体可用性。

三种身份

  1. Leader-领导者,通常一个系统中是一主多从。leader负责处理所有的客户端请求,并向follower同步请求日志,当日志同步到大多数节点上后,通知follower提交日志。
  2. Follower-跟随者,不会发送任何请求。接受并持久化Leader同步的日志,在leader告知日志可以提交后,提交日志。当Leader出现故障时,主动推荐自己为Candidate(候选人)
  3. Candidate-备选者,Leader选举过程中的临时角色。向其他节点发送请求投票信息。如获得多数选票,则晋升为Leader。

raft论文中对这三者进行了详细的阐述。

image.png

image.png

leader选举过程

  1. 初始全部为Follower
  2. currentTerm +1
  3. 选举自己
  4. 向其他参与者发起RequestVote请求,retry直到:
    • 收到多数派投票,成为leader,并发送心跳。
    • 收到其他Leader请求,成为follower,更新自己的term。
    • 收到部分,但是未到多数,选举超时,随机timeout开始下一轮。

Log Replication

新Leader产生,Leader和Follower不一致,Leader强制覆盖follower的日志。

  1. Leader收到写请求W
  2. 将w写入本地log
  3. 向其他Follower发起AppendEntries RPC
  4. 等待多数派回复
    • 更新本机状态,返回给客户端
    • 下一个心跳通知Follower上一个Log已经被Committed了。
    • Follower也根据命令应用本地状态机。
  5. Follower也有问题,Leader一直Retry。

image.png

总结

raft更多的可以去看论文,讲解更为详细。 In Search of an Understandable Consensus Algorithm