V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
luohaha
V2EX  ›  分享创造

分享一个 Java 实现的 multi paxos 协议服务

  •  
  •   luohaha · 2017-01-20 15:59:45 +08:00 · 2393 次点击
    这是一个创建于 2646 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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!

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2916 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:57 · PVG 10:57 · LAX 19:57 · JFK 22:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.