在前面一篇文章我们讲到了理解分布式一致性:Paxos协议之Basic Paxos,本篇文章我会讲解更加通用和普遍的Multi-Paxos协议。

在Basic Paxos协议中,每一次执行过程都需要经历Prepare->Promise->Accept->Accepted 这四个步骤,这样就会导致消息太多,从而影响分布式系统的性能。

如果Leader足够稳定的话,Phase 1 里面的Prepare->Promise 完全可以省略掉,从而使用同一个Leader去发送Accept消息。

当然我们还要对请求消息做一些改造,这里我们在请求里面加入了轮数I,每过一轮,I+1 。

下面我们用序列图的形式尽可能的去展示Multi-Paxos的魅力。

Multi-Paxos without failures

下图我们展示一个基本的Multi-Paxos一次执行交互流程,系统有1个Client,1个Proposer, 3个Acceptor, 1个Learner。

ClientProposerAcceptor1Acceptor2Acceptor3LearnerRequestPrepare(1)Prepare(1)Prepare(1)Promise(1,I,Va)Promise(1,I,Vb)Promise(1,I,Vc)V is the last of (Va,Vb, Vc). I is roundnumber.Accept!(1,I,V)Accept!(1,I,V)Accept!(1,I,V)Accepted(1,I,V)Accepted(1,I,V)Accepted(1,I,V)Accepted(1,I,V)Accepted(1,I,V)Accepted(1,I,V)ResponseClientProposerAcceptor1Acceptor2Acceptor3Learner

Multi-Paxos when phase 1 can be skipped

上面我们讲到在Multi-Paxos中,如果Leader足够稳定的话,在接下来的执行中,phase 1 的请求其实是可以被省略的,那么接下来我们看一下被省略的整个流程。

这里round number需要+1,表示已经进入下一轮了。

ClientProposerAcceptor1Acceptor2Acceptor3LearnerRequestAccept!(1,I+1,W)Accept!(1,I+1,W)Accept!(1,I+1,W)Accepted(1,I+1,W)Accepted(1,I+1,W)Accepted(1,I+1,W)Accepted(1,I+1,W)Accepted(1,I+1,W)Accepted(1,I+1,W)ResponseClientProposerAcceptor1Acceptor2Acceptor3Learner

Multi-Paxos when roles are collapsed

在Basic-Paxos中我们区分了很多角色,有Clients,Proposers, Acceptors and Learners。实际上Proposers, Acceptors and Learners可以合并成一个,我们把它统称为Server。下面是合并之后的序列图。

ClientServer1Server2Server3RequestPrepare(N)Prepare(N)Promise(N,I,Va)Promise(N,I,Vb)Accept!(N,I,V)Accept!(N,I,V)Accepted(N,I)Accepted(N,I)ResponseClientServer1Server2Server3

大家看看,是不是实现起来简单很多?

Multi-Paxos when roles are collapsed and the leader is steady

同样的,当Leader很稳定的时候,我们可以在接下来的执行中忽略Phase 1. 如下图所示:

ClientServer1Server2Server3RequestAccept!(N,I+1,W)Accept!(N,I+1,W)Accepted(N,I+1)Accepted(N,I+1)ResponseClientServer1Server2Server3

更多教程请参考flydean的博客

理解分布式一致性:Paxos协议之Multi-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协议之Generalized Paxos & Byzantine Paxos

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

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

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

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

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

  6. 理解分布式一致性与Raft算法

    理解分布式一致性与Raft算法 永远绕不开的CAP定理 出于可用性及负载方面考虑,一个分布式系统中数据必然不会只存在于一台机器,一致性简单地说就是分布式系统中的各个部分保持数据一致 但让数据保持一致往 ...

  7. paxos协议(1)-朴素paxos

    前言 学习paxos协议,最困惑我的两点是: 1. 朴素paxos是怎么样的?这部分主要是原理: 2. paxos协议是怎么运用到分布式系统解决问题的.因为很多博客的开篇说paxos协议可以运用在很多 ...

  8. Paxos协议理解

    第三次报告: 理解Paxos协议 一. Paxos协议背景 什么是Paxos协议? 一般地,从客户端和服务器的角度,任何一个分布式系统都可以理解成由一个服务器集合和一个客户端集合组成,一个或多个客户端 ...

  9. 基于hashicorp/raft的分布式一致性实战教学

    本文由云+社区发表 作者:Super 导语:hashicorp/raft是raft算法的一种比较流行的golang实现,基于它能够比较方便的构建具有强一致性的分布式系统.本文通过实现一个简单的分布式缓 ...

随机推荐

  1. 【故障公告】部署在 k8s 上的博客后台昨天与今天在访问高峰多次出现 502

    非常抱歉,从昨天上午开始,部署在 k8s 集群上的博客后台(基于 .NET Core 3.1 + Angular 8.2 实现)出现奇怪问题,一到访问高峰就多次出现 502 ,有时能自动恢复,有时需要 ...

  2. K - 回转寿司(值域段数(板题) + 动态开点)

    回转寿司 Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店.在这里,一盘盘寿司通过传送带依次呈现在小Z眼前.不同的寿 司带给小Z的味觉感受是不一样的,我们定义小Z对每盘寿司都有一个 ...

  3. 技术再深入一点又何妨?一脸懵B的聊Actor

    记得上次深入 Resin 源码时,见到了Actor 字眼,当时主要从 Resin 中抽取关键架构,就屏蔽了 Actor 相关代码.未曾想这两天研究 flink 的运行架构以及源码,再次与 Actor ...

  4. keras与卷积神经网络(CNN)实现识别minist手写数字

    在本篇博文当中,笔者采用了卷积神经网络来对手写数字进行识别,采用的神经网络的结构是:输入图片——卷积层——池化层——卷积层——池化层——卷积层——池化层——Flatten层——全连接层(64个神经元) ...

  5. Flask 入门(十三)

    上文提到的Blueprint和厉害吧? 可是有个缺点,就是,还不够框架,因为一个功能不可能就一个文件啊?多文件怎么解决? 还和上文项目架构一样 1.新建两个目录,admin,function 2.ad ...

  6. javascript入门 之 用bootstrap-table写一个表格

    方法1(对普通的 table 设置 data-toggle="table" 即可): <!DOCTYPE html> <html> <head> ...

  7. Android 圆形图片库 CircleImageView

    高仿微信朋友圈 10s 视频裁剪 引语 晚上好,我是猫咪,我的公众号「程序媛猫咪」会推荐 GitHub 上好玩的项目,挖掘开源的价值,欢迎关注我. <Android 图片裁剪库 uCrop> ...

  8. python3(四十)datetime timestamp str

    """时间处理 """ __author__on__ = 'shaozhiqi 2019/9/25' # !/usr/bin/env pyt ...

  9. Linux忘记密码解决方案

    Linux 忘记密码解决方法 很多朋友经常会忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可. 步骤如 ...

  10. 运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接

    运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接 最近在项目中可能要用到socket相关的东西来发送消息,所以初步研究了下socket的TC ...