分布式一致性问题本质上可以从两个维度来认识:一是如何就某一个值达成一致的决策;二是如何就一系列连续的值达成一致的顺序决策。很显然,如果我们能够找到问题一的解决方案,那么问题二也就迎刃而解了。下面我们就从一个生活中的小问题来入手,看看如何去设计一个合理的算法来解决问题一。
有这样一个家庭,由6个成员组成,分别是爸爸妈妈、爷爷奶奶、姐姐和一个3岁的弟弟。这一天,大家要线上决定一下明天出游时,弟弟戴什么颜色的帽子。由于此时5位家长分处在不同的地方,因此只能通过微信来交流。我们尝试通过这样一个案例来剖析一个最简单的共识问题。
单点故障
既然目的是要做出一个一致的决策,最简单的方式就是找出一个公信度最高的人,由他负责给出一个决策,大家都同意即可。比如,我们始终选择妈妈的决策,因为平时都是妈妈负责弟弟的着装。可是如果每次决策都需要等待妈妈的提案的话,难免有时候妈妈的手机会不在线,比如在坐飞机的时候手机开了飞行模式。因此,始终选择一个人来做决定是不行的。这种因为一个参与方就导致整个集群出现阻塞的情况就是典型的单点故障问题。
少数服从多数
既然由一个人来做决策不可靠,最容易想到的一个解决方案就是:少数服从多数。即每次决策都至少得到半数以上人的同意才可以通过。当然,这里我们不考虑有人乱投票,即向不同人发送不一样的投票。以当前的场景为例,5个人当中需要至少3个人接受同一个提案才能表明该提案值被选定。并且我们需要保证一旦某个提案值被选定了,就不可能在后续出现另外一个提案值也被选定。
欧科云链集团正式启动区块链科普行动“星途计划”:欧科云链集团于4月26日,正式宣布启动了区块链科普行动——“星途计划”,行动包括将在全国范围展开系列沙龙,加大力度推进区块链科普进机关、进国企、进校园等,联合政府部门、行业协会等共同构建起更加完善和有效的区块链科普教育生态,与此同时,直击区块链科普现存痛点,推出简单易懂的“秒懂区块链”公益短视频课。
该计划旨在全维度推动社会建立对产业更清晰的认知,与“鲲鹏计划”一道助力数字经济及区块链产业本身健康发展夯实“人才”和“产业认知”两大基础。[2021/4/26 20:59:37]
注:这里的选定是全局视角的,而接受是单个人的视角的,即同一个人可能会接受多次提案,但是整个群体最终只能选定一个提案值。
▲场景1
首先依旧给出一个最简单的方案,为了能够完成最终的决策,我们规定每个人必须接受他收到的第一个提案,这样也可以调动起大家的积极心,如果想要自己的提案通过就必须快速想出一种颜色并发出提案。
但是,这种方案可能导致一种无法完成决策的困境。如上图所示,爸爸提出了红色帽子,觉得比较正能量!并及时将提案私戳给了妈妈,妈妈也欣然接受。几乎同一时间,爷爷提出了蓝色帽子,觉得比较复古!并及时将提案私戳给了奶奶,奶奶也欣然接受。而姐姐认为绿色比较时髦,然而等她将消息发送出去后,发现大家都已经有了自己的选择。最终形成了2-2-1的局面,没有哪个提案能够达到半数以上。因此,我们发现,如果想要最终完成决策,有些人可能要接受多个不同的提案。
动态 | 报告:区块链等热点词促使童书科普百科类成交额同比增速最高:近日,京东图书与艾瑞咨询联合发布了《2019中国图书市场报告》。报告指出,AI、5G、区块链、机器人、VR、智能家居、AR这些热点词,不断点燃科技热潮,科技在改变大众生活的同时,也吸引了越来越多家长的关注,从小培养孩子对科技的兴趣和热爱。因此童书中科普百科类成交额同比增速最高,占比将近40%。[2020/1/8]
▲场景2
既然如此,我们再考虑如下方案,即每个人都接受他收到的所有提案。
这次,我们只考虑有两个人发起了提案,分别是爸爸的红色提案和姐姐的绿色提案。如果爸爸的提案已经获得了3票的同意达到了选定状态,随后姐姐才发起提案,根据每个人都接受所有提案的原则,绿色提案最终也能够达到选定状态。显然,这种方案违背了唯一性的原则,如果一直这样运转下去可能最终也没法选定一个提案值。
此时,我们发现一个问题,即爸爸的红色提案既然事先已经达到了选定状态,那么我们可以让姐姐在提案之前确认下所有人的状态,如果已经有半数节点对某个提案值达成了共识,那么姐姐就可以停止发出提案,或者再发出一个包含相同提案值的提案来保证唯一性。这样是否就能够解决问题了呢?
动态 | 新浪财经:官媒针对区块链的报道从科普宣传转向打假监管:据新浪财经今日消息,“1025新政”满月,一个月间,官媒对区块链的态度风向已转。据11月初的一项统计,七家党媒在新政一周内发布了65篇直接相关报道,当时文章中的关键词是数据、产业、安全、创新等,大量文章偏向于科普区块链的概念以及应用介绍,提醒警惕虚拟货币炒作的仅有3篇。近期,官媒的批评焦点则纷纷指向借区块链之名进行的虚拟货币发行和炒作行为。据统计,新华网、人民网收录转载的,以打击虚拟货币或揭露假借区块链行为主题的文章,自10月25日到11月25日午间,共28篇;其中,11月19日至11月25日的一周内就高达15篇。这些文章主要围绕三个观点展开:厘清区块链和虚拟货币的关系,说明二者概念不等;打击伪“区块链”局,或是虚拟货币局揭露;提醒民众,区块链不能成为炒作的噱头,更不是行的招牌,需警惕此类活动,理性投资。[2019/11/26]
▲场景3
场景2中的问题依然存在,如上图所示,如果爸爸和姐姐分别事先确认了下所有人的状态都处在未投票的状态,并依次发出了各自的提案,由于爸爸是分别私戳的,因此消息有一定的延迟,而姐姐直接拉了一个群聊一次性通知给了爷爷和奶奶,因此姐姐的提案先于爸爸的提案达到选定状态,稍后等爸爸的提案通知到了妈妈和爷爷的时候,他们又该如何决策呢?
声音 | CNBC主持人:加密货币最大的缺点之一就是难以向外行快速科普:CNBC主持人Ran NeuNer近期发推称,加密货币最大的缺点之一就是很难向外行快速解释。当人们要求我向他们解释比特币时,我知道他们至少需要一个小时才能真正理解。[2019/9/10]
通过上面的问题,我们发现,为了防止整个决策进入到一种无法终止的状态,我们还需要通过某种方式对提案进行排序,从而拒绝一些旧的、无效的提案,并及时地向提案者反馈自己接受的提案值,避免提案者一直发起相同的提案。也就是说,如果爷爷在收到爸爸的延迟提案时,能够知道先前已经存在一个更新的提案并拒绝旧提案,同时告知爸爸已经接受了姐姐的绿色提案的话,就可以避免出现多种提案达到选定状态的困境。
例如,我们可以分别为5个人分配一系列提案号,提案号按如下规则递增:
同时做如下规定:
一条提案由提案值color和提案号seqNo组成,可表示为(color,seqNo)每个人记录下自己收到的最大提案号,并拒绝提案号比它更小的提案当提案者收到一个已经被接受的提案时,必须无条件接受该提案,否则有可能陷入无限提案的循环每个提案都需要分为两阶段来完成,分别为事先询问阶段与最终确认阶段,其中询问阶段用来确定一个序号值seqNo并及时检测出是否已经存在被接受的提案值,确认阶段用来确定一个提案值color。
动态 | 央行官微旧文重发“再科普”:范一飞详解数字货币:据中国经济网消息,今日,央行官微公众号头条重新发布央行副行长范一飞在2018年1月25日题为《关于央行数字货币的几点考虑》的文章,对央行数字货币再次进行科普。同时,微信公众号第二条发布支付司副司长穆长春8月10日在第三届中国金融四十人伊春论坛上的演讲。近年来,各主要国家和地区央行及货币当局均在对发行央行数字货币开展研究,新加坡央行和瑞典央行等已经开始进行相关试验,人民银行也在组织进行积极探索和研究。[2019/8/21]
场景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解决的仅仅是一个最基本的共识的问题,即在非拜占庭的同步网络环境下,如何就一个决策值达成一致。如果系统进入了异步网络环境呢?如果出现了拜占庭节点呢?当我们将这一系列的问题考虑进去之后,整个问题就变得复杂的多了。
好在前人已经给我们提供了非常多的理论基础,为了应对不同的问题,已经出现了非常多优秀的共识算法。大家感兴趣的话,后面会有详细的共识算法分类介绍,为大家全面地展示不同场景下共识算法的选择与权衡。添加小助手加入技术交流群,欢迎您和我们共享观点,共论区块链的无限未来~
作者简介
端豪
趣链科技基础平台部共识算法研究小组
巴比特讯,根据TheBlock报道,一位MetaMask用户遭遇网络钓鱼攻击,无意中将其私钥交给了子。一名白帽黑客成功挽救该用户钱包的一半资金.
基于比特币目前的走势与2019年6月至12月的走势惊人的相似,它面临着达到47500-50000美元的前景.
原文标题:《另一个状态友好的界地址方案》来源|?ethresear.ch作者|?VitalikButerin译者按:本文需要读者对状态管理和stateexpiry机制作一定了解.
据Cryptopotato消息,碎片化NFT交易平台Unicly将在SushiSwap的IDO发行平台MISO上推出碎片化NFT拍卖,此举使得uToken可以获得更优的价格发现.
美国股票及加密交易应用程序公司RobinhoodMarkets,Inc周四下午向美国证券交易委员会提交了S-1文件,以期进行首次公开募股,文件显示拟最多筹资1亿美元.
当前随着对比特币监管策略的收紧,投资热情迅速冷却,普通投资者信仰崩塌,认为比特币为局的声音不绝于耳.