一致性协议paxos

一致性的问题定义

多个副本如何如何保存一致的数据换句话说就是多个进程就一个值达成一致,达成一致之后,这个值是可以被访问到的。

常用的副本数据同步方案,主从复制(redis,mysql复制方案),主要缺点是依赖master,slave复制速度不同,master宕机的时候,各个副本的数据是不一致的。

paxos解决问题的方案

paxos使用大多数都同意的方式就一个值达成一致,算法描述中称为(提案),在该一致性算法中有三种角色,proposer、acceptor、learner,proposer 提出提案(paxos算法中有多个,实际工程实现只有一个),acceptor决定是否批准提案(多个),leaner获得已经确定了的提案(就是被大多数accepor批准的提案)

只要有半数机器可用就能提供一致性的服务,理论上是若要容忍n台机器宕机,则至少需要2*n+1台机器的集群。

paxos协议的论证

一致性算法的安全性要求:

1、只有被提出的提案才能被选定

2、只有一个提案可以被选定

3、如果某个进程能够获取提案,那么这个提案肯定是被选定的那个。

最重要的是只有一个提案被选中,最简单的方案就是只有一个aceptor,acceptor只批准收到的第一个提案。但是显然这样是不行的,从这个角度可以把1主多从的架构看作paxos的子集,即accepor数量=1的情况。要保证可用性,必须要保证多个acceptro工作的情况。

推导过程

最简单的情况,只有一个提案如何满足?

p1一个acceptor必须批准它收到的第一个提案。

仅仅满足p1是不能适用于多个提案的提案的情况的。

提案可以由多个proposer提出也可以由一个,如果一个提案被多个proposer同时提出,或者由一个proposer连续提出,每个acceptor批准了收到的第一个值,但是恰好每个acceptor收到的值都不同。这样就不能选定一个值了,不满足安全性的第二点要去。

一个提案被半数以上acceptor批准才被选定。这意味着每个aceptor必须批准多个值,而不是仅仅批准收到的第一个值,要不然还是无法解决上面描述的无法形成多数派的情况

为区分提案,每一个提案用一个全局唯一递增的id来标志,这样每次提案可以表示为[id,value]

现在的问题是,每个aceptor可以批准多个值,而算法的要求是只有一个值被选定。有两种方案可以解决这个问题:

1、一旦一个值被选定了,就拒绝后续编号更高的提案

2、一旦一个值被选定了,后续提出的提案的值=被选定的值

第一种方案accepor需要跟其他acceptor通信确定已被批准的值proposer将提案发往m个acceptor,总共有n个acceptor,提出一次提案产生的通信量m*(n-1)

第二种方案的通信量为(n/2,n]

显然选取第二种方案是合理的,而paxos也是采取的第二种方案 ,所以对p1做如下强化

p2:如果编号为M0、Value为V0的提案(即[M0,V0])被选定了,那么所有比编号M0高的,且被选定的提案,其value值必须也是V0。

因为一个提案被选中必须被多数acceptor批准,可以通过如下条件满足p2

p2a:如果[m0,v0]被选定了,那么所有比m0编号更高的提案,被acceptor批准的提案必须也是v0

假设如下情况:

假如某个acceptor假设为acceptor1没有收到任何消息(消息丢失),在acceptor1不参与的情况下,其他acceptor批准了[m0,v0],而此时某个proposer向acceptor1发送了[m1,v1],根据p1,acceptor1必须批准[m1,v1]但是这跟p2a矛盾

那么如何保证p2a呢?

p2b:如果一个提案[m0,v0]被选定了,那么之后proposer产生的任何编号更高的提案,其value值必须为v0

p2b包含了p2a,进而包含了p2,接下来只需要论证p2b成立,也就是说,假设[M0,V0]已经被选定了,证明任何编号Mn>M0的提案其Value值也为V0

数学归纳法证明

假设:编号在M0-Mn-1之间的提案Value值为V0

证明Mn也为V0

先描述下如何保证p2b,即提出的提案一定是被批准的提案,在这里默认了一条,要想获取批准的请求proposer必须向多数集合发起请求,询问已经被批准的提案.

M0被选中意味着存在一个多数集合C,批准了该提案,M0-Mn-1的Value值为V0以为着存在n-1个多数集C,每个多数集的每个acceptor都批准了编号为M0-Mn-1的Value值为V0

因为任何一个多数集S都至少包含一个C中的元素,所以只要保证如下提出提案[Mn,Vn]的条件就能保证Vn=V0

p2C:对于任意[Mn,Vn],被提出至少存在一个多数集S,S满足以下两点任意一个

1集合S不存在已经批准过编号<Mn的提案(第一次提出提案的情况)

2S中Acceptor批准的编号小于Mn的提案中,编号最大的提案(Mn-1)的值也为Vn.

这其实描述了提案被提出的条件,要么集合中没有被批准的提案,要么只能选取被批准的最大编号提案的值

保证p2c就能保证p2b

详细论证:

归纳法第一步,n=1即提案编号为M0+1的时候

因为M0已被选中,则肯定存在多数集C,C批准了V0,M0+1被提出肯定存在一个多数集S,而S与C必有一个公共元素,该元素包含最大编号的提案[M0,V0],所以M0+1的值为V0

第二步

假设在M0-Mn-1内所有的提案的值都为V0,证明Mn也为V0.Mn被提出肯定存在一个多数集S

S中编号最大的提案也只能是M0-Mn-1之间的,而它们的提案的值都为V0,所以Mn的值也为V0

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容

  • 此文知识来自于:《从Paxos到Zookeeper分布式一致性原理与实践》第二章分布式入门基础知识,由于博主对其理...
    李文文丶阅读 1,907评论 0 0
  • Paxos算法在分布式领域具有非常重要的地位。但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更...
    Jeffbond阅读 17,254评论 25 87
  • Paxos是什么 Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有...
    jiangmo阅读 1,535评论 0 6
  • 问题: 基于消息传递通信模型的分布式系统,不可避免的会发生以下错误:进程可能会慢、被杀死或者重启,消息可能会延迟、...
    LaxChan阅读 1,954评论 6 1
  • 原文:Paxos Made Simple作者:Leslie Lamport时间:01 Nov 2001 1 Int...
    随安居士阅读 1,565评论 1 2