Paxos解决的是分布式环境中的一致性问题。可以理解为:N个服务器要确定一个值Value等于多少,只要有多于半数的服务器还是存活并可以有效通信,那么这个值就可以通过Paxos算法确定下来,并且该值是唯一的。典型的问题如:选主。
这个算法中有三个角色,提案者(proposer),接受者(acceptor)和学习者(learner)。每个服务器都可以兼职任何几种角色。在算法开始之前,每个proposer都知道整个环境中有多少个acceptor,即N的值是一开始就是确定了的。对proposer来讲,它需要提交两次请求,对acceptor来讲需要对proposer每次提出的请求做批准,即需要有二阶段提交。下面详细分析两个阶段以及两个阶段中的角色.
- 第一阶段中的proposer:
proposer发出该请求的前提条件:Value值还没有确定(其中Value值确定的条件是收到明确的消息“Value最终确定为某值”,收到该消息的过程中此proposer扮演的是learner角色)。
proposer需要选取一个值作为自己的序列号K,这个序列号K要满足两个条件:第一,每个不同的proposer提交的序列号要严格不同;第二,对于每个proposer在Value值确定之前,可能需要提交多次序列号K,要确保该值一次比一次大。
proposer需要将这个序列号S发送给至少大多数的服务器,即发给大于N/2个不同的acceptor(如果自己也是一个acceptor,那么是否可以发送给大于(N/2-1)个服务器呢?我的理解是:不可以,原因在于它不知道自己作为一个acceptor所存储的信息是什么,所以它可以选择向自己也发送这个请求,但是不能因此省略掉一次请求发送)。
- 第一阶段中的acceptor:
整个paxos算法过程中acceptor会保存两个信息:一个是自己回应过的最大序列号MaxN,如果还没有回应过则该值是空;另一个是在第二阶段批准过的决议对应的两个值:序号AcceptN和值AcceptV,这两个值在一开始也都为空。
当收到来自proposer提交的带有唯一序列号K的请求后,它要做出回应,回应有三种:第一种,MaxN为空(即该acceptor第一次接受到此类请求),则直接同意并且做出承诺–从此之后不再回应序列号小于K的请求,且回应序号AcceptN和值AcceptV都为空;第二种,MaxN不为空且K>MaxN(也就是并非第一次接受此类请求,但是序列号K比以前回应过的都大),此时它要把自己保存的序号AcceptN和值AcceptV(即使都为空)发送给proposer,并且做出承诺–从此之后不再回应序列号小于K的请求;第三种,K<MaxN,序列号K太小了,基于以上做出的承诺,不做回应。
从这个过程中可以看出,一旦acceptor在第二阶段接受了序号AcceptN和值AcceptV,那么它在第一阶段都会以他俩为基准告诉后来的proposer;acceptor还会在第一阶段不断做出承诺,它回应请求的前提是proposer提出的序列号要足够大。
- 第二阶段中的proposer:
proposer在第一阶段提交请求会收到回应,但是这个回应什么时候到达或者说会不会丢失消息是不确定的,所以在第二阶段开始之前proposer都会设置一个超时时间,一旦第一阶段中某个acceptor的回应晚于超时时间,那么proposer就认为没有收到。
超时时间一过,proposer会首先检查一件事情,收到的回应个数有没有超过N/2。如果没有超过,那么此轮结束,proposer回到第一阶段重新开始。如果超过N/2,那么proposer会发起第二阶段的请求,发送给大于N/2个不同的acceptor。这个请求的内容就是自己的提案Value等于V,这个V值如何确定呢?它先检查自己在第一阶段获得的回应,如果所有的回应中都显示序号AcceptN和值AcceptV都为空,那么proposer就可以自己任选一个值作为V(例如在选主过程中选自己);否则选取所有收到的AcceptN最大的那个所对应的AcceptV作为V提交。
这个过程中我们可以看到V的值取什么是很关键的,它会作为最终Value的备选值在下一步中进行批准,如果作为一个高效并且努力使Value唯一的算法,备选值应该越少越好,所以我们看到选择AcceptN最大所对应的值,这个在一定程度上保证了proposer所提出的v趋向于同一个值。
在提交完同样还要等待acceptor的回应,同样这个回应也有一个超时时间,一旦回应超过半数同意,此刻Value的值最终确定了下来,然后proposer会通知所有learner该值已经确定,算法结束。但是如果在发出通知之前该acceptor挂了,那么其他的proposer继续执行,不过最终确定的Value一定是原来的那个。
- 第二阶段中的acceptor
acceptor做法非常简单,就是比较proposer在第二阶段提交过来的序列号是否大于自己的MaxN,如果大于,就直接同意,并且把自己相应的MaxN、序号AcceptN和值AcceptV进行更新;否则不予回应。
整个算法看下来,有很多地方都是非常苛刻的,但是所有的步骤都在向同一个方向努力,无论期间有什么情况发生,都不会最终影响Value的确定性和唯一性。
http://coderxy.com/archives/136
相关推荐
Paxos算法详解.ppt
### Paxos算法详解与Zookeeper应用 #### 一、Paxos算法概述 Paxos算法是一种用于解决分布式系统中一致性问题的经典算法。该算法由Leslie Lamport于1990年提出,并逐渐成为分布式一致性算法领域的核心理论之一。在...
**Paxos算法详解** Paxos算法是Leslie Lamport提出的一种分布式一致性协议,它在分布式系统中解决了一个核心问题:如何在一个网络环境中保证多个节点间的数据一致性,即使在网络存在延迟、消息丢失或重复、节点故障...
**Paxos算法详解** Paxos算法,以其创始人Leslie Lamport的灵感来源——希腊小岛Paxos命名,是一种解决分布式系统中一致性问题的关键算法。在Paxos算法中,Lamport构建了一个虚拟的希腊城邦,通过模拟岛上的议会...
**Paxos算法详解** Paxos算法是分布式系统中的一种一致性协议,由Leslie Lamport提出,旨在解决在存在网络延迟、消息丢失或重复、节点故障等不确定因素的环境中,如何让分布式系统的多个节点就某个值达成一致。...
### Paxos算法详解 #### 一、Paxos算法概览与背景 Paxos算法是一种用于解决分布式系统中一致性问题的重要算法,由莱斯利·兰伯特(Leslie Lamport)在1990年提出。该算法旨在解决在分布式系统中,即使面对节点故障...
**Paxos算法详解** Paxos是一种分布式一致性算法,由Leslie Lamport提出,用于在存在网络延迟、消息丢失或重复以及节点故障的环境中保证系统的一致性。它的核心目标是在一组节点(称为副本)之间达成共识,即使在...
2. Paxos算法详解:详细解读Paxos的工作流程,包括提议、接受和决定三个阶段,以及各种可能的故障情况下的处理策略。 3. Zookeeper架构:描述Zookeeper的服务器集群结构,包括ZAB(Zookeeper Atomic Broadcast)协议...
### Paxos算法详解 #### 一、引言 Paxos算法是一种用于实现容错分布式系统的算法,在业界因其复杂性而著称。然而,正如Leslie Lamport在《Paxos Made Simple》这篇文章中所强调的,Paxos算法实际上非常简单明了。...
**Paxos算法详解** Paxos是一种分布式一致性算法,由Leslie Lamport提出,旨在解决在分布式系统中达成共识的问题。它确保了即使在网络不稳定、节点故障等复杂情况下,一组进程也能就某个值达成一致。这个算法的核心...
3. Paxos算法详解:深入理解Paxos的工作流程,包括提案过程、投票规则以及如何处理各种异常情况。 4. Zookeeper架构:分析Zookeeper的节点结构、数据模型以及它的核心功能。 5. 实践应用:通过案例学习如何在实际...
2. Paxos算法详解:详细解析Paxos的工作流程,包括提案、接受和决定三个阶段,以及如何处理各种异常情况,如节点故障和网络分区。 3. Zookeeper核心机制:介绍Zookeeper的数据模型,包括ZNode、ACL、Watch机制,...
Zookeeper在其实现中并没有直接使用Paxos算法,而是采用了一种简化版本的Paxos算法——Zab协议(Zookeeper Atomic Broadcast)。Zab协议结合了Paxos算法的优点,同时也考虑到了分布式系统中的网络延迟和故障恢复等...
Paxos算法是解决一致性问题的里程碑式工作,由Leslie Lamport提出。Paxos的核心思想是通过多轮协商达成共识,确保在分布式系统中,即使在网络不稳定或者节点故障的情况下,也能保证数据的一致性。它包括提案者...
3. Paxos详解:全面剖析Paxos算法的细节,包括提案过程、消息交互、状态机复制等。 4. Zookeeper架构:讲解Zookeeper的节点结构、数据模型、会话机制等核心概念。 5. Zookeeper操作:介绍Zookeeper的命令行工具,...
Paxos算法是分布式一致性领域的经典算法,通过多轮投票达成共识,而ZooKeeper简化了Paxos,更适合实际应用中的复杂性和性能需求。 书中还详细介绍了ZooKeeper的应用场景,如命名服务、配置管理、集群管理、分布式锁...
算法原理参考:Paxos的通俗解释 Paxos共识算法详解 算法例子参考:如何浅显易懂地解说 Paxos 的算法? Paxos算法的核心问题是:解决分布式系统的一致性的问题,所有问题均围绕着在分布式环境达成一致性而展开讨论的...
Paxos算法是实现容错分布式系统的一种方法,尽管在最初被许多人认为难以理解,但其实际上属于最简单、最直观的分布式算法之一。本文将通过深入浅出的方式介绍Paxos算法的核心——共识算法,并解释如何通过该算法构建...
Paxos算法由Leslie Lamport提出,是一种在分布式环境中达成共识的算法,即使在网络不稳定或者节点故障的情况下,也能保证数据的一致性。 **Paxos算法概述** Paxos算法的核心思想是通过提案(Proposals)和同意...
Paxos算法,由Leslie Lamport提出,是一种解决分布式一致性问题的著名算法,它保证了即使在网络不稳定或者节点故障的情况下,系统仍能达成一致的决策。本文将深入探讨Paxos算法的核心原理,并结合C#编程语言,阐述其...