返回信息流## MyPaxos
这是对multi-paxos协议服务的实现,并提供了给了使用者可以拓展的简单接口,以及简单的客户端。本实现有如下特性:
* 实现了multi-paxos中连续同一leader提交时,优化协议流程,将prepare和accept流程,优化到只有accept流程。
* 实现了节点崩溃恢复的机制。
* 提供了简单的易用的拓展接口给使用者,使用者可以基于此实现基于paxos服务的系统。
## 项目地址在 https://github.com/luohaha/MyPaxos
## paxos协议的简单说明
Paxos算法解决的问题是在一个可能发生上述异常的分布式系统中如何就某个值达成一致,保证不论发生以上任何异常,都不会破坏决议的一致性。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。
paxos协议中有三种角色:
* proposer : 提案的发起者
* accepter : 提案的接受者
* learner : 提案的学习者
paxos协议保证在每一轮的提案中,只要某一个提案被大于半数的accepter接受,本轮的提案也就生效了,不会再被修改和破坏。具体的算法说明可以看[维基百科](https://zh.wikipedia.org/wiki/Paxos%E7%AE%97%E6%B3%95)。
## 总体架构和流程示意图
* paxos服务器和客户端
http://7xrlnt.com1.z0.glb.clouddn.com/mypaxos.png
* paxos协议的提交流程
http://7xrlnt.com1.z0.glb.clouddn.com/mypaxos-2.png
* 多个instance的确认
http://7xrlnt.com1.z0.glb.clouddn.com/mypaxos-3.png
* learner的学习
http://7xrlnt.com1.z0.glb.clouddn.com/mypaxos-4.png
## 使用
使用MyPaxos协议服务,需要下面几步:
* 实现提交成功时需要执行的回调函数`PaxosCallback`
* 在各个节点上修改配置文件,启动paxos服务器
* 启动客户端,执行提交请求
在 https://github.com/luohaha/MyPaxos 上有我使用MyPaxos来实现一个分布式的简单kv存储的例子。
欢迎star!
这是一条镜像帖。来源:北邮人论坛 / java / #54752同步于 2017/1/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
分享一个java实现的multi paxos协议服务
poiuasd
2017/1/20镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
paxos没有仔细研究过,寒假回家再仔细看看楼主的代码学习一下。火车上网不好呀
有一些细节不知道楼主考虑了没有,可能我看得不够仔细,不知道楼主有没有对自己传递的消息加上总字节长度来防止消息读了一半就提交给程序去处理了,毕竟tcp是不对消息分界线的。
我考虑到了,网络库我是自己实现了一个简单的,服务器端使用的是多线程的模型,每个线程会将消息完整读出来后,才放入一个消息队列中。
【 在 weiyuan 的大作中提到: 】
: paxos没有仔细研究过,寒假回家再仔细看看楼主的代码学习一下。火车上网不好呀
: 有一些细节不知道楼主考虑了没有,可能我看得不够仔细,不知道楼主有没有对自己传递的消息加上总字节长度来防止消息读了一半就提交给程序去处理了,毕竟tcp是不对消息分界线的。
欢迎交流,一块学习,一块进步啊。
【 在 weiyuan 的大作中提到: 】
: paxos能正确实现确实很牛啊,我之前只能写raft协议的,还前后改了挺久的