Basic Paxos

Basic Paxos

[TOC]

什么是Basic Paxos

确定一个值

Basic Paxos描述的是多个节点如何就某个值达成共识。

三种角色

在Basic Paxos中,有提议者(Proposer)、接受者(Acceptor)、学习者(Learner)三种角色:

  • 提议者(Proposer):提议一个值,用于投票表决。一般来说,客户端扮演提议者的角色。
  • 接受者(Acceptor):对每个提议的值进行投票,并存储接受的值。一般来说,集群中的所有节点都扮演接受者的角色,参与共识协商,并接受和存储数据。
  • 学习者(Learner):被告知投票结果,存储达成共识的值,不参与投票。一般来说,学习者是数据备份节点。

如何达成共识

paxos是一个二阶段提交协议,包括准备阶段和接受阶段。

准备阶段

  • 提议者向所有接受者发送包含提案编号(注意:不需要包含提议值)的准备请求。

  • 接受者接收到准备请求后,

    • 如果准备请求的提案编号,小于等于接受者已经响应的准备请求的提案编号,那么接受者将承诺不响应这个准备请求。

    • 如果接受者之前没有通过提案,就发回一个尚无提案的准备响应。

    • 如果接受者之前有通过提案,那么接受者将承诺,会在准备请求的响应中,包含已经通过的最大编号的提案信息

  • 提议者接收到响应后,

    • 如果提议者接收到的准备响应少于半数节点,不发送接受请求。

    • 如果提议者接收到不少于半数节点的响应,根据响应中提案编号最大的提案的值,设置接受请求中的值。

接受阶段

  • 提议者发送接受请求。

  • 接受者接收到接受请求后,

    • 如果接受请求中的提案的提案编号,小于接受者已经响应的准备请求的提案编号,那么接受者将承诺不通过这个提案。
    • 否则,接受者存储这个值,并将其通知给所有的学习者。
  • 如果集群中有学习者,当接受者通过了一个提案时,就通知给所有的学习者。当学习者发现不少于半数的接受者都通过了某个提案,那么它也通过该提案,接受该提案的值。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容