在前面一篇文章我们讲到了理解分布式一致性: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. Pytest系列(6) - conftest.py的详细讲解

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 什么是conftest.py 可以 ...

  2. 玩转控件:对Dev的GridControl控件扩展

    缘由 一切实现来源于需求,目的在于不盲目造轮子,有小伙伴儿在看了<玩转控件:对Dev中GridControl控件的封装和扩展>文章后,私信作者说,因公司业务逻辑比较复杂,展示字段比较多,尤 ...

  3. Light of future-冲刺集合

    table th:nth-of-type(1) { width: 85px; } table th:nth-of-type(2){ width: 80px; } table th:nth-of-typ ...

  4. Vue学习(1)---Vue介绍

    Vue是什么 官方定义:Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层 ...

  5. python使用阿里云oss-sdk

    python使用阿里云oss-python-sdk 请访问github获取源码 安装 pip install oss2 安装验证 >>> import oss2 >>&g ...

  6. shell命令-for语句

    数字循环 sum=0 for((i=1;i<=10;i++)) do sum=$(($sum+$i)) echo "$i:$sum" done 字符循环 for i in ` ...

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

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

  8. vueCli 运行报错

    error 如下: npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! shopping@0.1.0 serve: `vue-cli-service ...

  9. Docker搭建Nessus pro笔记

    0x01 准备Docker环境 拉取镜像: docker pull ubuntu 创建容器: docker run -p 9922:22 -p 8834:8834 --name nessus -it ...

  10. 【three.js第五课】光线的添加和感光材料

    材料分类: MeshBasicMaterial:基础网孔材料,一个以简单着色(平面或线框)方式来绘制几何形状的材料.MeshLambertMaterial:兰伯特网孔材料,一种非发光材料(兰伯特)的表 ...