Warning: Trying to access array offset on value of type bool in /www/wwwroot/blockchain/wp-content/themes/Grace8.2/functions_suxingme.php on line 1208

Warning: Trying to access array offset on value of type bool in /www/wwwroot/blockchain/wp-content/themes/Grace8.2/functions_suxingme.php on line 1209

Warning: Trying to access array offset on value of type bool in /www/wwwroot/blockchain/wp-content/themes/Grace8.2/functions_suxingme.php on line 1210

Warning: Trying to access array offset on value of type bool in /www/wwwroot/blockchain/wp-content/themes/Grace8.2/functions_suxingme.php on line 1303

DPOS

6篇文章
石墨烯技术(Graphene blockchain library)是一种区块链底层技术架构,由Cryptonomex公司开发, 采用C++语言编写。而Dan Larimer就是Cryptonomex的创始人。他创建的Bitshares、Steem和EOS都是基于石墨烯架构的项目,基于此架构开发的区块链项目还包括YOYOW,公信宝,DECENT等。 我们说的EOS的DPoS共识、高度模块化等特点其实都是石墨烯架构包含的内容,凡是基于石墨烯技术的项目都具有通用的特性,比如较快的转账速度、较高的交易吞吐量以及稳定、功能强大等。不同的项目基于石墨烯架构则会总不同的修改和开发,例如EOS基于DPoS共识增加了BFT容错算法,手续费改成了免费等。
  EOS在第一版白皮书中采用的是DPoS共识机制,在最新一版的白皮书中,其做了一些改进,现为BFT-DPoS共识机制。 DPoS(Delegated Proof of Stake),意思是授权权益证明共识机制。相比于比特币的PoW机制,DPoS不用浪费算力资源争夺记账权,其通过赋予EOS通证持有人投票权,选出21个“超级节点”来担任记账人的角色,保证整个网络的正常运行。21个超级节点轮流负责记账,每一个区块产生后,会按照顺序传递到下一个超级节点中,第二个超级节点要负责打包新的区块,同时确认上一区块的内容,当某一区块被超过2/3的超级节点确认后,该区块将被确认为不可逆区块。 BFT(Byzantine Fault Tolerance),意思是拜占庭容错算法,DPoS共识加上BFT算法后,验证时不再按照出块顺序由超级节点一个个验证区块内容,而是让出块节点成为主节点,出块后同时向剩下20个节点进行广播,并获得节点的验证反馈,如果有超过2/3的节点验证通过,则该区块成为不可逆区块。BFT可以使得EOS的区块确认速度显著增加。 目前采用BFT-DPoS共识机制的EOS,可以实现0.5秒的出块速度,1秒实现区块的不可逆转。为避免因出块速度过快而漏块,EOS的超级节点会按照其地理位置分布轮流成为主节点,尽可能减少超级节点间的网络延迟,同时规定每个超级节点连续生产6个块,至少保证6个区块中的前几个能确认完成,不会出现整个超级节点被跳过的现象。
区块链的基础是P2P分布式网络、加密算法和共识机制。 在这些基础技术中,共识机制是至关重要的。可以说共识机制是区块链技术的核心,共识机制对于一个区块链系统来说就是它的灵魂。 共识机制很大程度上决定了整个区块链系统节点间的相互信任程度,也决定了其他使用者对于区块链上数据的信任程度。 区块链与普通分布式系统,尤其是分布式数据库最大的区别就是“去中心化”,而正是共识机制决定了一个区块链系统“去中心化”的程度。 通常,我们把区块链分为两大类:一种是公有链,一种是非公有链。 这两种区块链的核心区别在于:参与共识的节点是否是受控的。 对于公有链来说,互联网上的任何计算机都可以通过运行相应的区块链程序,参与整个区块链的共识; 而对于非公有链来说,通常需要获得之前区块链节点中大部分节点的同意,或者通过其他某种机制,获得参与共识的权力。 目前主要几类共识算法如下:PoW、PoS、DPos、Ripple Consensus、PBFT、dBFT、POOL验证池 1.PoW(工作量证明) 通过与或运算,计算出一个满足规则的随机数,即获得本次记账权,发出本轮需要记录的数据,全网其它节点验证后一起存储; 优点:易实现,节点间无需交换额外的信息即可达成共识,破坏系统需要投入极大的成本。 缺点:浪费能源,区块的确认时间难以缩短;共识达成的周期较长,不适合商业应用 2.PoS(权益证明) PoW的一种升级共识机制,本质上是采用权益证明来代替PoW的算力证明,记账权由最高权益的节点获得,而不是最高算力的节点。根据每个节点所占代币的比例和时间;等比例的降低挖矿难度,从而加快找随机数的速度。 优点:解决了PoW 消耗算力的问题,在一定程度上缩短了共识达成的时间 缺点:拥有权益 的参与者未必希望参与记账,还是需要挖矿。 3.DPoS(股份授权证明机制) 类似于董事会投票,持币者投出一定数量的节点,代理他们进行验证和记账。 优点:大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证。 缺点:整个共识机制还是依赖于代币,很多商业应用是不需要代币存在的。 4.Ripple Consensus(瑞波共识算法) 使一组节点能够基于特殊节点列表达成共识。初始特殊节点列表就像一个俱乐部,要接纳一个新成员,必须由51%的该俱乐部会员投票通过。共识遵循这核心成员的51%权力,外部人员则没有影响力。由于该俱乐部由“中心化”开始,它将一直是“中心化的”,而如果它开始腐化,股东们什么也做不了。 5.PBFT:Practical Byzantine Fault Tolerance(实用拜占庭容错算法) 在保证活性和安全性(liveness & safety)的前提下提供了(n-1)/3的容错性。 在分布式计算上,不同的计算机透过讯息交换,尝试达成共识;但有时候,系统上协调计算机(Coordinator / Commander)或成员计算机 (Member /Lieutanent)可能因系统错误并交换错的讯息,导致影响最终的系统一致性。 拜占庭将军问题就根据错误计算机的数量,寻找可能的解决办法,这无法找到一个绝对的答案,但只可以用来验证一个机制的有效程度。 而拜占庭问题的可能解决方法为: 在 N ≥ 3F + 1 的情况下一致性是可能解决。其中,N为计算机总数,F为有问题计算机总数。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。 优点: 1)系统运转可以脱离币的存在,pbft算法共识各节点由业务的参与方或者监管方组成,安全性与稳定性由业务相关方保证。 2)共识的时延大约在2~5秒钟,基本达到商用实时处理的要求。 3)共识效率高,可满足高频交易量的需求。 缺点: 1)当有1/3或以上记账人停止工作后,系统将无法提供服务; 2)当有1/3或以上记账人联合作恶,且其它所有的记账人被恰好分割为两个网络孤岛时,恶意记账人可以使系统出现分叉,但是会留下密码学证据; 6.dBFT: delegated BFT 授权拜占庭容错算法 小蚁(NEO)采用的dBFT机制,是由权益来选出记账人,然后记账人之间通过拜占庭容错算法来达成共识。 此算法在PBFT基础上进行了以下改进: 将C/S架构的请求响应模式,改进为适合P2P网络的对等节点模式; 将静态的共识参与节点改进为可动态进入、退出的动态共识参与节点; 为共识参与节点的产生设计了一套基于持有权益比例的投票机制,通过投票决定共识参与节点(记账节点); 在区块链中引入数字证书,解决了投票中对记账节点真实身份的认证问题。 优点: 1)专业化的记账人; 2)可以容忍任何类型的错误; 3)记账由多人协同完成,每一个区块都有最终性,不会分叉; 4)算法的可靠性有严格的数学证明; 缺点: 1)当有1/3或以上记账人停止工作后,系统将无法提供服务; 2)当有1/3或以上记账人联合作恶,且其它所有的记账人被恰好分割为两个网络孤岛时,恶意记账人可以使系统出现分叉,但是会留下密码学证据; 以上总结来说,dBFT机制最核心的一点,就是最大限度地确保系统的最终性,使区块链能够适用于真正的金融应用场景。 7.POOL验证池 基于传统的分布式一致性技术,加上数据验证机制。 优点:不需要代币也可以工作,在成熟的分布式一致性算法(Pasox、Raft)基础上,实现秒级共识验证。 缺点:去中心化程度不如bictoin;更适合多方参与的多中心商业模式。   Source: bitcointalk.org
区块链的根本属性是去中心化,而去中心化的依托是共识机制。 在了解共识机制之前,先来看两个古老的引入问题:类两军问题、拜占庭将军问题。 类两军问题: 古代有两个相距很远的军队要传递信息, 蓝军派遣一个信使去跟红军说:有本事把意大利炮拿过来! 红军收到后回复蓝军说:收到指令。 蓝军要给出确认答复:知道你收到指令了! 红军继续给出答复:知道你知道我知道指令了! …. 拜占庭将军问题: 拜占庭罗马帝国在军事行动中,采取将军投票策略来决定进攻还是撤退,即如果多数人决定进攻,就整体确定进攻策略。但是军队中如果有奸细(将军可能反水、传令官可能误传),如何保证最后投票真实反映忠诚将军的决策? 拜占庭帝国周围有10个小国,它们饱受拜占庭欺压,却只有同一时间有6个以上国家进攻才有可能打败拜占庭帝国,非则一定战败。 难点在于:古时候军队之间的通信完全依赖于人,如果军队中有奸细,无论是将军反水还是传令官误传,都会是另外9个国家收到假消息,从而造成作战失败。如果你是国王,该如何判断一定会有另外5个以上国家与你并肩作战?毕竟一不小心,就亡国了。 由于类似于以上这样的问题存在,共识的必要性浮现出来。 九种共识机制比较 区块链上的共识机制有多种,但任何一种都不是完美无缺,或者说适用于所有应用场景的。 1. 工作量证明(POW) 工作量证明(Proof of Work,简称PoW)通常只能从结果证明,因为监测工作过程通常是繁琐且低效的。 比特币在区块的生成过程种使用了PoW机制,一个符合要求的区块哈希值由N个前导零构成,零的个数取决于网络的难度值。要得到合理的区块哈希值需要经过大量的尝试计算,计算时间取决于机器的哈希运算速度。当某个节点提供出一个合理的区块哈希值,说明该节点确实经过了大量的尝试计算,但是并不能得出计算次数,因为寻找合理的哈希值是一个概率事件。当节点拥有占全网n%的算力时,该节点既有n%的概率找到区块哈希值。 PoW依赖机器进行数学运算来获取记账权,资源消耗大、共识机制高、可监管性弱,同时每次达成共识需要全网共同参与运算,性能效率比较低,容错性方便允许全网50%节点出错。 PoW的优点:完全去中心化,节点自由进出。 PoW的缺点:目前比特币已经吸引全球大部分的算力,其他再使用PoW共识机制的区块链应用很难获得相同的算力来保障自身安全;挖矿造成大量的资源浪费;共识达成的周期较长。 使用PoW的项目有:比特币、以太坊的前三个阶段(Frontier前沿、Homestead家园、Metropolis大都会)。以太坊的第四个阶段 Serenity宁静 将采用权益证明机制(POS)。 2. 权益证明(P0S) 权益证明(Proof of Stake,简称PoS)由Quantum Mechanic 2011年在比特币论坛讲座上首先提出,后经Peercoin(点点币)和NXT(未来币)以不同思路实现。 PoS的主要理念是节点记账权的获得难度与节点持有的权益成反比,相比PoW,其在一定程度上减少了数学运算带来的资源消耗,性能也得到了相应的提升,但依然是基于哈希运算,竞争获取记账权的方式,可监管性弱。该共识机制的容错性和PoW相同。它是PoW的一种升级,根据每个节点所占代币的比例和时间,等比例地降低挖矿难度,从而加快找到随机数的速度。 在PoW中,一个用户可能拿1000美元来购买计算机,并加入网络来挖矿以此产生新区块,从而得到奖励。而在PoS中,用户可以拿1000美元购买等价的代币,并把这些代币当作押金放入PoS机制中,这样用户就有机会产生新区块而得到奖励。 总体而言,这个系统中存在一个持币人的集合,他们把手中的代币放入PoS机制中,这样他们就变成验证者。比如对区块链最前面的一个区块而言,PoS算法在验证者中随机选择一个(选择验证者的权重依据他们投入的代币量,比如一个投入押金为1W代币的验证者被选择的概率是一个投入1K代币验证者的10倍),给他权利产生下一个区块。如果在一定时间内,这个验证者没有产生一个区块,则选出第二个验证者代替产生新区块。与PoW一样,PoS以最长的链为准。 随着规模经济(指扩大生产规模引起经济效益增加的现象)的消失,中心化所带来的风险减小了。价值1000万美元的代币带来的回报不多不少,是价值100万美元代币的10倍,不会有人因为负担得起大规模生产工具而得不到成比例的额外回报。 PoS的优点:在一定程度上缩短了共识达成的时间;不再需要大量消耗能源去挖矿。 PoS的缺点:还是需要挖矿,本质上没有解决商业应用的痛点;所有的确认都只是一个概率上的表达,而不是一个确定性的事情,理论上有可能存在其他攻击影响,例如以太坊的DAO攻击事件造成以太坊硬分叉,而ETC随之出现,事实上证明了此次硬分叉的失败。 3. 股份授权证明(DPOS) BitShares(比特股)社区首先提出了股份授权证明(简称DPoS)机制,它与PoS的主要区别在于节点选举若干代理人,由代理人验证和记账,但其合规监管、性能、资源消耗和容错性与PoS相似。类似于董事会投票,持币者投出一定数量的节点,进行代理验证和记账。 DPoS的工作原理如下:每个股东按其持股比例拥有相应的影响力,51%股东投票的结果将是不可逆且有约束力的,其挑战是通过及时而高效的方法达到“51%批准”; 为了达到这个目标,每个股东可以将其投票授予一名代表。获票数最多的前100位代表按既定时间表轮流产生区块。每位代表分配到一个时间段来生产区块。 所有的代表将收到等同于一个平均水平的区块所含交易费的10%作为报酬。如果一个平均水平的区块用100股作为交易费,一位代表将获得一股作为报酬。 网络延迟有可能使某些代表没能及时广播他们的区块,而这将导致区块链分叉。然而,这不太可能发生,因为制造该区块的代表可以与制造该区块前后的区块的代表建立直接连接。建立这种与你之后的代表(也许也包括其后的那名代表)的直接连接是为了确保你能得到报酬。 DPoS的投票模式可以每30秒产生一个新区块,并且在正常的网络条件下,区块链分叉的可能性极其小,即使发生也可以在几分钟内得到解决。执行该模式的基本步骤如下: 成为代表。成为一位代表,你必须在网络上注册你的公钥,并获得一个32位的特有标识符。该标识符会被每笔交易数据的“头部”引用。 授权投票。每个钱包有一个参数设置窗口,在该窗口里用户可以选择一位或更多的代表,并将其分级。一经设定,用户所做的每笔交易将把选票从“输入代表”转移至“输出代表”。一般情况下,用户不会创建专门以投票为目的的交易,因为那将耗费他们一笔交易费。但是在紧急情况下,某些用户可能觉得通过支付费用这一更积极的方式来改变他们的投票是值得的。 保持代表忠诚。每个钱包将显示一个状态指示器,让用户知道他们的代表表现如何。如果他们错过了太多的区块,那么系统将会推荐用户更换一位新的代表。如果任何代表被发现签发了一个无效的区块,那么所有标准钱包将在每个钱包进行更多交易前要求选出一位新代表。 抵抗攻击。在抵抗攻击上,前100位代表所获得的权利是相同的,即每位代表都有一项平等的投票权,因此,无法通过获得超过1%的选票而将权利集中到单一代表上。由于只有100位代表,不难想象一个攻击者可以对每位轮到其生产区块的代表依次进行拒绝服务攻击。幸运的是,由于每位代表的标识是其公钥而非IP地址,这种特定攻击的威胁很容易被减轻。这将使确定DDoS(分布式拒绝服务)攻击目标更为困难。而代表之间的潜在连接将使妨碍他们生产区块变得更为困难。 DPoS的优点:大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证。 DPoS的缺点:整个共识机制还是依赖于代币,而很多商业应用是不需要代币的。 4. 投注共识 投注共识是以太坊下一代的共识机制Casper(鬼马小精灵)引入的一个全新概念,属于PoS。Casper的共识是按区块达成的,而不像PoS那样按链达成。 为了防止验证人在不同的世界中提供不同的投注,我们还有一个简单严格的条款:如果你两次的投注序号一样,或者说你提交了一个无法让Casper依照合约处理的投注,你将失去所有保证金。从这一点我们可以看出,Casper与传统的PoS不同的是,Casper有惩罚机制,这样非法节点通过恶意攻击网络不仅得不到交易费,而且还面临着保证金被没收的风险。 Casper协议下的验证人需要完成出块和投注两个活动。具体如下: 出块是一个独立于其他所有时间而发生的过程,验证人收集交易,当轮到他们的出块时间时,他们就制造一个区块,并签名,然后发送到网络上。投注的过程更为复杂一些,目前Casper默认的验证人策略被设计为模仿传统的拜占庭容错共识:观察其他的验证人如何投注,取33%处的值,向0或1进一步移动。 而客户端确认当前状态的过程是这样的:一开始先下载所有的区块和投注,然后用上面的算法来形成自己的意见,但是不公布意见;它只是简单地按顺序在每个高度进行观察,如果一个区块的概率高于0.5就处理它,否则就跳过它。在处理所有的区块之后,所得到的状态就可以显示为区块链的“当前状态”。客户端还可以给出对于“最终确定”的主观看法:如果高度k之前的每个区块形成的意见高于99.999%或者低于0.001%,那么客户端可以认为前k个区块已经最终确定。 5. 瑞波共识机制(Ripple Consensus) 瑞波共识算法使一组节点能够基于特殊节点列表形成共识。初始特殊节点列表就像一个俱乐部,要接纳一个新成员,必须由该俱乐部51%的会员投票通过。共识遵循这些核心成员的“51%权利”,外部人员则没有影响力。由于该俱乐部由中心化开始,它将一直是中心化的,而如果它开始腐化,股东们什么也做不了。与比特币及Peercoin一样,瑞波系统将股东们与其投票权隔开,因此,它比其他系统更中心化。 6. Pool验证池 基于传统的分布式一致性技术以及数据验证机制,Pool(联营)验证池是目前行业内大范围使用的共识机制。它的优缺点如下: 优点:不需要代币也可以工作,在成熟的分布式一致性算法(Paxos、Raft)的基础上,实现秒级共识验证。 缺点:去中心化程度不如比特币,更适合多方参与的多中心商业模式。 7. 实用拜占庭容错 在分布式计算上,不同的计算机通过信息交换尝试达成共识,但有时候,系统中的协调计算机或者成员计算机可能因系统错误,而交换错误信息,以致影响最终的系统一致性。对于拜占庭将军问题,若根据错误计算机的数量,寻找可能的解决办法,这其实无法找到一个绝对的答案,只可以用来验证一个机制的有效程度。 而拜占庭将军问题的可能解决方法为:在N≥3F+1的情况下,一致性是可能实现的(N为计算机总数,F为有问题的计算机总数)。信息在计算机间互相交换后,各计算机列出所有得到的信息,以大多数的结果作为解决办法。 最早由卡斯特罗和利斯科夫在1999年提出的使用拜占庭容错(PBFT)是第一个得到广泛应用的拜占庭算法。只要系统中有2/3的节点是正常工作的,就可以保证一致性。 使用拜占庭容错算法的总体过程如下:客户端向主节点发送请求调用服务操作,如“<REQUEST,o,t,c>”,这里客户端c请求执行操作o,时间戳t用来保证客户端请求只会执行一次。每个由副本节点发给客户端的消息都包含了当前的视图编号,使得客户端能够追踪视图编号,从而进一步推算出当前主节点的编号。客户端通过点对点消息向它自己认为的主节点发送请求,然后主节点自动将该请求向所有备份节点进行广播。 视图编号是连续编号的整数,主节点由公式p=v mod |R|计算得到,这里v是视图编号,p是副本编号,|R|是副本集合的个数。 副本发给客户单的响应为“<REPLY,v,t,c,i,r>”,v是视图编号,t是时间戳,i是副本的编号,r是请求执行的结果。 主节点通过广播将请求发送给其他副本,然后就开始执行三个阶段的任务。 预准备阶段。主节点分配一个序列号n给收到的请求,然后向所有备份节点群发预准备消息,预准备消息格式为“<<PRE-PREPARE, v, n, d>, m>”,这里v是视图编号,m是客户端发送的请求消息,d是请求消息m的摘要。 准备阶段。如果备份节点i接受了预准备消息,则进入准备阶段。在准备的同时,该节点向所有副本节点发送准备消息“<PREPARE, v, n, d, i>”,并且将预准备消息和准备消息写入自己的消息日志。 确认阶段。当“(m, v, n, i)”条件为真的时候,副本i将“<COMMIT, v, n, D(m), i>”向其他副本节点广播,于是就进入了确认阶段。所有副本都执行请求并将结果发回客户端。客户端需要等待不同副本节点发回相同的结果,作为整个操作的最终结果。…
\n \n \n \n股份授权证明机制,简称DPoS,类似于董事会投票,持币者投出一定数量的节点,代理他们进行验证和记账。为了激励更多人参与竞选,系统会生成少量代币作为奖励。比特股、点点币等数字资产都采用该方式。DPoS有点像议会制度或人民代表大会制度。如果代表不能履行他们的职责,比如轮到他们记账时,他们没能完成则会被除名,网络会选出新的节点来取代他们。DPoS的每个客户端都有能力决定哪些节点可以被信任。相较PoW(工作量证明机制),DPoS大幅提高区块链处理数据的能力,甚至可以实现秒到账,同时也大幅降低维护区块链网络安全的费用,从而使数字资产的交易速度接近Visa等中心化结算系统。
区块链技术是近几年逐渐变得非常热门的技术,以比特币为首的密码货币其实已经被无数人所知晓,但是却很少有人会去研究它们的底层技术,也就是作为一个分布式网络比特币等加密货币是如何工作的。 无论是 Bitcoin、Ethereum 还是 EOS,作为一个分布式网络,首先需要解决分布式一致性的问题,也就是所有的节点如何对同一个提案或者值达成共识,这一问题在一个所有节点都是可以被信任的分布式集群中都是一个比较难以解决的问题,更不用说在复杂的区块链网络中了。 分布式一致性 在一个分布式系统中,如何保证集群中所有节点中的数据完全相同并且能够对某个提案(Proposal)达成一致是分布式系统正常工作的核心问题,而共识算法就是用来保证分布式系统一致性的方法。 然而分布式系统由于引入了多个节点,所以系统中会出现各种非常复杂的情况;随着节点数量的增加,节点失效、故障或者宕机就变成了一件非常常见的事情,解决分布式系统中的各种边界条件和意外情况也增加了解决分布式一致性问题的难度。 在一个分布式系统中,除了节点的失效是会导致一致性不容易达成的主要原因之外,节点之间的网络通信收到干扰甚至阻断以及分布式系统的运行速度的差异都是解决分布式系统一致性所面临的难题。 CAP 在 1998 年的秋天,加州伯克利大学的教授 Eric Brewer 第一次发布了 CAP 理论,在 1999 年论文 Brewer’s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services 正式发布,其中总结了 Eric Brewer 提出的 CAP 理论。 这篇论文证明了两个非常有意思的理论,首先是在异步的网络模型中,所有的节点由于没有时钟仅仅能根据接收到的消息作出判断,这时完全不能同时保证一致性、可用性和分区容错性,每一个系统只能在这三种特性中选择两种。 不过这里讨论的一致性其实都是强一致性,也就是所有节点接收到同样的操作时会按照完全相同的顺序执行,被一个节点提交的更新操作会立刻反映在其他通过异步或部分同步网络连接的节点上,如果想要同时满足一致性和分区容错性,在异步的网络中,我们只能中心化存储所有数据,通过其他节点将请求路由给中心节点达到这两个目的。 但是在现实世界中其实并不存在绝对异步的网络环境,如果我们允许每一个节点拥有自己的时钟,这些时钟虽然有着完全不同的时间,但是它们的更新频率是完全相同的,所以我们可以通过时钟得知接收消息的间隔时间,在这种更宽松的前提下,我们能够得到更强大的服务。 然而在部分同步的网络环境中,我们仍然没有办法同时保证一致性、可用性和分区容错性,证明的过程其实非常简单,可以直接阅读 论文 的 4.2 节,然而时钟的出现能够让我们知道当前消息有多久没有得到回应,通过超时时间就能在一定程度上解决信息丢失的问题。 由于网络一定会存在延时,所以没有办法在分布式系统中做到强一致性的同时保证可用性,不过我们可以通过降低对一致性的要求,在一致性和可用性之间做出权衡,而这其实也是设计分布式系统首先需要考虑的问题,由于强一致性的系统会导致系统的可用性降低,仅仅将接受请求的工作交给其他节点对于高并发的服务并不能解决问题,所以在目前主流的分布式系统中都选择最终一致性。 最终一致性允许多个节点的状态出现冲突,但是所有能够沟通的节点都能够在有限的时间内解决冲突,从不一致的状态恢复到一致,这里列出的两个条件比较重要,一是节点直接可以正常通信,二是冲突需要在有限的时间内解决,只有在这两个条件成立时才能达到最终一致性。 拜占庭将军问题 拜占庭将军问题是 Leslie Lamport 在 The Byzantine Generals Problem 论文中提出的分布式领域的容错问题,它是分布式领域中最复杂、最严格的容错模型。 在该模型下,系统不会对集群中的节点做任何的限制,它们可以向其他节点发送随机数据、错误数据,也可以选择不响应其他节点的请求,这些无法预测的行为使得容错这一问题变得更加复杂。 拜占庭将军问题描述了一个如下的场景,有一组将军分别指挥一部分军队,每一个将军都不知道其它将军是否是可靠的,也不知道其他将军传递的信息是否可靠,但是它们需要通过投票选择是否要进攻或者撤退: 在这一节中,黄色代表状态未知,绿色代表进攻,蓝色代表撤退,最后红色代表当前将军的信息不可靠。 在这时,无论将军是否可靠,只要所有的将军达成了统一的方案,选择进攻或者撤退其实就是没有任何问题的: 上述的情况不会对当前的战局有太多的影响,也不会造成损失,但是如果其中的一个将军告诉其中一部分将军选择进攻、另一部分选择撤退,就会出现非常严重的问题了。 由于将军的队伍中出了一个叛徒或者信息在传递的过程中被拦截,会导致一部分将军会选择进攻,剩下的一部分会选择撤退,它们都认为自己的选择是大多数人的选择,这时就出现了严重的不一致问题。 拜占庭将军问题是对分布式系统容错的最高要求,然而这不是日常工作中使用的大多数分布式系统中会面对的问题,我们遇到更多的还是节点故障宕机或者不响应等情况,这就大大简化了系统对容错的要求;不过类似 Bitcoin、Ethereum 等分布式系统确实需要考虑拜占庭容错的问题,我们会在下面介绍它们是如何解决的。 FLP FLP 不可能定理是分布式系统领域最重要的定理之一,它给出了一个非常重要的结论:在网络可靠并且存在节点失效的异步模型系统中,不存在一个可以解决一致性问题的确定性算法。 In this paper, we show the surprising result that no completely asynchronous consensus protocol can tolerate even a single unannounced process death. We do not consider Byzantine failures, and we assume…

关注我们的公众号

微信公众号