分布式系统中的容错形成区块链
时间:2019-02-20 12:07:18 阅读:97710次 分类:行业新闻
分布式系统是实现高可伸缩性,局部性和可用性的基本概念。但是,另一方面,从客户端查看时,整个系统需要很多原创才能看起来一致。另外,据说构建具有完整功能的分布式系统几乎是不可能的,并且有必要选择应用程序应该强调哪些属性。
除了描述这些分布式系统的特性外,我们还描述了具有高性能的区块链的特征。最后,通过总结容错属性,我们将进一步探索区块链的更大潜力,并希望通过讨论每个高级区块链项目(如Tendermint)来充分解释MOLD应该瞄准的系统。
1.简介(容错概述和整体流程)
与单个系统不同,分布式系统存在部分故障。单个系统的整体故障通常会导致整个系统崩溃。另一方面,在部分故障中,系统可以在从部分故障恢复的同时继续运行而不会严重影响整体性能。
在本文中,我们将按以下顺序解释容错;即使系统的一部分发生故障,系统也可以继续处理。
·什么样的属性是容错的
·什么样的失败以及如何归类
如何在分布式系统中实现容错
·关于沟通失败
·“可靠的多播”增加了过程的阻力
·关于分布式提交问题
2.什么是容错?
容错
容错定义如下
即使发生故障也能忍受服务
此外,具有容错性的系统有时被称为高可靠性系统,并且与可靠性系统相关的要求分为以下四种。
失败模型
分布式系统中进程的典型故障如下:
通信链路的故障也被分类。
例如,对于分布式故障,可能会发生虚假消息的传递,因此最难处理。
冗余可以隐藏故障。这很容易理解,例如考虑到哺乳动物有两只眼睛,耳朵和肺部。即使这些分布式器官中的一些失效,您也可以在隐藏故障的同时使用该系统。这称为物理冗余。冗余有三种类型:信息冗余,时间冗余和物理冗余。
3.流程灵活性
在描述容错之后,我们考虑如何实现容错。
流程复制
典型的方法是进程复制。在组中创建(复制)相同的进程称为复制。通过在分布式系统中复制,即使在部分故障的情况下,也可以通过正常过程提供服务。我们将复制过程称为副本。
有两种方法可以重用(复制)。
·主要基础协议(被动副本)
·重复写协议(PositiveReplication)
在前者中,只有主副本处理来自客户端的消息,而另一个副本备份主进程。尽管复制品之间的处理结果不一致并且更容易实现通信功能,但是主复制品的故障需要选择算法,并且处理有些复杂。
在后一种情况下,所有副本都从客户端接收和处理消息。此时,基于消息的处理需要总排序和原子性两个属性。因此,原子多播需要更复杂的通信功能。
kFault容忍度
在重复写入协议中,据说存在k个容错,即使它们失败,k个分量也可以正常移动。如果您有分布式故障,则至少需要2k + 1个进程才能具有k容错能力。
原子多播问题
作为上述复制模型的前提,存在所有请求必须以相同顺序到达所有服务器的条件。这称为原子多播问题。这将在第5章中详细讨论。
流程之间的协议
进程之间的协议问题对于为分布式系统提供容错至关重要。分布式协议算法的目的是在有限数量的步骤中达成共识以实现彼此之间不会失败的过程,并且在代表性过程中存在一般分布式问题。
分布式一般问题
在具有k个错误过程的系统中,仅当存在2k + 1个或更多个正常过程并且整体上存在N=< 3k + 1个过程时才达到协议。换句话说,只有超过三分之二的流程能够正常运作才能达成协议。 (如果小于此值,则可能因过程失败而受骗。)
附录:容错所需的正常节点数
对于许多协议,具有分布式阻塞的最大允许节点数称为1/3。原因将在下面简要描述。
设“N”为节点总数,“F”为分布式节点,“T”为正常共识所需的节点数。
例如,假设“N-F”的正常节点被分成相同的数字,并且数字如下。
(N-F)/2
由于“F”的分布式节点具有任意行为,为了正常达成共识,必须满足以下表达式。
T> (N-F)/2 + F···1
另外,考虑到F的所有分布式节点都是离线的,其他正常节点可以采用一致性,因此以下表达式成立。
N-F≥T···2
从1·2,
N-F> (N-F)/2 + F
∴F< N3
基于上述,当总节点中的分布式节点的数量小于1/3时,通常可以达到一致。
4.可靠的客户端 - 服务器通信
到目前为止,我们已经讨论了分布式系统中进程的容错能力并了解了复制。本章讨论在通信链路上引入容错。
P2P通信
分布式系统中的通信基础是将一个进程连接到另一个进程的对等通信(一对一通信)。
TCP
TCP:用于可靠通信的点对点通信
TCP具有序列号,定时器,校验和,确认,重传控制,拥塞控制等机制。例如,可以通过包括TCP序列号和基于确认的重传控制的确认来处理由于丢失消息而导致的遗漏失败。
失败时的RPC(远程过程调用)
RPC的目的是以本地过程调用的形式实现进程间通信,而无需了解通信部分。在使用RPC的分布式系统中可能会发生五个障碍。
1.客户端找不到服务器。
2.从客户端到服务器的请求消息将丢失。
3.服务器收到请求后崩溃。
4.从服务器到客户端的响应消息将丢失。
5.客户端发送请求消息后发生故障。
作为针对每个的对策,存在设置异常处理和计时器(时间限制)的方法。
5.可靠的团队沟通
我们在前一章重点介绍了一对一通信,因此我们在此解释一对多组播通信的高可靠性。在分布式系统中,重要的是在不泄漏的情况下发送消息,包括向彼此的服务器发送订单。
可靠的组播无故障
考虑按顺序向每个成员发送消息。
发送方首先将多播消息保存在手头的历史存储器中。此外,发送方从接收方接收传输确认通知(A高仿CK)。在A高仿CK中,最后一个消息标识符的输入和返回已完成。如果由于消息丢失等原因而无法接收包含预期标识符的A高仿CK,则发送方重新发送该消息。
确保来自发件人的邮件以相同的顺序传递到所有进程。
在分布式系统中,不是“过程”
具有“何时”发送方“在发送期间失败,传递给所有剩余进程或被忽略”的属性的可靠多播称为虚拟同步。
此外,虚拟同步并以整体顺序执行消息传递的通信称为原子多播。
Isis实现虚拟同步的一个例子。 Isis保留并转移mmessageM进行处理,直到它知道所有成员都收到了消息M.
6.分发提交
促进原子多播问题的问题称为分布式提交。
原子提交
有必要在最后判断是否始终提交或暂停不同类似网站的流程。这种类型的操作称为原子提交。
6-1。两阶段提交协议(2PC)
两阶段提交协议(2PC)是实现原子提交的典型方法。顾名思义,每个阶段包括两个步骤,组织如下。
(第1阶段[投票阶段])
组织者向所有参与者发送VOTE_REQUEST消息
2.收到VOTE_REQUEST消息的参与者如果能够提交交易并通过发送VOTE_ABORT消息进行投票(如果需要中止),则会向组织者发送VOTE_COMMT消息。
(第2阶段[提交阶段])
3.主办方收集所有参与者的投票。如果所有投票都是COMMIT,我们承诺并向所有参与者发送GLOBAL_COMMIT消息。如果有多个ABORT,它决定中止事务并发送GLOBAL_ABORT消息。
4.参与者等待来自组织者的消息,如果它是GLOBAL_COMMIT本地则提交,如果是GLOBAL_ABORT则丢弃该事务。
在整个过程中,组织者和参与者执行以下状态转换。
阻止提交协议
上述两阶段提交协议存在很大问题。当组织者在第3阶段失败并且所有参与者都在等待来自组织者的消息时。参与者不能合作确定最终应采取的行动决定。因此,两阶段提交被称为阻止提交协议。
事实上,在两阶段提交中很少发生阻塞,因此它没有被大量使用,但是三阶段提交协议被设计为避免阻塞的解决方案。
6-2。三阶段提交
与两阶段提交协议不同,三阶段提交协议满足以下两个条件。 [Skeen和Stonebraker,1983]指出这两个条件对于非阻塞提交协议是必要和充分的。
1.没有直接访问COMMIT状态或ABORT状态。
2.无法做出最终决定或过渡到COMMIT状态。
SKEEN,D.andSTONEBRAKER,M“AFormalModelofCrashRecoveryinaDistributedSystem。” IEEE Trans.Softw.Eng。,1983年3月
具体地,PRECOMMIT状态在两阶段提交的两个阶段之间提供。
整个参与者和组织者改变了状态如下。
两阶段提交之间的最大区别是所有进程都返回INIT,ABORT和PRECOMMIT状态。由于它永远不会处于READY状态,因此剩余的进程总是做出最终决定,并且可以充当非阻塞协议。
三阶段提交只是一个概念表示,即使组织者失败,也没有正常工作的机制。然而,在区块链出现后,其历史将发生很大变化。 Tendermint项目通过在区块链中使用三阶段提交来实现非阻塞协议。
7.区块链中的容错性
最后,基于上述内容,我们还将参考分布式区块链系统中的容错。
7-1。区块链容错
区块链具有高度容错能力。让我们根据第2章中分类的四个可靠性要求,仔细研究区块链的性质。
停止运行的区块链系统的时间和数量很少。特别是在比特币网络中,可以说高可用性和可靠性非常低,因为即使某些节点发生故障,也可以实现零停机并继续正常运行。
接下来,关于安全性,当系统在区块链网络中不能正常工作时,会出现“事务未处理和阻塞”,“网络中的信息不共享信息和分叉分区”类问题。后者很可能会造成重大麻烦。
关于可维护性,可以说社区很容易划分,比如像比特币这样的公共区块链,很难从中恢复。比特币网络受到高度赞赏,因为它们具有高可用性和可靠性,因此无需恢复,但如果您希望可维护,则应考虑选择私有链或联合链。
此外,区块链非常有意义,因为它为分布式故障提供了有效的解决方案,这被认为是最难处理的。具体而言,它是由PoW等代表的相干算法......通过形成激励结构来处理分布的一般问题;矿工通过维持/贡献而不是基于博弈论破坏网络来获得更多利润。算法。应该指出的是,诸如硬叉之类的新问题正在发生,然而,可以说它已经取得了一些成功。另外,
Hyperledger采用的PBFT还通过设置领导节点来确认投票,从而实现高分布式容错。
7-2 .Blcokchain流程的灵活性
考虑如何在容错描述后实现容错。
首先,有两种方法可以处理复制。
1.主要的基础协议
2.重复写协议
使用1的主基础协议的主协议是基于PoW一致性算法的区块链。在PoW的情况下,它是主基中的本地写协议的规范。成功找到PoW的nonce值作为独占控件(领导者选择算法)的矿工获得了将块添加为主服务器的权利。但是,当有权成为主服务器的节点同时出现时,区块链将分叉。
另一方面,2的重复写协议是基于PBFT的区块链。各种基于PBFT的共识算法(包括Tendermint)没有主服务器首先负责执行每个数据的更新,并且所有参与节点可以同时执行写操作。也就是说,可以说PBFT类型一致性协议类似于重复写入类型的主动拷贝协议。
7-3。区块链高可靠性通信
我已经提到了区块链过程,但这次我将重点关注通信链接。
在区块链中,参与网络的每个节点执行P2P通信并共享数据。另外,由领导者选择算法选择的主服务器执行多播,例如,当找到随机数时,将新添加的块的信息共享给每个参与节点。此时,考虑到在通信链路或节点中发生故障的情况,重要的是实现原子多播,其是虚拟同步并且以整体顺序执行消息传递。
那么,区块链中的原子多播问题和分布式提交问题是如何解决的?
在像比特币这样的PoW公共链中,原子组播尚未实现。因此,可能会发生频繁的货叉。由于每个节点随时间正确共享数据,因此建立了一致性,但确认事务存储在块中需要10分钟以上。
在这里,我们应该注意Tendermint一致性算法。通常,存在2PC(两阶段提交)作为实现原子提交的方法,并且已经提出了作为改进版本的3PC方法,但两者都是不完整的。因此,Tendermint通过将区块链与3PC方法混合并在循环方法下的节点上添加约束来实现原子提交。下一章将解释这种创新的分布式提交问题的方法。
7-4。 Tendermint分布式提交(创新三阶段提交模型)
首先,Tendermint是PBFT类型。在Hyperledger中,作为领导者的验证者始终是相同的过程,但Tendermint具有领导者选择算法,并通过循环方法确定性地确定领导者。领导者共同提出存储在mempool中的下一个事务块。通过此提议,Tendermint Consensus实施了3PC(三阶段提交)并实施了原子多播。 Tendermint一致性算法可以大致分为三种状态。
1.提议
基于基于基于领导的选择算法基于桩数通过循环方法确定性地选择的一组验证者的提议。在这种状态下开始投票。
2.预先投票
拟议区块的第一次投票。一旦我们获得三分之二或更多的批准,我们将继续进行下一步,但要等到收集所有选票的时间限制。由于这个时间限制,可以说Tendermint是一种部分异步一致性算法。此外,投票算法具有1/3k的容错能力。
3.预先承诺
超过2/3的投票前同意第二次投票。此时,如下所述,Tendermint的智能部分是未收集2/3或更多票数的衡量标准。
如前所述,通过为三阶段提交设置PRECOMMIT阶段,如果满足以下条件,则可以实现阻塞协议。
1.没有状态直接转换为COMMIT状态或ABORT状态
2.无法做出最终决定或过渡到COMMIT状态。
在Tendermint中,在第二个投票阶段投票的核查员预先提交被锁定,并且只能在投票前投票超过锁定块数或块数的2/3。通过锁定过程,满足上述两个条件。换句话说,由于每个验证器只能在预提交中对块进行投票,因此它不实现fork机制。
换句话说,“Tendermint的共识是确保在网络中的所有节点上完成添加块的操作,或者根本不完成任何节点;实现最终结果的下一代共识协议。
芜湖广丰软件有限公司(原中江网络),成立于2005年,经过10多年定制开发经验,积累了大量技术储备和定制开发经验,是一家集软件研发、互联网应用为一体的综合信息技术服务提供商。公司拥有核心的策划团队和专业的技术研发团队,致力于采用领先的信息技术,长期为涉及智慧园区/厂区/校园领域的各个企业提供快速、高效、安全的信息技术支持。公司立足智慧园区和智慧教育行业,通过软硬件的研发和互联网应用,疏通各企业间“端到端”的信息传输,灵活满足智慧园区和智慧教育企业间不同用户的需求,为其提供完善的信息化解决方案。
园区管理系统,提供智慧园区综合管理系统,智慧园区设计方案咨询,智慧园区管理系统、...