分布式一致性算法:Paxos (学习总结)

1. 概述
Google Chubby 的作者
Mike Burrows:
“There is only one consensus protocol, and that's Paxos”-all other approaches are just broken versions of Paxos
意即:世界上只有一种一致性算法,那就是Paxos(帕克索斯),所有其它一致性算法都是Paxos算法的不完整版!
Paxos是为了解决分布式环境下一致性的问题而提出的算法,因chubby而声名大噪。
作者Leslie Lamport由于首次发表关于paxos的论文“The Part-Time Parliament”晦涩难懂,于是2001年发表“Paxos Made Simple”
并在introduction中说道:
“The Paxos algorithm for implementing a fault-tolerant distributed system has been regarded as difficult to understand, perhaps because the original presentation was Greek to many readers [5]. In fact, it is among the simplest and most obvious of distributed algorithms.”

2. 问题

Assume a collection of processes that can propose values. A consensus algorithm ensures that a single one among the proposed values is chosen. If no value is proposed, then no value should be chosen. If a value has been chosen, then processes should be able to learn the chosen value. The safety requirements for consensus are:
  a. Only a value that has been proposed may be chosen,
  b. Only a single value is chosen
  c. A process never learns that a value has been chosen unless it actually has been.
例如,在分布式环境下,多台客户端都想要获取一把锁,如何解决锁的归属问题。
可以把问题抽象为在分布式环境下,如何给不确定的元素赋值的问题。

3. 解决方案
1)Master/slaver

优点:实现简单。
缺点:单点故障。

2)Multi-master
Multi-master指一个系统存在多个master
优点:解决了单点故障。
缺点:不易实现一致性
3)2PC
优点:实现简单。
缺点:所有参与者需要阻塞(block),throughput低;无容错机制,一节点失败则整个事务失败。

paxos算法和以上三种方式对比:

分布式一致性算法:Paxos (学习总结)_第1张图片

4. Paxos算法描述
概念:

instance(实例):一次Paxos算法执行。
proposal(议案):未经批准的决议称为议案
value(决议):被最终批准通过的议案中的value称为决议
角色:

Proposer(提案者):提出议案
Acceptor(批准者):审批议案
Leaner(学习者):学习决议
问题
定义好概念和角色后,可以更精确的定义问题:
    1)决议(value)只有在被 proposers 提出后才能批准;
    2)在一次 Paxos 算法的执行实例中,只批准一个 Value;
    3)learners 只能获得被批准的 Value。
约束:

1)一个批准者必须接受他收到的第一个议案。
2)
提出一个编号为n具有值v的议案的前提是:存在一个多数派,要么他们中没有人批准过编号小于n的任何提案,要么他们批准的提案中编号小于n的最大的提案值是v
通过一个决议分为两个阶段:

prepare 阶段:
        1)提案者选择一个议案编号 n 并将 prepare 请求发送给批准者中的一个多数派;
        2)批准者收到 prepare 消息后,如果提案的编号大于它已经回复的所有 prepare 消息,则批准者将自己上次的批准回复给提案者,并承诺不再批准小于 n 的提案;
批准阶段:
        1)当一个提案者收到了多数批准者对 prepare 的回复后,就进入批准阶段。它要向回复 prepare 请求的批准者发送批准的请求,包括编号 n 和根据约束2 决定的 value。
        2)在不违背自己向其他提案者的承诺的前提下,批准者收到批准请求后即批准这个请求
算法保证在任何阶段被打断,都能保证最终的正确性。

参考:
paper:Paxos Made Simple
http://zh.wikipedia.org/zh-cn/Paxos%E7%AE%97%E6%B3%95
http://www.cnblogs.com/ychellboy/archive/2009/12/28/1634443.html

你可能感兴趣的:(分布式一致性算法:Paxos (学习总结))