用python实现的paxos算法的演示实现。
paxos的Python项目详细描述
这是用python实现的paxos算法的演示实现。
要求
- Python3
安装
pip install paxos
实施说明
- paxos算法的提议者、接受者和学习者角色是 在中使用从公共Agent类派生的类实现。
- 每个角色/代理都在单独的进程中运行。
- 进程之间的通信使用Queue对象进行,因此 进程在同一台计算机上运行。
- 帕克索斯简单地说,“我们要求不同的提案 不同的数字。“为了达到这个目的,我们开始每个提议者的过程 建议编号序列等于其自身的PID,然后递增编号 对于每个新的提案,按系统中提案者进程的数目。 这似乎也是由 谷歌员工。
- 假设系统中的所有进程都被视为 系统从一开始,无需通过 通过法令。
参考文献
- 兰波特关于这个主题的第一篇论文:The Part-Time Parliament
- 兰波特后来关于paxos的论文,第一个没有任何 希腊语引用:Paxos Made Simple
- 谷歌员工为Chubby构建Paxos实现的经验: Paxos Made Live - An Engineering Perspective
待办事项
- 添加角色的折叠版本,以便每个进程扮演
角色。
- 一旦我们有了一个折叠的版本,领导就应该重试客户的请求
如果他们确定实例在一段时间后还没有被决定
时间量。这应该可以解决几个问题:
- 学习者无法确定是否有更多的价值观 去学习(当它是最后一个丢失的值时)。
- 因为领导者们现在记住了 客户请求他们建议,如果要求建议者重试 实例(例如,来自缺少某个值的学习者)则是 可能学习到的价值在没有 承兑人已经接受了该实例中的值(这意味着 建议者应该指定值,但是因为它没有记住 它只是建议没有原始值)。
- 一旦我们有了一个折叠的版本,领导就应该重试客户的请求
如果他们确定实例在一段时间后还没有被决定
时间量。这应该可以解决几个问题:
- 当一个学习者要求一个提议者重新尝试时,提议者不应该重新尝试 已在某个时间段内重试该建议,因为 否则,通过重新增加提案编号,将保证 在该实例中有一个成功的协议它正在重试。
- 有一个始终如一的领导者,只执行第一阶段一次。