理解分布式一致性:Paxos协议之Generalized Paxos & Byzantine Paxos

  • Generalized Paxos
  • Byzantine Paxos
    • Byzantine Multi-Paxos
    • Fast Byzantine Multi-Paxos

在前面一篇文章我们讲到了理解分布式一致性:Paxos协议之Cheap Paxos & Fast Paxos,本篇文章我会讲解Paxos协议的另外两个变种:Generalized Paxos和Byzantine Paxos。

Generalized Paxos

我们大家都知道,分布式一致性的最大问题就是数据同步的问题,而产生问题的原因就是冲突,按照之前讲到的各种Paxos协议方案,发生了冲突之后就必须解决冲突然后重新发送请求,这样就会提高数据同步的成本和时间,那么有没有更好的方式来解决这个问题呢?

答案肯定是有。在分布式系统中,冲突是不可避免的,遇到冲突的时候是不是每次都解决冲突然后重新发送请求呢?我们举个例子:

如果Client1发送请求ReadA,Client2 发送请求ReadB,系统4个Acceptors,有2个接收ReadA,有2个接收ReadB,在共识层面来说,因为没有达到最大的共识个数,达不成共识,需要重新发送。但是如果我们仔细观察一下两个请求,ReadA,ReadB这两个命令是没有任何联系的,无论先执行哪一个都是同样的效果。那么我们可以认为这种情况是没有冲突的,我们在执行层面自行安排两个请求的顺序,而不用再次共识。 这就叫做Generalized Paxos。

这种共识的前提就是不同命令的先后顺序无关。下面以序列图的形式更加详细的介绍:

Client1Client2LeaderAcceptor1Acceptor2Acceptor3LearnerAccept!(ReadA)Accept!(ReadA)Accept!(ReadA)Accept!(ReadA)Accept!(ReadB)Accept!(ReadB)Accept!(ReadB)Accept!(ReadB)Leader and Acceptor1Accepted(N,<ReadA,ReadB>), Acceptor2and Acceptor3Accepted(N,<ReadB,ReadA>),顺序无关,不冲突,最终值Accepted(N,<ReadA,ReadB>)Accepted(N,<ReadA,ReadB>)Accepted(N,<ReadA,ReadB>)Accepted(N,<ReadA,ReadB>)Accepted(N,<ReadA,ReadB>)下面是冲突的情况,WriteA和ReadA同时发生,产生冲突时,Leader自行解决冲突,需要重发请求Accept!(ReadA)Accept!(ReadA)Accept!(ReadA)Accept!(ReadA)Accept!(WriteA)Accept!(WriteA)Accept!(WriteA)Accept!(WriteA)Accepted(N,<ReadA,WriteA>)Accepted(N,<ReadA,WriteA>)Accepted(N,<WriteA,ReadA>)Accepted(N,<WriteA,ReadA>)冲突产生,Leader根据协议自行决定执行顺序,这里是<ReadA,WriteA>,N+1Accept!(N+1,<ReadA,WriteA>)Accept!(N+1,<ReadA,WriteA>)Accept!(N+1,<ReadA,WriteA>)Accepted(N+1,<ReadA,WriteA>)Accepted(N+1,<ReadA,WriteA>)Accepted(N+1,<ReadA,WriteA>)Client1Client2LeaderAcceptor1Acceptor2Acceptor3Learner

Byzantine Paxos

最后一个我们要讲的Paxos协议是Byzantine Paxos。熟悉虚拟货币的人应该对拜占庭协议并不陌生,这里我们也不多讲拜占庭协议,后面我会用单独的文章来详细介绍拜占庭协议。

上面我们讲到的所有的Paxos协议,只讲到了服务出错的情况,并没有考虑服务伪造篡改信息的情况,即并没有考虑到恶意节点。而拜占庭协议就是为了解决这个问题而产生的。

Byzantine Paxos比正常的Paxos协议多了一个消息验证的过程,这个验证使用了拜占庭协议。

Byzantine Multi-Paxos

下面是个Byzantine Multi-Paxos的序列图:

ClientProposerAcceptor1Acceptor2Acceptor3LearnerRequestAccept!(N,I,V)Accept!(N,I,V)Accept!(N,I,V)验证消息Verify(N,I,V) - BROADCASTVerify(N,I,V) - BROADCASTVerify(N,I,V) - BROADCASTVerify(N,I,V) - BROADCASTAccepted(N,V)Accepted(N,V)Accepted(N,V)Accepted(N,V)Accepted(N,V)Accepted(N,V)Response(V)ClientProposerAcceptor1Acceptor2Acceptor3Learner

Fast Byzantine Multi-Paxos

同样的也会有Fast Byzantine Multi-Paxos,为了更加Fast,本协议将Verify和Accepted进行融合,放在一步完成。

ClientAcceptor1Acceptor2Acceptor3LearnerAccept!(N,I,V)Accept!(N,I,V)Accept!(N,I,V)验证消息,同时AcceptedAccepted(N,I,V) - BROADCASTAccepted(N,I,V) - BROADCASTAccepted(N,I,V) - BROADCASTAccepted(N,I,V) - BROADCASTAccepted(N,I,V) - BROADCASTAccepted(N,I,V) - BROADCASTAccepted(N,I,V) - BROADCASTResponse(V)ClientAcceptor1Acceptor2Acceptor3Learner

更多精彩内容且看:

  • 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
  • Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
  • Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
  • java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程

更多教程请参考flydean的博客

理解分布式一致性:Paxos协议之Generalized Paxos Byzantine Paxos相关推荐

  1. 理解分布式一致性:Raft协议

    理解分布式一致性:Raft协议 什么是分布式一致性 Leader选举 日志复制流程 term选举周期 timeout 选举和选举timeout 选举分裂 日志复制和心跳timeout 在分布式系统中, ...

  2. 理解分布式一致性:Paxos协议之Basic Paxos

    理解分布式一致性:Paxos协议之Basic Paxos 角色 Proposal Number & Agreed Value Basic Paxos Basic Paxos without f ...

  3. 理解分布式一致性:Paxos协议之Cheap Paxos Fast Paxos

    理解分布式一致性:Paxos协议之Cheap Paxos & Fast Paxos Cheap Paxos Message flow: Cheap Multi-Paxos Fast Paxos ...

  4. 理解分布式一致性:Paxos协议之Multi-Paxos

    理解分布式一致性:Paxos协议之Multi-Paxos Multi-Paxos without failures Multi-Paxos when phase 1 can be skipped Mu ...

  5. 理解分布式一致性:拜占庭容错与PBFT

    理解分布式一致性:拜占庭容错与PBFT 拜占庭问题 拜占庭容错BFT PBFT(Practical Byzantine Fault Tolerance) why 3f+1 ? PBFT 的优点 PBF ...

  6. 一次性吃透分布式一致性Raft协议

    简介 Raft是一种管理复制日志的一致性算法,它提供了和 Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 不同,使得 Raft 算法更加容易理解并且更容易构建实际的系统.为了提升可理 ...

  7. 分布式一致性协议 之 Paxos协议

    1.什么是Paxos Paxos协议其实说的就是Paxos算法, Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一. Paxos由 莱斯利· ...

  8. 浅谈paxos协议与zookeeper

    一.介绍两篇好博客 1.zookeeper全解析–paxos作为灵魂 https://blog.csdn.net/YQlakers/article/details/72630353 2.下面这篇文章介 ...

  9. 图解Raft:应该是最容易理解的分布式一致性算法

    分布式一致性 想象一下,我们有一个单节点系统,且作为数据库服务器,然后存储了一个值(假设为X).然后,有一个客户端往服务器发送了一个值(假设为8).只要服务器接受到这个值即可,这个值在单节点上的一致性 ...

最新文章

  1. php mysqli new 连接,php mysqli 连接数据库
  2. eclipse C/C++环境搭建
  3. django 后台日期_Django中的日期和时间格式 DateTimeField
  4. 英特尔核显自定义分辨率_华为推出两款MateBook D系列笔记本:搭载英特尔11代酷睿...
  5. 开源中国android代码是什么,开源中国 OsChina Android 客户端源码分析(1)启动界面 app_start...
  6. guns框架字典取值_10分钟搞定Guns快速开发平台
  7. s3c2410多通道adc驱动及测试程序
  8. 计算机组成原理:计算机内负数二进制求得方式
  9. 字节跳动一面:如何从 100 亿 URL 中找出相同的 URL?
  10. 【数据分享】滤泡性淋巴瘤研究数据集
  11. c++ win10下 遍历文件夹的方式, dirent.h头文件缺失问题
  12. 实对称阵的正交相似对角化
  13. 快速下载网页全部图片的方法
  14. 【生活中的逻辑谬误】以暴制暴和压制理性
  15. 给ibus-rime输入法添加小鹤双拼方案
  16. 想实现华为BLM模型,人力资源必不可少
  17. 每日问答——PMP题库训练2
  18. 使用EasyExcel下载,文件名乱码问题处理
  19. SpringBoot--SpringBoot 读取Properties文件(结合JDBC)
  20. OpenGL Transform Feedback

热门文章

  1. 27计算机表演赛命题,27届计算机表演赛命题搜索赛答案(数学3)
  2. 6.OD-Run trace /Hit trace
  3. (六)boost库之内存管理shared_ptr
  4. shell printf命令:格式化输出语句
  5. 基于嗅探原理的原始套接字木马
  6. JDK中这些常用方法也有Bug
  7. 突发!Redis之父退出:不在维护Redis项目
  8. Go服务迁到K8s后老抽风重启? 记一次完整的线上问题解决过程
  9. 字符函数和内存函数模拟实现
  10. AOM Summit:拥抱开源,引领新技术创新