分布式(四)| 青训营笔记

68 阅读2分钟

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

共识协议

RAFT协议

RAFT协议是一种分布式一致性算法,即使出现部分节点故障、网络延时等情况也不影响各节点,进而提高系统的整体可用性。

  • leader: 领导者,通常一个系统是一主多从,leader负责处理所有的客户端请求,并向follower同步请求日志,当日志同步到大多数节点后通知follower提交日志
  • follower: 跟随者,不会发送任何请求,接受并持久化leader同步的日志,在leader告知日志可以提交后提交日志。当leader出现故障时,主动推荐自己为candidate
  • candidate: 备选者,leader选举过程中的临时角色,向其他节点发送请求投票信息,如果获得大多数选票则晋升为leader
  • log: 日志,节点之间同步的信息,以只追加写的方式进行同步,解决了数据被覆盖的问题
  • term: 任期号,单调递增,每个term内最多只有一个leader
  • committed: 日志被复制到多数派节点,即可认为已经被提交
  • applied: 日志被应用到北极状态机

Paxos协议

Paxos算法是基于消息传递且具有高度容错特性的一致性算法 与RAFT区别

  • paxos可以并发修改日志,raft写日志操作必须是连续的
  • paxos可以随机选主,不必最新最全的节点当选leader

优点:写入并发性能高,所有节点都能写入

缺点:没有一个节点有完整的最新的数据,恢复流程复杂,需要同步历史记录

步骤

  1. Proposers获取proposal ID N并向所有acceptors广播
  2. 如果n>min_proposal,则min_proposal :=n,acceptors返回accepted_value和proposal
  3. proposers接收过半数回复,选择proposal最大的accepted_value作为共识
  4. proposers广播Accept(n,value)到所有节点
  5. 如果n>=min_proposal,则min_proposal :=n,accepted_value :=value,本地持久化并返回
  6. 接收过半请求,如果有结果>n,更新新的提议,跳转步骤1