Paxos 算法-浅显易懂的方式解析

关注公众号 MageByte,设置星标获取最新干货。公众号后台回复 “加群” 进入技术交流群获更多技术成长。
——本文由 MageByte 团队的「青叶」编写

Paxos 算法是一种提高分布式系统系统容错性的一致性算法 。对于一个一致性算法 有以下特点:

  • 在所有被提出的提案中,只有一个会被选定。
  • 如果没有提案被选出,就不会有选定的提案。
  • 当一个提案被选定后,所有的节点进程都可以获取到被选定的提案信息。
  • 一旦 “接受者” 接受了提议,就不能再接受其他提议内容。

算法过程

在该一致性算法中有三种参与角色。分别为 “提议者(Proposer 向 “接受者” 提出提案)”、“接受者(Acceptor 收到 “提议者” 的提议后,向提议者表达自己的意见)”、“学习者(Learner 天被确定后,学习者获取被确定的提议)”

  • 第一阶段:因为存在多个 “提议者” ,如果都提出提案,那么 “接受者” 接受谁的不接受谁的?太混乱了。所以要先明确具有领袖权的提议者才有权提出提案。所以规定一些有领导权力的 “提案者” 可以提出提案。 “接受者” 们就主要去处理这个 “提案者” 的提案了。(这样,才可以在提案提出时就尽量让意见统一,谋求尽早形成多数派)。
  • 第二阶段:由以上阶段选出来的主 “提议者” 提出提案,“接受者” 反馈意见。如果多数 “接受者” 接受了一个提案(达到半数以上),那么提案就通过了。

提案者选定与意见处理

  1. 怎么明确意见领袖呢?通过编号。每个“提议者”在第一阶段先报个号,谁的号大,谁就是意见领袖。如果不好理解,可以想象为贿选。每个提议者先拿着钞票贿赂一圈“接受者”,谁给的钱多,第二阶段“接受者”就听谁的。(注:这里和下文提到的“意见领袖”,并不是一个新的角色,而是代表在那一轮贿赂成功的“提议者”。所以,请把意见领袖理解为贿赂中胜出的“提议者”即可)。
  2. 有个跟选举常识不一样的地方,就是每个 “提案者” 不会执着让自己的提案通过,而是每个 “提案者” 会执着于让提议尽快达成一致意见。所以为了这个目标,如果 “提案者” 在贿赂的时候发现 “接受者” 已经接受了前面意见领袖的提议,即便 “提议者” 贿赂成功,也会默默地把自己提案修改成前面意见领袖的提议(这样就会更快的达到多数派)。
  3. 钱的多少很重要,若果钱少了,无论第一还是第二阶段 “接受者” 都不会接受,直接拒绝。
  4. 上面 2 中提到如果 “提案者” 在贿赂的时候发现前面已经有意见领袖的提议,那就将自己的提议默默地改成意见领袖的提议。但是这里有一种情况,如果你是 “提议者” ,在贿赂的时候, “接受者n” 回复你说 “他收到的意见领袖的提案是 方案 n ”,而 “接受者 n + 1” 回复你说 “他收到的意见领袖提议的方案是 n + 1”。这时候我们该怎么办。原则很简单,还是: “钱的多少重要!”,你就判断下 “是接受者 n ” 见过的意见领袖有钱还是 “接受者 n + 1” 见过的领袖提议者有钱。你就把自己的提议改成意见领袖钱多的那个 提议。
  5. 在整个选举过程中,每个提案者谁先来后到,“接受者” 什么时候收到 “提案者” 的提议是完全不可控的。所以有可能一个意见领袖已经产生了,但是由于这个意见领袖的第二阶段才刚刚开始,很多 “接受者” 还没有收到这个意见领袖的提案。这时候突然来了一个新的土豪 “提案者” ,那么这个土豪也是有可能让自己提案胜出。会出现这样的博弈现象:
  • 上一个意见领袖要赶在土豪 “提案者” 贿赂到 “接受者” 前接受自己的提案,否则会因为自己之前贿赂的钱少于土豪被拒绝。
  • 土豪 “提案者” 要赶在上一个意见领袖者将提议传达给 “接受者” 前贿赂到 “接受者”,否则土豪 “提议者” 基石贿赂成功,也要默默地将自己的提议改成前任领袖的提议内容。不管怎么样,最终先得到多数 “接受者” 的认可,那么这个提议就胜出了。

总结

  1. Paxos 算法包括两个阶段:第一阶段主要就是贿赂,还没有提出提议;第二个阶段就是根据第一阶段的结果,明确接受谁的提议,并且明确提议的内容(这个提议可能是贿赂选取胜出的 “提案者” 自己的提议,也可能是前任意见领袖的提议)。
  2. 编号(贿赂金额大小)很重要,无论哪个阶段,编号小的都会被拒绝。
  3. 在第一阶段中,一旦 “接受者” 已经接受了前面的意见领袖的提议,后面再来找这个 “接受者” 的 “提议者” ,即便是贿赂胜出,也要老实的把自己的提案内容改成前面领袖提议的内容,这点尤为重要。接着这个 “提案者” 也会在第二阶段提出改变后的提议(为了一件快速达成一致)。如果 “接受者” 之前没有接收过任何提议,那贿赂成功的 “提议者” 就可以提出自己的提议了。

简单示例说明

有两个 “提案者” 和三个 “接受者”

  1. 首先 “提案者1” 贿赂了 3个 “接受者”。也就是第一阶段
    image.png
  2. 三个 “接受者” 记下贿赂的金额大小,目前只有一个 “提案者” 出价贿赂,因此 $1就是最高的,所以 3 个 “接受者” 返回 “提案者1” 贿赂成功。另外,因为没有任何先前的意见领袖提出提议,因此 “接受者” 们告诉 “提案者1” 之前没有接受过提议,自然也就没有上一个意见领袖贿赂金额了。

  3. “提案者1” 准备执行第二阶段: 向 “接受者1” 提出了自己的提议:内容为 1 号提议,并告诉自己之前贿赂的金额$1。

  4. “接受者1” 检查了下,目前贿赂的金额就是 $1,于是就接受了 这个提议,并且把 1号提议的内容记录在案。

  5. 在 “提议者1” 向 “接受者2”、“接受者3” 发起提议之前,土豪 “提议者2” 出现了,他开始使用 $2贿赂 “接受者1“ 和 “接受者2”。
    image.png
  6. “接受者1” 和 “接受者2” 就被土豪 “提议者2” 收买了,将贿赂金额改成了 $2,但是,不同的是 “接受者1” 告诉响应 “提案者2” ,之前已经接受过 “提案者1” 提出的1号提议了。而 “接受者2” 告诉 “提案者2” 之前没有收到过其他领袖的提议。

  7. 这时候 “提案者1” 回神了,他向 “接受者2” 和 “接受者3” 发起 1号内容提议,并且携带之前贿赂过金额 $1的信息。

  8. “接受者2” 和 “接受者3” 开始回复:“接受者2” 检查了下自己记录的金额2,然后便是已经有人出价2了,而你之前出的1,不再接受你的提议。但是 “接受者3” 检查了自己记录的贿赂金额就是1,于是就接受了这个提议内容,并且把1号提议记录在案。

  9. 到这里,“提案者1” 已经获得了两个接受者的赞同,达到了 半数通过的场景。于是 “提案者1” 确定了一号提议内容最终通过。

  10. 我们再回到 “提案者2” ,之前贿赂了 “接受者1” 和 “接受者2”,并且被 “接受者1” 告知: “之前已经接受过一号提议了,并且最高金额是¥1。这个时候 “提案者2” 拿到信息后判断一下,目前就是1号提议内容,就默默地把自己的提议内容改成了 1号。然后向 “接受者1” 和 “接受者2” 发起提议,提议内容已经变成 1号。并且携带信息之前已经贿赂过金额 $2。

  11. “接受者1” 和 “接受者2” 收到 “提案者2” 的提议后,继续按照之前流程 对比下贿赂金额,记录的是之前贿赂的金额 $2,所以就接受了提议,其实就是 “提案者1” 提出的内容。就这样最终1号提议内容通过。

欢迎加群与我们分享,我们第一时间反馈。关注公众号,后台回复 加群即可获取个人微信。

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

推荐阅读更多精彩内容

  • 来源:维基百科(https://zh.wikipedia.org/wiki/Paxos%E7%AE%97%E6%B...
    苍山雪麓阅读 392评论 0 0
  • 在的我是有多幸福,多满足啊!从9岁开始就离开父母的温存,离开了我应有的童年,应有的快乐,应有的玩...
    d6f63a5f5947阅读 448评论 0 0
  • 只是想学一首歌而已 干嘛要那么麻烦的 把所有韩语发音都学会嘛 就和我 只是想说一句fuck you而已 没必要过英...
    四一三阅读 307评论 1 0
  • 每一次经历苦难,我们都在成为更好的自己。 感触很深,这是思思大王说的,他的那本《寂寞是毒,也是解药》,我读了两遍,...
    爱生活的折耳猫阅读 450评论 0 0
  • 上午:设计部会议,与同事讨论起关于全案设计落地的问题,在过程中设计师需要解决的问题。 根据上一个案例的教训,在全案...
    设计师周文斌阅读 230评论 0 0