`
clearity
  • 浏览: 36888 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Paxos协议

 
阅读更多

现如今网站中,涉及到一定规模的都会引入分布式的部署和实现。说到分布式系统,那就要提到它所使用的信息交换方式,不外乎两种,一种为通过共享内存共享数据,另外一种是通过传递消息来完成。

 

但是使用消息传递的方式会引入很多问题,比如网络问题、进程意外被kill掉、宕机以及进程被阻塞,在这些情况下,就会造成消息重复、消息不可达或者超时处理等现象。在这里引入Paxos协议来解决分布式系统中的一致性问题。

 

但是使用Paxos协议的前提是通信环境要可靠,也就是说信息是准确而且保证没有被篡改过,也就是不存在拜占庭将军提及的问题(关于拜占庭将军问题(Byzantine Generals Problem),可以参考维基百科拜占庭将军)。

 

Paxos算法是通过一个故事的形式来描述的。首先虚拟了一个名为Paxos的希腊城邦,以议会中讨论议案的步骤流程作为算法的呈现。

 

其中前提是议员的角色分成三类:Proposers(提议案) Aceeptors(接受议案进行判断) Learners(议案观察员)。除了角色之外,还有两个定义如下:

Proposal:议案

Value:决议,议案的内容。由{编号,协议}的形式组成。

 

现在定义一些前提:

1.对协议能做出的操作必须是:首先被提出议案的议员提出后,才能被批准。

2.算法的执行过程中,一次只能批准一个协议。

3.Learners议案观察员角色只能获取被批准以后的Value(决议)。

 

同时,每个议员都会使用结实的本子和不可能被篡改的墨水来书写议案,但是议员会把表决信息写在本子的背面,正面书写的议案永远都不能改变,但是背面的可以被擦掉。同时本子背面只能记下如下内容:

LastTried[p]:表示议员p试图发起的最后一个议案的编号,如果没有提出过议案,则记成负的无穷大。

PreviousVote[p]:表示在议员p的的所有表决中,编号最大的表决对应的投票,与上面一样,如果没有投过票则记为负无穷大。

NextBallot[p]:表示在议员p发出的所有LastVote(b,v)消息中,表决编号b的最大值。

 

下面是协议表决的基本完整流程:

 

1.议员p选择一个比LastTried[p]大的表决编号b,然后设置LastTried[p]的值为b,最后将NextBallot(b)消息发送给某些议员;

2.从议员p收到一个b大于NextBallot[q]的NextBallot(b)消息后,议员q将NextBallot[q]设置为b,然后发送一个LastVote(b,v)消息给p,其中v等于PreviousVote[q](b<=NextBallot[q]的NextBallot(b)消息被忽略);

3.在某个多数集合Q中的每个成员都收到一个LastVote(b,v)消息后,议员p发起一个编号为b、法定人数集合为Q、议案为d的新表决。然后给Q中的每一个成员发送一个BeginBallot(b,d)的消息;

4.当收到一个b=NextBallot[q]的BeginBallot(b,d)的消息后,议员q在编号为b 的表决中投上自己的一票,然后设置PreviousVote[p]为这一票,最后向p发送Voted(b,q)消息;

5.议员p在收到Q集合中每一个q的Voted(b,q)消息后,将d(此轮需要表决的法令)记录到他的本子上,然后发送一条Success(d)消息给Q中每一个q成员;

6.最后当议员收到Success(d)消息后,会将决议d记录在他的本子上。

 

其中重要的原则其实很简单,就是少数服从多数罢了。

 

在这其中,如果同一时间有多余一人的议员提出议案,则会出现碰撞,这种情况下双方都要增加议案的编号并且再次提交。但是再次提交可能仍会有此问题存在,这种情况下就会出现活锁了。

 

这种情况也不难解决,就是在整个集群之中增加一个领导也就是大家说的议长或者某一政党的党首的角色,所有的议案都通过他们来提出就会避免掉上面所述的冲突了。但是这样也有问题,就是如果党首或者议长因为去接孩子或者生病重感冒来不了的情况下怎么办啊,其实也难不倒,可以选举一个备份的人选出来代替他们来行使职责,比如副议长以及第二党首,哈哈,否则除非议会中只要有众人在,就不会再出现问题。

 

   上面只是一些简单介绍了Paxos算法,如果想更加深入的窥视算法的细节,可以阅读下Paxos相关的论文,或者维基百科上的相关资料。

0
0
分享到:
评论

相关推荐

    分布式服务协议Paxos原理、应用场景

    Paxos协议主要包含三个角色:提议者(Proposer)、接受者(Acceptor)和学习者(Learner)。提议者提出提案,接受者接收并投票,学习者最终学习到被大多数接受者接受的提案。 1. 提案流程: - 提议者向所有接受者...

    cpp-PhxPaxos微信一套基于Paxos协议的多机状态拷贝类库

    PhxPaxos的核心功能是状态机复制,它允许系统中的多个节点维护一份相同的副本状态,并通过Paxos协议确保这些副本在任何时间点都保持一致。当客户端发起一个更新请求时,PhxPaxos会协调各个节点,确保只有一个提议被...

    基于Paxos协议以及以及分布式架构,企业分布式关系型数据库,具有高可用、高性能、水平扩展、兼容SQL标准等特点

    OceanBase是一款企业分布式关系型数据库,具有高可用、高性能、水平扩展、兼容SQL标准等特点。OceanBase 基于Paxos协议以及分布式架构。OceanBase 数据库运行在常见的服务器集群上,不依赖特殊的硬件架构。

    分布式关系型数据库:它基于Paxos协议和分布式架构,实现了高可用性和线性扩展,可以运行在常见的服务器集群上

    它基于Paxos协议和分布式架构,实现了高可用性和线性扩展。OceanBase数据库可以运行在常见的服务器集群上,不依赖特殊的硬件架构。该项目旨在提供可靠的关系型数据库解决方案,适用于企业级应用。

    cpp-PhxQueue是微信开源的一款基于Paxos协议实现的高可用高吞吐和高可靠的分布式队列

    PhxQueue是微信开源的一款基于Paxos协议实现的高可用、高吞吐和高可靠的分布式队列,保证At-Least-Once Delivery。在微信内部广泛支持微信支付、公众平台等多个重要业务。

    《Paxos Made Simple》分布式一致性协议Paxos论文翻译

    Paxos协议的主要目标是在一组可能出错的节点间达成共识,即使在网络延迟、消息丢失或重复、节点故障等不确定因素下也能保持一致性。在分布式系统中,一致性意味着所有节点对某个数据项的值有相同的看法。Paxos通常被...

    《The Part-Time Parliament》分布式一致性协议Paxos论文翻译

    同时,作者提到自己正在使用 RocketMQ,并希望基于Paxos协议来解决该消息队列软件中主从节点未能实现自动选举和数据同步的问题。 - **挑战**: 作者认为理解Paxos协议是一项艰巨的任务,需要深入研究和透彻的理解。 ...

    微信PaxosStore:深入浅出Paxos算法协议-InfoQ1

    在《Paxos Made Simple》一文中,Leslie Lamport试图用更易理解的方式解释Paxos协议,但他逐步的推导和证明对于初学者来说可能仍然有些复杂。因此,本文基于《Paxos Made Simple》,重新描述了协议流程,并提供了两...

    paxi:Paxos 协议框架

    帕希是实现WPaxos和其它的Paxos协议变体的框架。 Paxi 提供了任何 Paxos 实现或复制协议所需的大部分元素,包括网络通信、键值存储的状态机、客户端 API 和多种类型的仲裁系统。 警告:Paxi 项目仍在大量开发中,...

    chubby,paxos,zookpeer 协议,原理

    Paxos协议是分布式计算领域中解决一致性问题的经典算法之一,由Leslie Lamport提出。该协议解决了在存在失效可能性的分布式系统中如何达成一致的问题。 **核心概念**: - **提议者(Proposer)**: 发起提议的实体。 -...

    从Paxos到Zookeeper

    《Paxos到Zookeeper:分布式一致性原理与实践》从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议。同时,本书深入介绍了分布式...

    《从Paxos到zookeeper分布式一致性原理与实践》源码,直接可用

    书中涵盖了Paxos协议和Zookeeper系统的核心概念、设计原则以及实际应用。这里的源码提供了一种直接学习和实践这些理论的途径。 Paxos协议是分布式计算领域中的一个里程碑,它为解决分布式系统中的一致性问题提供了...

    从Paxos到Zookeeper分布式一致性原理与实践(高清完整版 带标签)

    《从Paxos到Zookeeper分布式一致性原理与实践》是一本深入探讨分布式系统一致性问题的著作,涵盖了Paxos协议和Zookeeper两个重要的主题。在分布式计算领域,一致性是保证系统可靠性和正确性的核心概念,它涉及到多个...

    从PAXOS到ZOOKEEPER分布式一致性原理与实践 源码

    这本书籍主要围绕PAXOS协议和ZOOKEEPER分布式协调服务展开,旨在帮助读者掌握分布式一致性这一核心概念。 PAXOS协议是分布式计算领域中的一个经典算法,由Leslie Lamport提出。它解决了在不可靠网络环境中,如何在...

    从PAXOS到ZOOKEEPER分布式一致性原理与实践完整版

    这本书主要围绕Paxos协议和ZooKeeper两大主题展开,下面将对这两个知识点进行详细解析。 首先,Paxos协议是由Leslie Lamport提出的分布式一致性算法,被誉为分布式一致性领域的基石。Paxos的核心思想是通过多数派...

    从Paxos到Zookeeper分布式一致性原理与实践.pdf

    《从Paxos到Zookeeper分布式一致性原理与实践》是一本深入探讨分布式一致性问题的书籍,其中涵盖了Paxos协议和Zookeeper系统的核心概念和技术。分布式一致性是构建大规模、高可用性、高可靠性的分布式系统的关键,...

    paxos的直观解释.zip

    《Paxos协议的直观理解》 Paxos协议,由Leslie Lamport提出,是分布式系统中一种解决一致性问题的算法。它以其强大的容错能力和简洁的设计在分布式计算领域备受推崇。本篇将从直观的角度,深入浅出地解析Paxos的...

    分布式协议——paxos算法

    一、paxos算法的背景 Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一,其解决的问题就是在分布式系统中如何就某个值...

    从Paxos到Zookeeper分布式一致性原理与实践

    《从Paxos到Zookeeper分布式一致性原理与实践》是一本深入探讨分布式一致性问题的书籍,其中涵盖了Paxos协议和Zookeeper系统的核心概念和技术。Paxos是分布式计算领域中一个基础且重要的共识算法,而Zookeeper是...

Global site tag (gtag.js) - Google Analytics