MyPaxos
这是对 multi-paxos 协议服务的实现,并提供了给了使用者可以拓展的简单接口,以及简单的客户端。本实现有如下特性:
- 实现了 multi-paxos 中连续同一 leader 提交时,优化协议流程,将 prepare 和 accept 流程,优化到只有 accept 流程。
- 实现了节点崩溃恢复的机制。
- 提供了简单的易用的拓展接口给使用者,使用者可以基于此实现基于 paxos 服务的系统。
项目地址在 https://github.com/luohaha/MyPaxos
paxos 协议的简单说明
Paxos 算法解决的问题是在一个可能发生上述异常的分布式系统中如何就某个值达成一致,保证不论发生以上任何异常,都不会破坏决议的一致性。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。
paxos 协议中有三种角色:
- proposer : 提案的发起者
- accepter : 提案的接受者
- learner : 提案的学习者
paxos 协议保证在每一轮的提案中,只要某一个提案被大于半数的 accepter 接受,本轮的提案也就生效了,不会再被修改和破坏。具体的算法说明可以看维基百科。
总体架构和流程示意图
- paxos 服务器和客户端

- paxos 协议的提交流程

- 多个 instance 的确认

- learner 的学习

使用
使用 MyPaxos 协议服务,需要下面几步:
- 实现提交成功时需要执行的回调函数
PaxosCallback - 在各个节点上修改配置文件,启动 paxos 服务器
- 启动客户端,执行提交请求
在 https://github.com/luohaha/MyPaxos 上有我使用 MyPaxos 来实现一个分布式的简单 kv 存储的例子。
欢迎 star!