分布式一致性问题本质上可以从两个维度来认识:一是如何就某一个值达成一致的决策;二是如何就一系列连续的值达成一致的顺序决策。很显然,如果我们能够找到问题一的解决方案,那么问题二也就迎刃而解了。下面我们就从一个生活中的小问题来入手,看看如何去设计一个合理的算法来解决问题一。
有这样一个家庭,由6个成员组成,分别是爸爸妈妈、爷爷奶奶、姐姐和一个3岁的弟弟。这一天,大家要线上决定一下明天出游时,弟弟戴什么颜色的帽子。由于此时5位家长分处在不同的地方,因此只能通过微信来交流。我们尝试通过这样一个案例来剖析一个最简单的共识问题。
单点故障
既然目的是要做出一个一致的决策,最简单的方式就是找出一个公信度最高的人,由他负责给出一个决策,大家都同意即可。比如,我们始终选择妈妈的决策,因为平时都是妈妈负责弟弟的着装。可是如果每次决策都需要等待妈妈的提案的话,难免有时候妈妈的手机会不在线,比如在坐飞机的时候手机开了飞行模式。因此,始终选择一个人来做决定是不行的。这种因为一个参与方就导致整个集群出现阻塞的情况就是典型的单点故障问题。
少数服从多数
既然由一个人来做决策不可靠,最容易想到的一个解决方案就是:少数服从多数。即每次决策都至少得到半数以上人的同意才可以通过。当然,这里我们不考虑有人乱投票,即向不同人发送不一样的投票。以当前的场景为例,5个人当中需要至少3个人接受同一个提案才能表明该提案值被选定。并且我们需要保证一旦某个提案值被选定了,就不可能在后续出现另外一个提案值也被选定。
欧易OKEx将于3月18日推出DeFi系列科普视频:据欧易OKEx官方消息显示,欧易OKEx将正式推出DeFi系列科普视频《欧易DeFi20讲》,本系列节目由欧易OKEx亚太区CEO马克金主讲。该视频首期将于3月18日11:00(HKT)推出,用户可以在欧易OKEx官方学院、金色财经观看。
《欧易DeFi20讲》主要包含DeFi入门指南、全景解读DeFi生态及如何参与DeFi三个篇章,可以轻松使用户了解DeFi原理,洞察DeFi价值,掌握DeFi热点,更多详情请关注欧易OKEx官方学院。[2021/3/18 18:55:59]
注:这里的选定是全局视角的,而接受是单个人的视角的,即同一个人可能会接受多次提案,但是整个群体最终只能选定一个提案值。
▲场景1
首先依旧给出一个最简单的方案,为了能够完成最终的决策,我们规定每个人必须接受他收到的第一个提案,这样也可以调动起大家的积极心,如果想要自己的提案通过就必须快速想出一种颜色并发出提案。
但是,这种方案可能导致一种无法完成决策的困境。如上图所示,爸爸提出了红色帽子,觉得比较正能量!并及时将提案私戳给了妈妈,妈妈也欣然接受。几乎同一时间,爷爷提出了蓝色帽子,觉得比较复古!并及时将提案私戳给了奶奶,奶奶也欣然接受。而姐姐认为绿色比较时髦,然而等她将消息发送出去后,发现大家都已经有了自己的选择。最终形成了2-2-1的局面,没有哪个提案能够达到半数以上。因此,我们发现,如果想要最终完成决策,有些人可能要接受多个不同的提案。
火币推出《一分钟读懂DeFi》系列科普视频:据官方消息,8月24日,火币推出《一分钟读懂DeFi》系列科普视频,并与微博财经合作冠名播出,布道DeFi认知,助力行业发展《一分钟读懂DeFi》是由火币成长学院打造的业内首个系统全面讲解DeFi的系列科普动画,继推出《区块链100问》后的再续佳作。《一分钟读懂DeFi》系列动画对DeFi的发展进行系统梳理,适合想要由浅入深、全面系统了解区块链DeFi的人们轻松了解DeFi。目前视频已由火币网官方微博发布。[2020/8/24]
▲场景2
既然如此,我们再考虑如下方案,即每个人都接受他收到的所有提案。
这次,我们只考虑有两个人发起了提案,分别是爸爸的红色提案和姐姐的绿色提案。如果爸爸的提案已经获得了3票的同意达到了选定状态,随后姐姐才发起提案,根据每个人都接受所有提案的原则,绿色提案最终也能够达到选定状态。显然,这种方案违背了唯一性的原则,如果一直这样运转下去可能最终也没法选定一个提案值。
此时,我们发现一个问题,即爸爸的红色提案既然事先已经达到了选定状态,那么我们可以让姐姐在提案之前确认下所有人的状态,如果已经有半数节点对某个提案值达成了共识,那么姐姐就可以停止发出提案,或者再发出一个包含相同提案值的提案来保证唯一性。这样是否就能够解决问题了呢?
动态 | 报告:区块链等热点词促使童书科普百科类成交额同比增速最高:近日,京东图书与艾瑞咨询联合发布了《2019中国图书市场报告》。报告指出,AI、5G、区块链、机器人、VR、智能家居、AR这些热点词,不断点燃科技热潮,科技在改变大众生活的同时,也吸引了越来越多家长的关注,从小培养孩子对科技的兴趣和热爱。因此童书中科普百科类成交额同比增速最高,占比将近40%。[2020/1/8]
▲场景3
场景2中的问题依然存在,如上图所示,如果爸爸和姐姐分别事先确认了下所有人的状态都处在未投票的状态,并依次发出了各自的提案,由于爸爸是分别私戳的,因此消息有一定的延迟,而姐姐直接拉了一个群聊一次性通知给了爷爷和奶奶,因此姐姐的提案先于爸爸的提案达到选定状态,稍后等爸爸的提案通知到了妈妈和爷爷的时候,他们又该如何决策呢?
通过上面的问题,我们发现,为了防止整个决策进入到一种无法终止的状态,我们还需要通过某种方式对提案进行排序,从而拒绝一些旧的、无效的提案,并及时地向提案者反馈自己接受的提案值,避免提案者一直发起相同的提案。也就是说,如果爷爷在收到爸爸的延迟提案时,能够知道先前已经存在一个更新的提案并拒绝旧提案,同时告知爸爸已经接受了姐姐的绿色提案的话,就可以避免出现多种提案达到选定状态的困境。
声音 | 浪潮集团云南分公司总经理:云南区块链产业发展需从“科普”到“专精”不断深化:据昆明日报消息,浪潮集团云南分公司总经理郑昕表示,云南区块链产业发展需从“科普”到“专精”不断深化。下一步,浪潮将继续加大云南农业产业高质量发展体系建设力度,重点以普洱茶等云南优势产业为切入点,打造云南“绿色、有机农产品高地”的品牌形象,并在此基础上,开展基于区块链的供应链金融服务,解决中小企业贷款难、贷款贵问题。[2019/11/11]
例如,我们可以分别为5个人分配一系列提案号,提案号按如下规则递增:
同时做如下规定:
一条提案由提案值color和提案号seqNo组成,可表示为(color,seqNo)每个人记录下自己收到的最大提案号,并拒绝提案号比它更小的提案当提案者收到一个已经被接受的提案时,必须无条件接受该提案,否则有可能陷入无限提案的循环每个提案都需要分为两阶段来完成,分别为事先询问阶段与最终确认阶段,其中询问阶段用来确定一个序号值seqNo并及时检测出是否已经存在被接受的提案值,确认阶段用来确定一个提案值color。
场景1的解决方案比较简单,即在一定时间内无法收到大多数人的同意消息之后,尝试用新的提案号再发起一次提案,直到某次提案消息能够成功传达到大多数人后,即可完成决策。
动态 | 美国演说家Anthony Robbins开始科普什么是比特币:美国演说家安东尼·罗宾(Anthony Robbins)在自己的网站上发布了一篇比特币的科普文章,并在推特上向自己的粉丝介绍什么是比特币,目前他的推特账户共有粉丝304万人。[2019/1/1]
下面我们来看一下如何解决场景2与场景3。
注:下图中,以Pn表示事先询问消息,询问其他节点是否接受提案号n;以R(v,n)表示响应消息,告知提案者当前已经接受的最大提案号和提案值;以A(v,n)表示最终确认消息,告诉其他节点尝试最终确认一个提案值v,其提案号为n。
场景2解决方案
对于已经达成选定状态的提案,我们可以保证后续的提案不会覆盖原先的提案值。
此时提案决策流程如下:
爸爸使用提案号1发起询问爸爸、妈妈、爷爷都同意提案号1,并且反馈当前未接收任何提案值,提案号默认为0由于收到了大多数人的同意,爸爸发出最终确认消息给到了大多数人,提案号为1,提案值为红色,此时红色其实已经达到选定状态姐姐使用提案号5发起询问由于提案必须经过至少3人同意,而任选3人必然与此前同意爸爸提案的人群有交集,因此处在交集中的人能够及时反馈之前已经同意的提案,即1号红色提案,其余人还是反馈空投票姐姐在等到大多数人的反馈结果之后,发现此前已经有提案被其他人同意了,选择提案号最高的那个提案值,覆盖自己的提案值姐姐发出最终确认消息,提案号为5,提案值为红色最终所有人都接受了红色提案,虽然提案号可能不尽相同场景3解决方案
对于未达成选定状态的提案,如果有新的提案提出,最终选定的提案值可能有两种情况。
第一种情况是新提案者能够发现旧的提案值,最终会选定旧的提案值。
第二种情况是新提案者不能够发现旧的提案值,最终会选定新的提案值。
场景3-1解决方案
新提案者能够发现旧的提案值,最终会选定旧的提案值。
此时提案决策流程如下:
爸爸使用提案号1发起询问爸爸、妈妈、爷爷都同意提案号1,并且反馈当前未接收任何提案值,提案号默认为0由于收到了大多数人的同意,爸爸发出最终确认消息,但是因为消息延迟的原因,最终确认消息只发送到了爸爸、爷爷。妈妈延迟接受了该消息,因此红色其实并未达到选定状态姐姐使用提案号5发起询问由于提案必须经过至少3人同意,而如果此时选中的3人中恰巧有一人接受过爸爸的最终确认消息,他会立即反馈之前已经同意的提案,即1号红色提案,其余人还是反馈空投票姐姐在等到大多数人的反馈结果之后,发现此前已经有提案被其他人同意了,选择提案号最高的那个提案,覆盖自己的提案值姐姐发出最终确认消息,提案号为5,提案值为红色妈妈延迟接收到了爸爸的最终确认消息,由于没有收到提案号更大的提案,因此也接受了红色提案最终所有人都接受了红色提案,虽然提案号可能不尽相同场景3-2解决方案
新提案者不能够发现旧的提案值,最终会选定新的提案值。
此时提案决策流程如下:
爸爸使用提案号1发起询问爸爸、妈妈、爷爷都同意提案号1,并且反馈当前未接收任何提案值,提案号默认为0由于收到了大多数人的同意,爸爸发出最终确认消息,但是因为消息延迟的原因,最终确认消息只发送到了爸爸、妈妈。爷爷延迟接受了该消息,因此红色其实并未达到选定状态姐姐使用提案号5发起询问由于提案必须经过至少3人同意,而如果此时选中的3人中恰巧都没有人接受过爸爸的最终确认消息,那么姐姐会收到3个人反馈的空投票由于收到了大多数人的同意,姐姐发出最终确认消息给到了大多数人,提案号为5,提案值为绿色,此时绿色其实已经达到选定状态妈妈延迟接收到了爸爸的最终确认消息,由于之前已经接受了提案号更大的提案,因此拒接爸爸的旧提案值,并将新提案值及时反馈给爸爸爸爸在收到拒接响应消息后,会尝试从头开始重新发起提案,最终选择绿色提案最终所有人都接受了绿色提案,虽然提案号可能不尽相同总结
总结一下,为了能够让决策最终能够收敛,其实我们已经显式或者隐式地做了一些约束:
1.每个人的手机需要实时在线并且任意一条微信消息都可以在一定时延内收到,当出现网络断开的场景时,可能会导致共识无法达成
2.每个人都需要严格按照上述规则进行提案/投票,不能有胡乱提案/投票的动作
上面其实就是运用了经典分布式一致性算法Paxos的原理。然而Paxos解决的仅仅是一个最基本的共识的问题,即在非拜占庭的同步网络环境下,如何就一个决策值达成一致。如果系统进入了异步网络环境呢?如果出现了拜占庭节点呢?当我们将这一系列的问题考虑进去之后,整个问题就变得复杂的多了。
好在前人已经给我们提供了非常多的理论基础,为了应对不同的问题,已经出现了非常多优秀的共识算法。大家感兴趣的话,后面会有详细的共识算法分类介绍,为大家全面地展示不同场景下共识算法的选择与权衡。添加小助手加入技术交流群,欢迎您和我们共享观点,共论区块链的无限未来~
作者简介
端豪
趣链科技基础平台部共识算法研究小组
巴比特讯,7月16日,人民银行举行媒体吹风会,介绍中国数字人民币的研发进展白皮书有关内容。央行副行长范一飞在会上透露,数字人民币体系遵循“小额匿名、大额依法可溯”的原则,充分考虑现有电子支付体系.
1900/1/1 0:00:00日前,深圳市税务局党委委员、总经济师项清透露,深圳“智税”创新实验室上线区块链电子发票系统后,参与发起的《基于区块链技术的电子发票应用推荐规程》国际标准,正式由IEEE确认并发布.
1900/1/1 0:00:007月24日,2021世界区块链大会·杭州正式开幕。本次大会由杭州时戳信息科技有限公司主办。华为区块链首席战略官张小军,发表主题演讲《华为链,链未来》.
1900/1/1 0:00:00据CoinDesk报道,达拉斯交响乐团创建了将在NFT市场Rarible上提供的古典音乐NFT。该NFT旨在庆祝2021年5月在达拉斯莫顿H.迈耶森交响乐中心举行的历史性音乐活动.
1900/1/1 0:00:00原文标题:《TheNFTspaceisboomingagain,butexpertssaythereare5challengesthedigitalcollectiblesspacestilln.
1900/1/1 0:00:00巴比特讯,8月4日,Peckshield发推表示,跨链收益率提升平台PopsicleFinance下SorbettoFragola产品遭到攻击,导致了约2070万美元的损失.
1900/1/1 0:00:00