前言

google的chubby的作者Mike Burrows说过,世界上只有一种一致性算法,那就是paxos,由此可见paxos协议的影响力。某司相关部门对paxos有一定的研究,并且已经在生产环境的kv中有实现并运行,同时编写了很多内网文章。最近重读了相关的文章。 本文尝试从笔者在研究过程中比较困惑的地方入手,分析paxos的协议如何理解,以及如何应用到生产环境中。

paxos具体做什么?

paxos本质上是一个共识算法。也就是在一个系统中如何实现就一个值达成共识:在达成共识之前,这个值不存在,在达成共识之后,这个值不可修改。这也就是为什么在《The Part-Time Parliament》经典论文中,以paxos岛国的议会达成统一政令进行举例。因为就某一项政令而言:达成之前,这项政令不存在;达成之后,这项政令不可修改。

可能读者和笔者一样,先入为主的以为paxos是一个实现在多机数据一致的协议。如果从这个角度来理解,肯定疑惑重重。因为我们知道,在多机系统中一个key对应的value是可以改变的,甚至是有可能删除的。

如果paxos只是为了在系统中达成某一项统一值,并且这个值达成之后不能再修改了,那这个paxos对我们来说有什么用呢?毕竟一个key对应的value是有可能变化的。这个就涉及到如何在生产环境中应用paxos了。这个其实在《paxos made simple》中有相关的介绍。我们后续进行分析。

所以本篇文章将从两个部分进行分析

  1. 如何理解paxos的执行过程。
  2. 如何将paxos应用到分布式系统中

如何理解paxos的执行过程

这部分没有涉及到我们熟悉的计算机领域相关的知识,因而无法进行迁移学习。所以在理解paxos的过程中,我们始终要明确paxos的目标:在系统中达成一个不可改变的值。那么我们在分析时就可以理解每一步为何要这么设计。

paxos协议中的三种角色

paxos协议中有三种角色,proposers、acceptors、learners。

  • proposers,提出提议者;
  • acceptors,接受提议者;
  • learners,提议确定后,向acceptors学习提议;

为什么要有这三类角色?可以理解我们执行paxos的过程,就是在系统中扩散提议的过程;以议会投票为例,议员提出议题(proposers),大部分议员进行投票(acceptors),投票通过后,向所有公民(learners)同步决议结果。

paxos选举过程

我们这里直接介绍paxos投票过程,不详述设计paxos算法的过程。对paxos算法的设计过程有兴趣的读者可以去参阅《paxos made simple》,对理解paxos的过程有很大帮助。

  • 阶段一A:prepare

proposer ——> acceptor,proposer向超过半数(majority)的acceptor发送带有编号n的prepare消息,n必须比该proposer之前发送的prepare消息的编号都要大;系统中不同的proposer生成的编号相互不重复,单个proposer内编号递增;

  • 阶段一B:promise

acceptor——>proposer:acceptor返回提议的proposer是否接受prepare消息。《paxos made simple》中解释为,acceptor不会接受编号小于(已经接受的prepare request的编号)的accept请求;

详细分析,则是这两种情况:

  1. acceptor之前没有收到其他的proposer提交的prepare消息,则返回接受;
  2. acceptor之前收到其他proposer提交的prepare消息:
    1. 之前收到的prepare消息编号m小于当前接收的prepare消息,返回接受;
    2. 之前收到的prepare消息编号m大于当前接受到的prepare消息,忽略或者返回已经接受的prepare请求最大编号;
    3. 之前已经收到accept消息,则返回accept消息的编号m,同时返回accepted的value值,即<m, value>

返回接受了序号为n的prepare请求,代表着该acceptor承诺不再接受序号小于n的accept请求;

  • 阶段二A:accept

proposer——>acceptor,proposer接受到超过半数(majority)的acceptor对prepare的接受返回之后,从返回中选择序号最大的已接受的proposal请求的value值,作为自己提交的value值,否则proposer可以提出自己的value;preposer对超过半数的(majority)的acceptors发送包含编号及value的accept请求。

  • 阶段二B:accepted

acceptor——> proposer, accptor在接受到accept请求之后,判断该accept请求的序号n是否小于当前已经接受过的prepare request的序号的最大值,如果小于,则不接受该accept请求(说明有一个序号更大的paxos流程正在进行);反之则不接受该请求;

  • 阶段三:learn

对于已经被majority的acceptors接受的提议,则同时learner进行同步;《paxos made simple》中给出的方案是对于acceptor通过的提议,则通知所有learner;learner收到超过半数的acceptor的请求后,则标志这个提议被接受。这是一个非常朴素的方案,为了减少learn过程中的消息数,我们可以设置distinct learn集群,acceptor只发送通过的消息到distinct learn集群。如果

paxos选举过程为什么要这样执行

  • 为什么每次的请求都需要超过半数(majority)的acceptors接受?

超过半数接受,意味着不可能同时有两个请求能够在acceptor中得到通过。

  • prepare阶段的目的是什么?假设不要prepare怎么样?

如果不要prepare阶段,意味着有可能多个accept操作同时进行,导致没有多数的acceptor接受到统一值,系统达成不了统一。

增加prepare阶段;相当于探测系统是否有已经达成一致的协议。如果有,则保证新提交的value和已经达成一致的value相同。如此则不违反协议达成后,value不再变化的约定。另外,prepare阶段相当于给系统加上写入锁,prepare阶段成功后,其他序号更低的proposer不能写入成功。除非此时另外有一个proposer有一个序号更高的写入请求,此时当前的proposer会写入失败;保证了同一时刻只有一个proposer的accept请求被超过半数(majority)的acceptors接受。

如何在生产环境中应用paxos

《paxos made simple》中给出的一种方案是,将paxos和状态机相结合。

假设分布式环境下每台机器作为一个状态机,起始状态一致。运行过程中的修改操作,作为paxos的value执行一次paxos过程。这样修改操作可以同步到所有机器,之后对状态机执行修改操作。各个机器上的状态机由于初始状态一致,修改操作一致,那么执行后的状态也是一致的。

如何理解分布式paxos协议相关推荐

  1. 理解这两点,也就理解了paxos协议的精髓

    什么是paxos协议? Paxos用于解决分布式系统中一致性问题.分布式一致性算法(Consensus Algorithm)是一个分布式计算领域的基础性问题,其最基本的功能是为了在多个进程之间对某个( ...

  2. 大数据基础(4) - Paxos协议

    文章目录 1. 整体介绍 2. Paxos 协议产生的背景 3. 副本状态机模型 4. 基本概念 5. Paxos 协议过程 5.1 准备阶段(占坑阶段) 5.2 接受阶段(提交阶段) 5.3 Pax ...

  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. 分布式一致性协议三部曲-深入理解一致性协议Paxos

    在理解分析分布式一致性协议前,我们必须先看下CAP理论 CAP CAP是指在一个分布式系统中,一致性(Consistency).可用性(Availability).分区容错性(Partition to ...

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

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

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

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

  8. paxos协议 对比_分布式一致性协议三部曲-深入理解一致性协议Paxos

    CAP二阶段提交协议(2PC)协议详情改进缺陷参与者 还都处于锁定事务资源的状态中,而无法继续完成事务操.尽管协调者挂掉后可以重新选举一个协调者,但是无法解决因为协调者宕机导致的参与者处于阻塞状态的问 ...

  9. 分布式一致性协议paxos

    Paxos协议/算法是分布式系统中比较重要的协议,它有多重要呢? <分布式系统的事务处理>: Google Chubby的作者Mike Burrows说过这个世界上只有一种一致性算法,那就 ...

最新文章

  1. ClickHouse 学习
  2. 四款 5G 版 iPhone 12 齐发,支持北斗系统,你准备好了吗?
  3. redis快照文件dump.rdb解析工具--redis-rdb-tools
  4. 关于如何提高SQL Server Compact的查询性能
  5. 牛客网【每日一题】3月27日 数学考试
  6. 26 MM配置-采购-采购申请-定义编码范围
  7. ECCV18 | 如何正确使用样本扩充改进目标检测性能(附Github地址)
  8. 图像识别算法超低代码开发方案
  9. “强化学习说白了,是建立分布到分布之间的映射”?数学角度谈谈个人观点
  10. eclipse 环境安装
  11. RFIC4463_F2C
  12. 计算机系统结构期末张晨曦,计算机系统结构(张晨曦)试题
  13. IOS 开发 Cache文件夹缓存的清理封装(包括WebKit缓存/SDImageCache缓存),都提供了相应的接口.
  14. c语言更正错误,c语言出错invalid operands to binary %
  15. 主成分分析(PCA)
  16. office随笔记录—— 批量删除空白行
  17. 2021执念斩长河年度总结
  18. TiCDC同步延迟问题处理
  19. 修改谷歌浏览器ua的简单方法
  20. aabResGuard使用

热门文章

  1. GVS案例分享|乘新时代姑苏舫号,体验匠心智能控制
  2. 创意图形切面动画城市生活视频PR模板
  3. 谷歌关键词是怎么做到首页的?谷歌搜索排名规则是什么?
  4. Anaconda下载安装及简单使用
  5. 基于模式的邻接矩阵计算举例
  6. DNS原理总结及其解析过程详解
  7. Spinner的功能和用法
  8. laravel 对接stripe支付
  9. 中国电子学会2022年09月份青少年软件编程Scratch图形化等级考试试卷四级真题(含答案)
  10. 《基于交替最小二乘法的Spark个性化影片推荐系统》CSCD