这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
今日继续做分布式理论的笔记,主要是共识协议:raft、paxos协议等。这些也可结合mit6.824课程进行学习。
共识协议
Raft协议:一种分布式一致性算法,即使出现部分节点故障,也不影响各节点,进而提高系统的整体可用性。
三种身份
- Leader-领导者,通常一个系统中是一主多从。leader负责处理所有的客户端请求,并向follower同步请求日志,当日志同步到大多数节点上后,通知follower提交日志。
- Follower-跟随者,不会发送任何请求。接受并持久化Leader同步的日志,在leader告知日志可以提交后,提交日志。当Leader出现故障时,主动推荐自己为Candidate(候选人)
- Candidate-备选者,Leader选举过程中的临时角色。向其他节点发送请求投票信息。如获得多数选票,则晋升为Leader。
raft论文中对这三者进行了详细的阐述。
leader选举过程
- 初始全部为Follower
- currentTerm +1
- 选举自己
- 向其他参与者发起RequestVote请求,retry直到:
- 收到多数派投票,成为leader,并发送心跳。
- 收到其他Leader请求,成为follower,更新自己的term。
- 收到部分,但是未到多数,选举超时,随机timeout开始下一轮。
Log Replication
新Leader产生,Leader和Follower不一致,Leader强制覆盖follower的日志。
- Leader收到写请求W
- 将w写入本地log
- 向其他Follower发起AppendEntries RPC
- 等待多数派回复
- 更新本机状态,返回给客户端
- 下一个心跳通知Follower上一个Log已经被Committed了。
- Follower也根据命令应用本地状态机。
- Follower也有问题,Leader一直Retry。
总结
raft更多的可以去看论文,讲解更为详细。 In Search of an Understandable Consensus Algorithm