分布式系统 - 一致性及协议

分布式系统一致性

常见的一致性方案

一致性算法

1 Paxos

1.1 Paxos 集群角色

  • Proposer - 提出议案
  • Acceptor - 参与角色
  • Learner - 不参与提案, 接收已通过提案

1.2 提案选定流程

Prepare 阶段

  • Proposer 选择一个提案编号 M,向超过半数的 Acceptor 成员发送prepare 请求
  • Acceptor 接收到prepare 请求,M > N (该 Acceptor 中已响应的所有 prepare 请求的最大编号 N),则将最大的N 响应给 Proposer ,并承诺不再接收小于M 的提案

Accept 阶段

  • Proposer 接收到超过半数 Acceptor 对于 M 的 prepare 请求的响应,则发送 [M,V] 提案 Accept 请求给 Acceptor ,V 是 Acceptor 接收到响应编号中最大的 编号对应value。
  • Acceptor 接收到 Accept 请求,只要该Acceptor 没有同意过 > M 编号的提案,就通过这个提案;

Learn 阶段

  • Proposer 将通过的提案 同步给 Learner
Paxos协议-提案选定流程

总结:Paxos协议的容错性很好,只要有超过半数的节点可用,整个集群就可以自己进行Leader选举,

2 Raft 协议

2.1 Raft 集群角色

  • Leader
  • Follower
  • Candidate - 候选者

2.2 Leader 选举阶段

  • 初始化阶段 所有节点都是 follower 节点
  • follower 节点设置 currentIndex = 1, 设置状态为 Candidate、给自己投票、并向其他节点发送投票请求;
    • 赢得选举
    • 其他leader
    • 选举超时

算法流程:

  • A_currentIndex > B_currentIndex = 承认A leader , B follower
  • 如果 两个Candidate得票一样多, 重选

2.3 数据复制

  • leader 接收写 entry 请求
  • entry 发送给所有 follower ,半数 follower 回复 ok,则返回给客户端成功,并把commitindex 设置为 该entry 的index,满足 一致性.

你可能感兴趣的:(分布式系统 - 一致性及协议)