简介
发展
Paxos算法是Leslie Lamport宗师提出的一种基于消息传递的分布式一致性算法,使其获得2013年图灵奖。
Paxos在1990年提出,被广泛应用于分布式计算中,Google的Chubby,Apache的Zookeeper都是基于它的理论来实现的
目的
Paxos算法解决的问题是分布式一致性问题
即一个分布式系统中的各个进程如何就某个值(决议)达成一致
让参与分布式处理的每个参与者逐步达成一致意见
注意
传统节点通信存在着两种通信模型:
共享内存(Shared memory)
消息传递(Messagespassing)
Paxos是一个基于消息传递的一致性算法
算法描述
议员及规则描述
Paxos描述了这样一个场景,有一个叫做Paxos的小岛(Island)上面住了一批居民,岛上面所有的事情 由一些特殊的人决定,他们叫做议员(Senator)。议员的总数(Senator Count)是确定的,不能更 改。岛上每次环境事务的变更都需要通过一个提议(Proposal),每个提议都有一个编号(PID),这个编 号是一直增长的,不能倒退。每个提议都需要超过半数((Senator Count)/2 +1)的议员同意才能生 效。每个议员只会同意大于当前编号的提议,包括已生效的和未生效的。如果议员收到小于等于当前编号 的提议,他会拒绝,并告知对方:你的提议已经有人提过了。这里的当前编号是每个议员在自己记事本上 面记录的编号,他不断更新这个编号。整个议会不能保证所有议员记事本上的编号总是相同的。现在议会 有一个目标:保证所有的议员对于提议都能达成一致的看法。
提出并通过提议
现在议会开始运作,所有议员一开始记事本上面记录的编号都是0。有一个议员发了一个提议:将电费设 定为1元/度。他首先看了一下记事本,嗯,当前提议编号是0,那么我的这个提议的编号就是1,于是他 给所有议员发消息:1号提议,设定电费1元/度。其他议员收到消息以后查了一下记事本,哦,当前提议 编号是0,这个提议可接受,于是他记录下这个提议并回复:我接受你的1号提议,同时他在记事本上记 录:当前提议编号为1。发起提议的议员收到了超过半数的回复,立即给所有人发通知:1号提议生效!收 到的议员会修改他的记事本,将1好提议由记录改成正式的法令,当有人问他电费为多少时,他会查看法 令并告诉对方:1元/度。
提议冲突解决流程
现在看冲突的解决:假设总共有三个议员S1-S3,S1和S2同时发起了一个提议:1号提议,设定电费。S1 想设为1元/度, S2想设为2元/度。结果S3先收到了S1的提议,于是他做了和前面同样的操作。紧接着他 又收到了S2的提议,结果他一查记事本,咦,这个提议的编号小于等于我的当前编号1,于是他拒绝了这 个提议:对不起,这个提议先前提过了。于是S2的提议被拒绝,S1正式发布了提议: 1号提议生效。S2 向S1或者S3打听并更新了1号法令的内容,然后他可以选择继续发起2号提议。
Paxos推断
1、小岛(Island)服务器集群
2、议员(Senator)单台服务器
3、议员的总数(Senator Count)是确定的
4、提议(Proposal)每一次对集群中的数据进行修改
5、每个提议都有一个编号(PID),这个编号是一直增长的
6、每个提议都需要超过半数((Senator Count)/ 2+1 )的议员统一才能生效
7、每个议员只会同意大于当前编号的提议
8、每个议员在自己记事本上记录的编号,他不断更新这个编号
9、整个议会不能保证所有议员记事本上的编号总是相同的
10、议会有一个目标:保证所有的议员对于提议都能达成一致的看法。
11、前提投票(>1/2),后期广播(all)
12、Paxos算法
数据的全量备份
弱一致性 ——》 最终一致性