君子博学而日参省乎己 则知明而行无过矣

博客园 首页 新随笔 联系 订阅 管理

1,什么是Paxos算法?

Paxos算法是分布式计算领域中一个非常重要的算法,主要解决分布式系统如何就某个值(决议)达成一致的问题。一个典型的场景是分布式数据库的一致问题:如果分布式数据库的各个节点初始状态一致,又能执行相同的操作序列,那么最后能达到一个一致的状态。但是如何保证在每个节点上执行相同的命令序列呢?这就需要在每条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。Paxos算法便是这样一种一致性算法,它由大牛Lamport于1990年提出,在Lamport的论文中,他虚拟了一个叫“Paxos”的城邦并以讲故事的方式阐述算法,因此叫做Paxos算法。

Paxos是一个较为复杂的算法,在网上也有很多解析,具体可以看维基百科上的论述(http://zh.wikipedia.org/zh-cn/Paxos%E7%AE%97%E6%B3%95)。

2,Paxos算法的具体内容是什么?

根据前面讲到的一致性算法需要解决的问题,Paxos需要保证:一次选举(分布式节点对决议进行投票并批准的过程)中只批准一个决议(value),只有被提出(proposed)的决议才能被批准,只有被批准的决议才能被学习(即可以执行或保存这个决定的内容)。为便于描述选举过程,Paxos为参与者设定了3个角色:proposer(提出决议),acceptor(批准决议)和learner(学习决议),从而将一致性算法的要求阐述如下:

  1. 决议(value)只有在被proposers提出后才能批准;
  2. 在一次Paxos算法的执行过程中,只会批准一个value;
  3. learners只能获取到被批准的value;

算法的具体过程如下,它将一次选举过程分为了两个阶段:Prepare和Accept

Prepare阶段

  1. proposer选择一个提案(表示未被批准的决议)编号n,将prepare请求发给acceptor中的一个多数派;
  2. 如果acceptor发现n是它已回复的请求中编号最大的,它会将上次接受的提案回复给proposer,并且承诺以后不会回复编号小于n的提案

Accept阶段

  1. 如果proposer接收到了多数派的回应,它发送一个accept消息到acceptor的多数派,包括提案编号n和value
  2. 在不违背自己向其它proposer的承诺前提下,acceptor收到accept请求后即接受这个请求;

 

3,Paxos怎样应用到了Zookeeper?

Paxos算法的应用非常的广泛,分布式协调系统zookeeper也是基于paxos来实现的。

  1. leader选举。zookeeper在leader选举时采用了paxos算法(主要是fast paxos,Lamport于2005年提出的快速paxos);
  2. 一致性复制。zookeeper使用了一种称为zab(zookeeper atomic broadcast)的协议作为一致性复制的核心,作者认为是一种新的算法,但实际上也可以认为是Paxos的一种简化和优化

http://www.zhouyoudao.com/paxosandzookeeper/

posted on 2014-11-18 12:54  刺猬的温驯  阅读(397)  评论(0编辑  收藏  举报