生活中的Paxos,原来你我都在使用——对Paxos生活化的解读(一)

简介: 引言 前段时间,老婆给家里一岁半的小宝买了一套 克里斯.费利 博士的《宝宝的物理学》丛书,包括 《宝宝的量子物理学》,《宝宝的牛顿力学》,《宝宝的光学》等。小宝爱不释手,天天缠着我们读给他听,在整个过程中我也有很大的收获。在同一时间,由于工作需要,我也一直在啃计算机分布式系统中号称最难理解

7ecf67809735c3b9c8ea14a07ff05c6d89c133df

引言

前段时间,老婆给家里一岁半的小宝买了一套 克里斯.费利 博士的《宝宝的物理学》丛书,包括 《宝宝的量子物理学》,《宝宝的牛顿力学》,《宝宝的光学》等。小宝爱不释手,天天缠着我们读给他听,在整个过程中我也有很大的收获。在同一时间,由于工作需要,我也一直在啃计算机分布式系统中号称最难理解的协议——Paxos。看PPT、读论文、找相关文章,跟同事讨论,一段时间下来,总的来说也有一定的收获。两件事一结合,当时就萌生了一个想法,我能不能也像 费利 博士这样,用比较通俗易懂的文字(图画做不到,没这个功底…)来描述Paxos,让更多的人能够理解,进而使用。

有了这个想法后,一发不可收拾,隔三差五就会从大脑中蹦出来,我也一直在构思应该怎么来写,如何动笔,时至今日,感觉基本上成熟了,也就落笔开始了下面的这篇文章。全文以家庭中的日常生活为背景,以生活中的小例子为引子(故事情节纯属YY…),来逐步揭开Paxos协议的原理,希望阅读的朋友们能够从中获益!

什么?老婆要在家里搞民主…

故事是这样开始的。作为一个典型的技术人,经常被老婆说是一根筋,除了技术,生活中的很多常识都不懂。正因如此,生活中的大小事宜,都是由老婆大人一手操办,而我也落得清闲。

但是,不久前的一天,老婆不知道哪根筋抽着了,突然跟我说:家里所有的事都有她来操办决策,不太好,希望全家人都能一起来献策献计,家庭也能够更加和谐。当时我一听就懵逼了,这唱的是哪一出戏?连忙回应道:现在这样很好,非常和谐,老婆您能者多劳,家里由你来主政,那一切必须是妥了又妥。但是,很多阅读此文的男性朋友大概也能感同身受,一旦老婆决定的事,那是很难更改的。因此我们全家也就被迫进入了一个全民献计献策的时代…

全民献计第一战,明确分工

先简单介绍下我们家的成员情况。我、老婆、一岁半的小宝,外加老婆的父母(跟我们一起住,帮我们来带小宝),五口人蜗居在杭州的一小间公寓里,过着简单的生活,全家倒也是其乐融融。

进入全民献计之后,由于小宝还小,自动被我们给忽略了。小宝的外公外婆也发话了:对杭州不熟,因此提不出太多意见,我们的意见提出来,他们一起决策倒是可以。数来数去,全民献计,只有我硬着头皮上了。开始我也反复琢磨,老婆虽然说是这么说来着,但是伴君如伴虎,谁知道真实的想法是啥啊。再加上对于生活中的大小事宜,我也确实缺乏想象。因此刚开始我也不敢对家庭生活中的各种事项妄加评论,还是以老婆大人马首是瞻。但是这样一来,又惹老婆不高兴了。没办法,那就尽量参与,提提意见呗。至此,家庭中的五人,第一轮分工完毕,对于家庭生活中的事宜,老婆和我共两人可以提出意见和建议,老婆、我外加小宝外公外婆可以进行决策,小宝太小,作为被动的接受方。

为了能够胜任新的职责,我也是好好恶补了一下各种生活小常识,对于日常中经常讨论的吃什么、去哪玩等问题,我也渐渐能够提出一些比较好的意见,能够被全家所接受。为此,老婆还好好的表扬了我一番。不知道哪一位先贤哲人曾经说过:权利是最好的chun药。太有道理了,对生活一两次指手画脚之后,尝到了瘾头,发现根本停不下来。慢慢的一些问题也凸显了出来,其中最大的一个问题,是家庭四人决策小组,有时候根本达不成一致。经常出现我跟小宝外公赞同一个方案,老婆和小宝外婆赞同另一个方案的情况,2 vs 2,经常僵持不下… 这种事情多了,难免会影响家庭和谐。这个时候,还是小宝的外公识大体,主动要求退出家庭决策圈,剩下3人决策,对于两个提案,总不至于再出现打平手,这个最大的问题也就迎刃而解。经过一段时间的摸索,对老婆提的家庭全民献计的想法,也有了一定的心得,将家庭人员分工明确了下来:

  • 提议人:老婆、我。两人。
  • 决策人:老婆、我、小宝外婆。三人。
  • 参与人:小宝外公、小宝,外加小宝外婆、老婆和我。五人。

一波未平一波又起,你不能总是变

家庭人员分工明确之后,全民献计基本上进入了正轨。大部分时候,还是老婆的生活经验最为丰富,建议也最多,三人一起表决通过,皆大欢喜。少部分时候,我也能够灵光一现,出一些鬼点子,老婆和小宝外婆外公也很满意。难得针对一件事,我跟老婆有不同的想法,每个想法先各自占有一票的情况下,小宝的外婆也能选择其中一方,形成2比1的投票结果,少数服从多数。小宝的外公落得清闲,全家人一起干啥他都是乐呵呵。而小宝呢,只要跟妈妈在一起,也是干啥都开心。

看起来是没有任何问题了,但生活上就是这样,一波未平一泼又起,这次出问题的是小宝外婆。小宝外婆有一个特点,比较善良,也比较纠结。在少数几次我跟老婆都有提议的时候,小宝外婆经常会改变主意。以中午出去吃啥为例,一个典型的场景如下:

老婆:中午不想做饭了,出去吃啥好?

我:吃XXX吧,好久没吃了。

小宝外婆:嗯,这个可以。

老婆:这个不好,上次吃过了,还是YYY吧。

小宝外婆:好好,想吃这个好久了。

我:要不ZZZ也不错,我朋友们一直推荐。

小宝外婆:听起来不错,去试试。

老婆:… …

小宝外婆:… …

我:… …

最后,老婆受不了了:妈,您老不能总是变来变去啊… 这不,又得立规矩了不是。经过家庭决策小组(小宝外公也参与了)的多次讨论,在明确分工之外,又新增了一条新规矩:如果一个方案已经在决策小组中获得了多数派的认同,那么就不能被改变了。针对前面提到的典型场景,如果使用了这条新规矩,会怎么样:

老婆:中午不想做饭了,出去吃啥好?

我:吃XXX吧,好久没吃了。

小宝外婆:嗯,这个可以。(画外音:此时我的方案已经被我和小宝外婆同时认可,形成多数派,不可更改。)

老婆:这个不好,上次吃过了,还是YYY吧。

小宝外婆:这次就听孩他爸的吧,下次再换YYY

我:OK

老婆(内心哪怕不情不愿):OK

我:小宝外公,小宝,我们中午去吃XXX咯。(画外音:要把决策下来的方案告诉全家人不是

感觉一切都搞定了,小宝外婆少了纠结,生活中的各种决策更加高效。虽然家庭生活本不是以高效为目的,但立下规矩,更快的达成一致,也能从某种程度上提升和谐指数。

没想到啊没想到,献计献策变成了处处抢占先机

生活中和工作中,每当我们认为所有的问题都得到解决时,后面接踵而来的新问题很快就会戳穿这个假象。有了明确的提议人、决策人、参与人的分工,又有了一条新规矩,难道还有什么问题是搞不定的?有,新问题不仅有,而且还不止一个,而且追根溯源,还都是新定的这个规矩惹的祸。

第一个暴露的新问题,来自小宝的外婆。前面也提到,小宝外婆为人比较善良,也比较纠结。新规矩实施之后,每当她刚同意一人,形成多数派决议之后,提案就不能被更改了。但是小宝外婆看到另外一人欲言又止,心里又觉得过意不去。而且,每次都这么杀伐果断,没有个稍微纠结一下的机会,也比较痛苦。

如果说第一个暴露的问题还好的话,那么第二个问题就更加严重一点。根据新规矩,基本上是谁先给出提案,谁就能达成多数派的决议。发展到后面就演变为我和老婆两个提议人,都不管提议本身的好坏,抢到先机再说。提议质量没法控制,家庭的生活质量也就随之下降,跟我们的本意反而背道而驰了。

没办法,决策小组继续坐下来一起思考应对之策,这次就比较花时间了,全家人一起想了许久,都没有很好地解决办法。正当大家像无头苍蝇一样乱撞之时,不得不说,还是老婆聪明,想到了一个顶顶好的解决办法,这个解决方法,说起来比较简单:

  1. 针对处处抢占先机,一轮决策后就不能更改的情况。将现在的一轮决策改为两轮:
    • 第一轮:提议阶段。在这一阶段,我跟老婆可以发起提议,小宝外婆作为决策者,可以选择听谁的提议,但是不做决策。
    • 第二轮:决策阶段。在听了提议后,进入决策阶段,此时小宝外婆可以选择赞成这个提议,也可以选择反对这个提议。
  1. 两轮中,第一轮提议阶段可以纠结,可以更改。第二轮决策阶段,这个跟前面提到的规矩保持一致:一旦决策阶段达成了多数派的决议,就不能更改。

仍旧是上面生活中同样的例子,现在会变成什么样子:

老婆:中午不想做饭了,出去吃啥好?

我:我有一个提议,大家想不想听听?(第一阶段:提议)

小宝外婆:说来听听。

老婆:登登(我的小名),你的肯定不靠谱,其实我也有一个提议。

小宝外婆:那我们就听听琛琛的吧。(画外音:提议阶段,可以更改。这一下小宝外婆的问题解决了。)

我:我的提议是

小宝外婆:登登,你的提议机会被琛琛抢了。(画外音:提议被抢占,我的当前提议作废。)

老婆:我们去YYY吧。

小宝外婆:好,听你的,去YYY。(画外音:决策阶段,老婆和小宝外婆两人形成了多数派的决策,不能更改了。)

我:其实我本来想说是去XXX的。但既然大家都同意去YYY,那就去YYY。小宝外公,小宝,我们中午去YYY咯!(画外音:提议形成多数派的决议之后,就不能被更改,只能被接受。与此同时,我还有义务将接受的提议传达给参与人,小宝外公和小宝。当然,这里我不能撒谎,如果我撒谎了,跟小宝外公和小宝说我们全家最后决定去XXX,那么这两位就被我带到沟里去了

在老婆给出一个顶顶好的解决办法之后,在原有的基础上,我们全家也尝试实施这个新的两轮的提议方案,在实施的过程中也尝试不断地完善,前面提到的小宝外婆的问题,和一股脑儿处处抢占先机的问题,看起来也都得到了解决。

下篇更精彩,总结部分 

转载自:阿里技术发展协会

作者:圭多

目录
相关文章
|
前端开发
理解分布式一致性:Paxos协议之Multi-Paxos
理解分布式一致性:Paxos协议之Multi-Paxos
理解分布式一致性:Paxos协议之Multi-Paxos
|
存储 算法 前端开发
如何实现一个 Paxos
Paxos 作为一个经典的分布式一致性算法(Consensus Algorithm),在各种教材中也被当做范例来讲解。但由于其抽象性,很少有人基于朴素 Paxos 开发一致性库,本文介绍的实现代码参考了 RAFT 中的概念以及 phxpaxos 的实现和架构设计,实现 multi-paxos 算法,主要针对线程安全和模块抽象进行强化,网络、成员管理、日志、快照、存储以接口形式接入,算法设计为事件驱动,仅包含头文件,便于移植和扩展。
19860 1
|
存储 缓存 算法
深入分布式缓存-Paxos
深入分布式缓存-Paxos
79 0
深入分布式缓存-Paxos
|
存储 缓存 算法
【分布式】Chubby与Paxos
 在上一篇理解了Paxos算法的理论基础后,接下来看看Paxos算法在工程中的应用。
292 0
【分布式】Chubby与Paxos
|
安全 算法 数据安全/隐私保护
理解分布式一致性:Paxos协议之Cheap Paxos & Fast Paxos
理解分布式一致性:Paxos协议之Cheap Paxos & Fast Paxos
理解分布式一致性:Paxos协议之Cheap Paxos & Fast Paxos
理解分布式一致性:Paxos协议之Generalized Paxos & Byzantine Paxos
理解分布式一致性:Paxos协议之Generalized Paxos & Byzantine Paxos
理解分布式一致性:Paxos协议之Generalized Paxos & Byzantine Paxos
|
机器学习/深度学习 存储 前端开发
理解分布式一致性:Paxos协议之Basic Paxos
理解分布式一致性:Paxos协议之Basic Paxos
理解分布式一致性:Paxos协议之Basic Paxos
|
存储 监控 算法
深入剖析一致性算法 Paxos
  这是一个有关Paxos算法非常形象的讲解与示范。Paxos是能够基于一大堆完全不可靠的网络条件下却能可靠确定地实现共识一致性的算法。也就是说:它允许一组不一定可靠的处理器(服务器)在某些条件得到满足情况下就能达成确定的安全的共识,如果条件不能满足也确保这组处理器(服务器)保持一致。   什么是共识?   具体来说是这样:分布式系统中由于网络之间通讯可能会中断,虽然概率很低,但是没有100%完美的网络因此,依靠网络通讯的计算机之间要达成共识就比较困难,假设有X, Y和Z三台计算机谋划在周一攻击人类世界,它们的攻击计划是只要所有计算机可用于战斗时就一起进行攻击,不落下任何一台机器,但是当他
212 0
|
算法
Paxos一致性协议
Paxos一致性协议
88 0