分布式理论—现代架构基石3|青训营笔记

75 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
主题:共识协议

共识协议

Quorum NWR模型

Quorum NWR三要素
N: 在分布式存储系统中,有多少份备份数据。
w: 代表一次成功的更新操作要求至少有w份数据写入成功。
R: 代表一次成功的读数据操作要求至少有R份数据成功读取。
为了保证强一致性,需要保证 W+R>N。
Quorum NWR模型将CAP的选择交给用户,是一种简化版的一致性模型。 思考: 引起的并发更新问题读者如果读到副本1和副本2,得出v=3的结论如果读到副本2和副本3,得出v=2的结论。
问题根源: 允许数据被覆盖。

RAFT协议

Raf协议是一种分布式一致性算法(共识算法),即使出现部分节点故,网络延时等情况,也不影响各节点,进而提高系统的整体可用性。Raft是使用较为广泛的分布式协议。一定意义上讲,RAFT也使用了Quorum机制。
Leader - 领导者,通常一个系统中是一主 (Leader) 多从(Follower) 。Leader 负责处理所有的客户端请求,并向Follower同步请求日志,当日志同步到大多数节点上后,通知Follower提交日志。
Follower - 跟随者,不会发送任何请求。接受并持久化Leader同步的日志,在Leader告知日志可以提交后,提交日志。当Leader出现故障时,主动推荐自己为Candidate。
Candidate - 备选者,Leader选举过程中的临时角色。向其他节点发送请求投票信息。如果获得大多数选票,则晋升为Leader。
切主: 当Leader出现问题时,就需要进行重新选举 1.Leader发现失去Follower的响应,失去Leader身份2.两个Follower之间一段时间未收到心跳,重新进行选举,选出新的Leader,此时发生了切主3.Leader自杀重启,以Follower的身份加入进来 新leader已经选出,产生问题: 老leader未失去身份,了“双主”该如何解决呢?
image.png
Stale读
发生Leader切换,old leader收到了读请求。如果直接响应,可能会有Stale Read。如何解决?
解决方案,保证读的强一致
读操作在lease timeout内,默认自己是leader;不是则发起一次heartbeat。等待Commit Index应用到状态机。
Election timeout > lease timeout: 新leader上任,自从上次心跳之后一定超过Electiontimeout,旧leader大概率能够发现自己的Lease过期。

Paxos协议

Paxos算法与RAFT算法区别:
1.Multi-Paxos 可以并发修改日志,而Raft写日志操作必须是连续的2.Multi-Paxos 可以随机选主,不必最新最全的节点当选Leader。
Paxos优势: 写入并发性能高,所有节点都能写入Paxos劣势: 没有一个节点有完整的最新的数据,恢复流程复杂,需要同步历史记录。