浅谈分布式一致性协议|青训营笔记

100 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第6天 今天我学习了分布式一致性协议相关知识。

1.1分布式系统面临的挑战

1.数据规模越来越大
2.服务的可用性要求越来越高
3.快速迭代的业务要求系统足够易用\

1.2理想中的分布式系统

高性能:可拓展、低时延、高吞吐
正确:一致性、易于理解
可靠:容错、高可用\

1.3 HDFS

E851C2F2DDAC837B27CBAF1C9014DC56.jpg

2.1 Paxos

●The Part- Time Parliamen by Lamport 1989也就是人们提到的Paxos
●基本上就是一致性协议的的同义词
●该算法的正确性是经过证明的
Paxos是出了名的难以理解, Lamport本人在01年又写了-篇Paxos Made Simple
"The Paxos Algorighm, when presented in plain English, is very simple."
●算法整体是以比较抽象的形式描述,工程实现时需要做一些修改
Google在实现Chubby的时候是这样描述的
here are significant gaps between the description of the Paxos algorithm and the needs of a real-world system. . . . the final system will be based on an unproven protocol .\

2.2 Raft

2014年发表

1.易于理解作为算法的设计目标

使用了RSM、Log、 RPC的概念直接使用RPC对算法进行了描述
Strong Leader-based
使用了随机的方法减少约束

2.正确性
形式化验证

拥有大量成熟系统

2.3复制状态机(RSM)

● RSM ( replicated state machine )

Raft中所有的consensus都是直接使用Log作为载体

● Commited Index

一旦 Raft更新Commited Index,意味着这个Index前的所有Log都可以提交给状态机了Commited Index是不持久化的,状态机也是volatile的,重启后从第一条Log开始

2.4 Raft角色

025F50227929CA2DFADA046A3A6EEA23.jpg

2.4 Raft Term


V每个Leader服务于一个termV每个term至多只有一个leader

v每个节点存储当前的term

V每个节点term从一开始,只增不减

V所有rpc的request reponse都携带term

V只commit本term内的log

D4E9FDCF181C213FD708B602AAEA375E.jpg

2.53.8 Raft主节点失效


Leader定期的发送AppendEntries RPCs给其余所有节点

如果Follower有一-段时间没有收到 Leader的AppendEntries,则转换身份成为Candidate

Candidate自增自己的term,同时使用RequestVote RPCs向剩余节点请求投票raft在检查是否可以投票时,会检查log是否outdated,至少不比本身旧才会投给对应的Candidate

如果多数派节点投给它,则成为该term的leader