开放科学(资源服务)标志码(OSID):
随着比特币等数字加密货币的日益普及,区块链正逐渐成为一种新的去中心化基础架构和分布式计算范式[1]。目前,区块链已经引起了政府部门、互联网企业和金融机构的广泛关注和高度重视[2],其去中心化、公开透明、共同维护、时序性、可编程等特点,除了适合构建可编程的金融系统和货币系统之外,还能为中心化机构存在的数据存储不安全、低效率、高成本等问题提供解决方案[3-5]。共识算法是区块链技术的核心要素,也是近年来分布式系统研究的热点,其主要作用是解决拜占庭将军问题,也是确保分布式系统各节点数据一致性的关键,直接影响着区块链的交易处理能力、可扩展性和安全性[6-7]。
在目前常用的共识算法中,较为经典的算法有PoW[8]、PoS[9]、Paxos[10]、Raft[11]、PBFT[12]等。不同算法都有各自的特点和优势,其中,实用拜占庭容错算法(Practical Byzantine Fault Tolerance,PBFT)算法由于能够解决拜占庭问题且相对高效而被广泛应用。但由于PBFT算法通信开销高,吞吐量和性能较低,且采用的是C/S架构,不能适应P2P网络,无法动态感知节点数目的变化[13-14],因而其应用受到了诸多的限制。许多学者在共识策略[15-17]、一致性协议[18-19]、方法创新[20-21]、区块链结构[22]等方面对PBFT算法进行了改进,以期使算法具有更高的动态性和更低的时延。但该算法应用于一些交易量和信息量大的领域时,仍存在共识时延高、动态性差、吞吐量、性能较低等问题,因此,设计一个低时延、高效率、高吞吐量的共识算法,是亟待解决的问题。
本文针对PBFT算法存在的不足,提出一种基于备选投票机制的低时延共识算法PBFT,通过引入候补节点集合和投票选举机制,降低算法达成共识所需的时延,提高算法的吞吐量和动态性。
1 实用拜占庭容错算法PBFT算法由CASTRO和LISKOV于1999年提出,该算法主要针对系统中存在的作恶节点向系统中的其他节点发送错误消息,扰乱整个系统正常运行的问题,从根本上解决了拜占庭问题,并将拜占庭容错算法复杂度从指数级降低到了多项式级O(N2)。实用拜占庭算法在保证系统安全性和可靠性的前提下提供了(n-1)/3的容错性,即允许系统有不多于1/3的节点失效或者作恶。
PBFT共识算法要求节点共同维护一个状态,所有节点采取的行动一致。因此,需要运行3类基本协议,即一致性协议、检查点协议和视图更换协议。一致性协议主要通过共识过程中的预准备、准备和确认3个阶段来保证全网节点保存数据的一致性。若在共识过程中主节点在一段时间内都不能完成客户端的请求或某节点检测出主节点作恶或宕机,则会触发视图更换协议以更换出现故障的主节点。周期性地检查点协议则是将系统中的服务器同步到某一个相同的状态,系统会设置一个checkpoint的时间点,在这个时刻可以定期地处理日志、节约资源并及时纠正服务器状态。
1.1 PBFT算法的一致性协议PBFT算法的一致性协议是该算法的核心部分,能够保证各节点数据的一致性。如图 1所示,其中,副本0是主节点,副本3是失效节点,c是客户端。
![]() |
Download:
|
图 1 PBFT算法共识过程 Fig. 1 Consensus process of PBFT algorithm |
PBFT算法具体流程如下:
1)客户端发起消息请求
客户端c向主节点0发送消息请求,格式为:
$ <{\mathrm{REQUEST,o,t,c}}> $ | (1) |
其中,REQUEST为消息名称,o为请求的具体操作,t为请求时客户端追加的时间戳,c为客户端标识。
2)预准备阶段
主节点会发起对应的预准备消息给网络中的副本节点,预准备消息包头结构体定义为:
$ <<{\mathrm{PRE-PREPARE}}, v, n, \mathrm{d}>, \mathrm{m}> $ | (2) |
其中,PRE-PREPARE为消息名称,v为视图编号,d为信息摘要,n为节点编号,m为客户端发送的消息。若通过验证,副本节点会确认预准备消息进入到准备阶段。
3)准备阶段
副本节点i向所有副本节点发送准备消息:
$ <{\mathrm{PREPARE}}, v, n, \mathrm{d}, i> $ | (3) |
若节点i收到了超过2f+1个不同共识节点的PRE-PREPARE和PREPARE消息并验证通过,将进入确认阶段。
4)确认阶段
进入确认阶段后的节点向其他副本节点广播确认消息 < COMMIT,v,n,D(m),i > ,其中,D(m)为副本节点签名集合。所有的副本节点会对接收的广播消息进行验证,当节点i接收到2f+1个确认消息并满足相应条件后,则代表式(4)成立,此时每个副本节点向客户端发送回复,进入回复阶段。
$ {\mathrm{committed}}(\mathrm{m}, v, n) $ | (4) |
5)回复阶段
当算法进入到回复阶段时,共识集合中的节点i会给一个最终的反馈消息给客户端,消息格式定义为:
$ <{\mathrm{REPLY}}, v, t, \mathrm{c}, i, \mathrm{r}> $ | (5) |
其中,REPLY为消息名称,v为视图编号,t为时间戳,c是客户端,i是节点编号,r是节点i的回复。
若客户端收到f+1个相同的REPLY消息,则说明客户端发起的请求已经达成全网共识。
1.2 PBFT算法的视图切换协议若某个副本节点i检测出主节点拜占庭错误或者宕机时,则启动视图切换协议,将视图编号v变更为v+1,同时不再接受除检查点(checkpoint)、视图切换(view-change)和新视图(new-view)外的其他消息请求。
此时,副本节点i会向其他节点广播视图更换消息:
$ <{\mathrm{VIEW-CHANGE}}, v+1, n, C, P, i> $ | (6) |
其中,VIEW-CHANGE为消息名称,v为视图编号,n是检查点编号,C是检查点消息集合,i是节点编号,P是当前副本节点未完成请求的PRE-PREPARE和PREPARE消息集合。
通过公式p=v mod |R|计算得到主节点p(R为主节点的编号),当主节点p收到2f个来自其他副本节点的有效的视图更换消息后,节点p向其他副本节点广播新视图消息 < NEW-VIEW,v+1,V,O > ,其中,V是节点接收到的视图更换消息,O为主节点重新发起的未完成的预准备消息。当副本节点收到主节点的新视图消息后,若验证通过,进入v+1视图开始O中的预准备处理流程。
1.3 PBFT算法的优点与不足实用拜占庭算法PBFT是解决拜占庭将军问题的算法,能够针对性地解决共识当中出现的拜占庭问题,同时算法允许不超过1/3的作恶节点存在,在节点数适中的情况下可以高效地完成共识。对于一些以企业、政府为代表的联盟链来说,PBFT共识算法是较好的选择,但是该算法在目前的区块链技术中仍然存在以下不足:
1)视图切换协议的不足
在主节点出现拜占庭节点的情景下,实用拜占庭共识算法PBFT必须进行算法的视图切换,但是,算法在视图切换过程中,对于当前区块链中已有的签名区块的数量,即区块高度的变量没有加以考虑,这样就会使得在共识超时情况下视图切换效率低下,直接导致算法在实际情况中的网络通信开销加大,增加了系统的数据交换开销,同时也失去了视图切换时的随机性,这对于算法性能是有影响的。
2)区块链共识节点动态性支持不够
在区块链分布式系统中,所有共识节点的行为通常都是随机的、动态的,在区块链网络中有加入也有退出。原始的实用拜占庭容错算法,在最初设计时主要是为了解决拜占庭将军问题,对于节点动态变化的问题并没有考虑得很周到,因此,算法无法支持节点动态加入或退出网络,这样容易导致在节点出现变化后无法快速进行处理,以及拜占庭的节点无法及时替换的问题。
2 PBFT算法改进针对原始PBFT算法的不足,本文提出一种低时延的共识算法IPBFT。首先增设候补集合节点,用于选举产生新的备用主节点,并对视图切换协议进行优化,在提高共识效率的同时实现节点的动态增删;然后将算法的主节点选取方式改进为投票选举机制,优化主节点选取机制,在提高视图切换效率的基础上同时减少拜占庭节点的数量,从而提高系统效率。
2.1 改进思路与符号表示本文按照图 2所示的优化流程对PBFT算法进行改进。
![]() |
Download:
|
图 2 PBFT算法优化流程 Fig. 2 Optimization procedure of PBFT algorithm |
1)以R1表示共识集合,以R2表示候补集合,定义R1集合为:
$ {R}_{1}\ge 3f+1 $ | (7) |
其中,R1表示共识集合总节点数,f表示共识结合中最多的拜占庭错误节点数。R1的节点数量根据实际应用系统中错误节点的数量而定。
候补集合中包括了从共识集合中出现拜占庭错误的替换节点和区块链系统中新加入的节点,在算法中,定义R2集合为:
$ {R}_{2}\ge f $ | (8) |
同理,R2的节点数量根据实际应用系统中错误节点的数量而定。
2)当首次共识开始时定义一个值v1,与视图编号v不同,v1用于视图切换时主节点的选取,其初始值设置为:
$ {v}_{1}=v $ | (9) |
其中,v是首次共识的视图编号数值,且每当视图成功切换一次,v1都相应的增加1,表示视图已切换。
3)当主节点发生拜占庭错误时,考虑到主节点选取的随机性和恶意节点的不可重复性,IPBFT算法在主节点选取的定义中增加了一个区块高度参数h,计算公式为:
$ P=\left(\left.h+{v}_{1}\right)\right.{\mathrm{mod}}\ {R}_{2} $ | (10) |
为提高视图切换的效率,规定主节点的选取在候补集合中进行,因此,主节点p的选取与R2有关。该公式结合投票选举的机制避免了拜占庭节点重复当选为主节点,同时公式的随机性也能够更好地使算法支持节点的动态性。
2.2 具体改进对PBFT算法的改进包括增设候补集合和加入投票选举机制两个方面。
1)通过增设候补集合以实现节点的动态变化。
(1)将所有的节点分为两个节点集合:一个是共识节点集合,集合功能为参加区块链中的共识过程;另一个是候补节点集合,若共识集合中主节点拜占庭或有节点退出,则由候补集合中选出的信任节点替换上,在实现节点动态替换的同时减小替换所需的时延。共识集合中的拜占庭错误节点,也将会被淘汰进入到候补节点集合中,信任节点的选取方式使用的是基于投票的选举机制。
(2)优化视图切换协议以简化共识过程。
① IPBFT算法对视图切换协议进行了优化,当主节点发生拜占庭错误时,算法会丢弃未完成的共识提案历史信息,重新选取主节点,并提醒客户端发送与未完成提案相同的请求,然后进行共识。由于视图切换后会丢弃未完成的消息提案重新开始共识,一方面可以省去新主节点向其余节点广播新视图消息NEW-VIEW、收集之前未完成的预准备和准备消息的共识过程,可减少一部分网络开销,另一方面还能保证主节点广播的消息顺序正确。
② 视图切换完成后,将共识节点所处的视图编号v初始化为0,v1数值增加1,从而保证即使出现视图切换,消息依然能在保证视图编号一致的基础上进行广播共识而不影响候补集合进行下一个备用主节点的选取。
③ 共识过程中确认阶段的作用,一方面是为了保证视图消息顺序和视图编号一致,另一方面是防止主节点出错而导致产生的集群状态不一致。IPBFT算法首先可以保证在视图切换完成后,所有共识节点所处的视图编号和收到广播的消息顺序一致,其次可保证新的主节点为候补集合中节点所信任的非作恶节点,作恶的概率非常小。在这样的双重保障下,IPBFT算法可以优化掉确认阶段的共识过程,共识过程由三阶段共识变成了两阶段,从而优化掉确认阶段的通信,提高整个共识达成的效率,减少系统的通信开销。IPBFT算法的共识过程如图 3所示。
![]() |
Download:
|
图 3 IPBFT共识过程 Fig. 3 Consensus process of IPBFT algorithm |
其中,4表示候补集合选举出的信任节点,等待视图切换时将拜占庭节点替换下来,除此之外不做任何操作。
2)加入投票选举机制。
(1)投票选举整体思想及原理
IPBFT共识算法使用基于投票的选举机制作为主节点的选取方式,在共识集合中,当主节点出现拜占庭错误或有节点退出时,算法将共识集合中的相应节点替换掉,使用候补集合中通过选举机制产生的新节点作为候补节点补增到共识集合节点中。
为提高节点替换的效率,候补集合的选举和共识集合的共识同时进行,即在共识集合正常运行的情况下,候补集合先将下一次视图切换所需要的信任节点选举出来,当共识集合的主节点出现错误时不再进行传统的视图切换过程,而是直接对备用的主节点进行替换,从而减少视图切换时的通信次数。
节点替换完成后,在候补集合内再进行下一次的节点选举,替换下来的拜占庭节点也会一直处于候补集合中,并且被选举为主节点的概率极低;同时,当有节点进入时,首先进入候补集合,节点进入或退出时算法会增加或删除他的投票权。投票选举原理如图 4所示。
![]() |
Download:
|
图 4 投票选举原理 Fig. 4 Voting principle |
IPBFT算法首先实现候补集合与共识集合的联动同步过程,当共识集合的共识过程发生视图切换时,通过消息的广播,同步地通知到候补集合,其次候补集合将广播投票选举的消息,用于共识集合中节点的动态替换。
(2)投票选举流程分析
步骤1 候补集合的节点保持与共识集合的心跳,当共识集合中的主节点出现拜占庭错误或有节点退出时,立即在候补集合内广播节点替换的消息,将选举好的信任节点替换到共识集合,在视图切换完成后进行下一次选举行为。
步骤2 通过P=(h+v1)mod|R1|选出下一个节点候选人,参与选举的节点向其他所有节点发出参与选举的消息,同时通知集合中所有节点,自己将参与选举;如果该节点非当前共识集合中所需要的节点,则该节点自动放弃,重新选举下一个节点候选人。
步骤3 在所有的节点收到该通知消息后,如果同意,则会选举该节点作为获选人;如果不同意,则可以反对,同时也能投票给本身节点;如果一个参选节点同意票选的数量大于或者等于R2/2+1个,则成功获得称为获选人资格。
步骤4 为避免选举算法出现特定情况下的恶性循环选举而最终影响选举的进度,算法规定了每个参选节点不同的唯一超时值。既然超时值是唯一的,那么所有的参选节点发起投票的行为将会成为顺序发起的行为,这样能有效地避免出现所有节点都得票不通过半的情况,节点分先后,最终会有一个唯一的节点获得获选人资格,并作为代表被放入到共识集合节点中,此时投票选举结束。IPBFT算法选举流程如图 5所示。
![]() |
Download:
|
图 5 IPBFT算法选举流程 Fig. 5 Voting mechanism procedure of IPBFT algorithm |
当投票结束时,会出现两种情况:1)若参与选举的节点中有节点得到超过半数的投票,则节点当选成为新一轮共识的主节点;2)若参与选举的节点都没有得到足够的票数,则视为本次选举失败,选举失败的节点返回候补集合中,此时v1数值加1,重新选取参与选举的主节点,发起进行新一轮的选举。
2.3 IPBFT算法流程IPBFT算法的整体流程如图 6所示。
![]() |
Download:
|
图 6 IPBFT算法流程 Fig. 6 Procedure of IPBFT algorithm |
根据上述算法的设计过程,给出IPBFT算法的共识过程,如下所示:
算法1 IPBFT算法
输入 交易请求
输出 共识结果
1.主节点选举成功,视图编号初始化,v1的值增加1。
2.客户端发向主节点P送请求。//请求阶段
3.主节点进行广播预备消息。//预准备阶段
4.1.副本节点对主节点和接收到的提案消息进行验证,若主节点拜占庭错误,则进入视图切换流程,转到步骤1。
4.2.若提案消息验证通过则进入准备阶段,否则丢弃消息重新共识,转到步骤2。
5.1.副本节点进入到准备阶段,广播准备消息,当节点i收到超过2f+1个不同共识节点的准备消息并验证通过,则回复共识达成信息给客户端。
5.2.否则进行视图切换或丢弃消息重新共识,转到1。//准备阶段
6.客户端在收到了f +1个回复信息后,认为系统达成了共识,共识结束。
2.4 IPBFT算法分析为满足实际场景中的应用,同时满足算法高共识效率的要求,IPBFT算法是基于部分同步状态的基础上进行应用的,即节点发出的消息,虽然会有延迟,但是最终会到达目标节点。这是由于本文算法确保了每一个节点都有不同的超时值,在允许一定延迟的情况下,达成节点间的共识,保证了节点共识的效率。例如当主节点的发送时间超过了此超时值,即视为主节点出错,此时执行IPBFT算法的视图切换协议,进行后续的过程。结合候补集合以及备选投票机制,IPBFT共识算法中存在以下优点:
1)算法将共识的过程从普通的三阶段优化为两阶段,在达成共识的基础上缩短了共识所需的时延和通信次数,极大地降低了系统的网络开销,共识的效率较原始PBFT算法相比有明显提高。
2)当共识集合中出现主节点i拜占庭错误时,会使用候补集合中选举的信任节点进行替换,这样可以避免进行主节点的更换时出现多余网络通信的现象,而且还能使节点可以动态地增删,同时也避免了拜占庭错误节点i被第2次或者多次的重复选为主节点,导致视图不断切换和系统的共识性能波动下降的情况。
3)当出现视图切换时,候补集合会将选好的信任节点替换到共识集合,同时共识集合的拜占庭错误节点也会替换到候补集合,如此替换下去,将会减少共识集合中的拜占庭节点数量,这样能够有效降低系统共识过程中的视图切换的概率,减小共识开销,保持系统的高效运行。
3 实验与结果分析本文在算法的测试环节,使用基于docker的容器技术,将区块链共识节点的运行配置和代码都装载在docker虚拟容器中,系统对每个容器的资源分配内容为2 GB,节点的代码在容器中运行分配的CPU的资源分配为5%,同时内存给每个节点运行时的内存的分配也为5%左右,使容器能够发挥其优点。所有的虚拟区块链节点的运行会相对独立,同时运行具有隔离性,实验环境信息如表 1所示。
![]() |
下载CSV 表 1 实验环境信息 Table 1 Experimental environment information |
共识时延是指从交易提交到交易完成之间所消耗的时间,是衡量共识算法运行速度的重要指标,较低的共识时延可使交易可以快速得到确认,区块链安全性更高,同时也能变得更为实用。测试的共识时延为区块完成一次共识过程的时间,用公式定义时延为:
$ {\mathrm{DelayTime}}={T}_{{\mathrm{complete}}}-{T}_{{\mathrm{submit}}} $ | (11) |
其中,Tcomplete表示区块确认完成的时间,Tsubmit表示提案开始的时间。
为验证IPBFT算法在实际应用中低时延的特点,对IPBFT算法与原始PBFT算法进行对比。在每次进行信息交易时进行一次节点的动态替换,用来模拟例如共识过程中节点替换的现象,同时保证7个共识节点,测试在相同出块间隔内,系统发送1 000条交易量下的对照实验,实验测试30次,实验结果如图 7所示。可以看出,在同一个网络环境中,以节点数量相同且传输的交易信息数据大小相同为前提,IPBFT算法由于增设了候补集合,省去了大部分视图切换和更换节点产生的信息收集的过程,且省去了确认阶段,所需的共识时延要低于原始PBFT算法。单次共识所需的平均时延仅为380 ms左右,证明在实际应用中,即使需要在短时间内处理大量的信息,且加上网络请求和数据传输的时延,整个系统的时延情况也能有良好的表现。
![]() |
Download:
|
图 7 共识时延对比 Fig. 7 Consensus delay comparison |
吞吐量指的是在单位时间内完成的交易的数量,一般用TPS来表示,TPS公式为:
$ \mathrm{T}\mathrm{P}\mathrm{S}={T}_{\varDelta t}/\varDelta t $ | (12) |
其中,Δt为出块所用的时间,
对上述的两种算法进行吞吐量的对比实验。由于吞吐量的大小与交易量及节点的数量有关,因此本次实验将分为两组独立的实验。
实验1 将两种算法的共识节点数量固定为7个,对各算法在相同出块间隔内,系统分别发送1 000、1 500、2 000、2 500、3 000、3 500、40 00条交易量下的吞吐量进行30次测试,将这30次的结果取平均值作为实验的结果,如图 8所示。可以看出,随着交易量的逐渐增多,在节点的处理能力范围内,每种算法的吞吐量也会随之增加。但当交易量超过3 000条,此时的交易请求超过了节点的处理能力范围,导致了线程的堵塞,吞吐量呈下降趋势。但从总体来看,IPBFT算法的吞吐量仍高于原始PBFT算法。
![]() |
Download:
|
图 8 不同交易量下吞吐量对比 Fig. 8 Throughput comparison under different transaction volumes |
实验2 将每种算法的交易量固定为1 000条,对各算法在共识节点数量分别为4、7、10、13、16、19、22、25个情况下的吞吐量进行30次测试,将这30次的结果取平均值作为实验的结果,如图 9所示。可以看出,随着节点数量的增多,两种算法的吞吐量都呈下降趋势,但IPBFT算法的吞吐量仍高于原始的算法。
![]() |
Download:
|
图 9 不同节点数量下吞吐量对比 Fig. 9 Throughput comparison under different numbers of nodes |
综上,IPBFT算法具有更高的吞吐量,能够在相同时间内处理更多的交易事务,使区块链溯源系统具有更高的共识效率。
3.3 IPBFT算法共识通信次数实验为了验证IPBFT算法的通信次数,对两种算法在共识过程的通信次数进行实验对比。为便于理解,首先计算IPBFT算法和原始PBFT算法的通信次数。
1)原始PBFT算法通信次数
由于原始PBFT算法中需要经过三阶段的共识过程和视图切换过程,假设共识节点数量为n,那么共识过程中的预准备阶段需要主节点将消息发送给所有副本节点,所需通信次数为(n-1)次。准备阶段中副本节点间互相通信,需要(n-1)2次通信次数。而确认阶段每个节点需要向除自己外的节点发送消息,所需通信次数为n(n-1)次。综上,共识过程的总通信次数N为:
$ N=2n(n-1) $ | (13) |
在视图切换过程中,每个副本节点需要广播视图变更消息,需要(n-1)2通信次数;接着主节点发送新视图消息给所有副本节点,消耗(n-1)次通信次数;考虑到系统发生视图切换存在着一定概率。因此,视图切换过程的总通信次数M为:
$ M=\mathrm{z}n(n-1) $ | (14) |
其中,z为出现视图切换的概率(0≤z≤1),z会随着节点数量的增加而增长。综上,原始PBFT算法所需要的总通信次数C为:
$ C=2n(n-1)+\mathrm{z}n(n-1) $ | (15) |
2)IPBFT算法通信次数
IPBFT算法由于共识阶段省去了确认阶段,所需通信次数为n(n-1)次;优化视图切换协议省去了主节点广播新视图消息的环节,且主节点的选取是在候补集合中进行,由于候补集合节点数量为(n-1)/3,因此所需要的通信次数为z{[(n-1)/3]-1}2次。综上,IPBFT算法的总通信次数C为:
$ C=n(n-1)+\mathrm{z}{\left[\frac{(n-4)}{3}\right]}^{2} $ | (16) |
3)通信次数对比
将两种算法的通信次数进行对比,在没有出现视图切换的情况下,两个算法通信次数比值为:
$ Q=\frac{2n(n-1)}{n(n-1)} $ | (17) |
由上式可知,算法在没有出现视图切换的情况下IPBFT的通信次数为原始PBFT算法的一半,极大地减少了系统的网络通信开销。
在视图出现切换时,2个算法通信次数比值为:
$ Q=\frac{2n(n-1)+\mathrm{z}n(n-1)}{n(n-1)+z{\left[\frac{(n-4)}{3}\right]}^{2}} $ | (18) |
将n取不同的节点数量,z取从0到1的所有情况,得到如图 10所示的图形化界面。
![]() |
Download:
|
图 10 通信次数比值三维曲面图 Fig. 10 Three dimensional surface graph of communication degree ratio |
由图 10可以看出:随着节点的增加,在视图切换概率取不同值的情况下,通信次数比值Q都高于2,即IPBFT算法的通信次数将始终低于原始PBFT算法通信次数的一半,且随着概率z的逐渐升高,两个算法的通信次数比值也越来越大,证明了IPBFT算法在共识切换所需的通信次数要远小于原始算法。
这里解释两个特殊情况:
(1)当共识集合节点数为4时,候补集合中的节点数量为1,此时该节点就是下一次视图切换的主节点,因此,不需要进行选举过程,IPBFT算法视图切换所需的通信次数为0,此时比值Q为3并达到了最大值。但此时出现视图切换的概率为100%,在实际应用中一个可行的区块链系统不允许视图切换概率大于50%的情况发生,所以,此情况下比值Q虽然较大,但是没有实用价值。
(2)当z为0时,由于没有出现视图切换过程,所以无论节点数量是多少,通信次数的比值Q一致保持在2。
总而言之,IPBFT算法在通信次数最多的情况下也仅仅为原始PBFT算法的一半。在实际情况中,算法所处的联盟链出现节点拜占庭的概率非常低,即出现视图切换的概率非常低,所以IPBFT算法的通信次数可以长时间保持在原始PBFT算法通信次数的50%。
IPBFT算法与原始PBFT算法的通信次数对比结果如图 11所示。可以看出,实验结果可以很好地验证上述的结论,随着节点数量的增加,原始PBFT算法的通信次数呈大幅度增长,而IPBFT算法的通信次数明显低于原始PBFT的通信次数,且增长略显平稳。
![]() |
Download:
|
图 11 不同节点数量下共识通信次数对比 Fig. 11 Comparison of consensus communication times under different numbers of nodes |
由于IPBFT算法中加入了选举机制,在此对候补集合中选举的性能进行实验分析,测试在不同节点数量下,候补集合在开始进行选举,到主节点替换完成所需要的时间。实验测试30次,并取平均值作为结果,如图 12所示。
![]() |
Download:
|
图 12 选举机制性能测试结果 Fig. 12 Performance test result of election mechanism |
由图 12可以看出:随着候补集合中节点数量的增加,选举所需要的时间也会随之增多。但总体而言,候补集合中节点选举所需的时间能够保持在可接受的范围内,所花费的网络开销占整个系统开销的比重也微乎其微。实验证明,由于增设了候补集合并采取基于投票的选举机制,IPBFT算法能够以更高的效率和更低的时延进行主节点的替换,而不影响系统整体的共识过程。
3.5 IPBFT算法效率实验效率测试实验是为了测试在系统运行一段时间后,整个共识集合中拜占庭节点的数量。实验将IPBFT算法和原始PBFT算法进行对比,首先将2个算法的共识节点数量初始化为10个,共识节点中的拜占庭节点数为3个。IPBFT算法的候补集合节点数量设置为3个,候补集合的拜占庭节点数为0个。实验记录出现视图切换时各集合中拜占庭节点的数量,实验结果如图 13所示。
![]() |
Download:
|
图 13 选举机制效率测试结果 Fig. 13 Efficiency test result of election mechanism |
由图 13可以看出:当实验发生3次共识的视图切换时,IPBFT算法共识集合的拜占庭节点数从3个减少到0个,候补集合中的拜占庭节点数从0个增加到3个;而原始的PBFT算法,不管视图如何切换,共识节点中的拜占庭节点总数都没有发生任何变化。
在这种情况下,原始PBFT算法拜占庭节点数的数量是不变的,那么发生视图切换的概率也会一直不变,系统的运行状态并不能达到最优。而IPBFT算法共识集合中拜占庭节点的数量会随着视图切换的次数不断下降,直到整个共识集合中没有拜占庭节点,此时系统会保持高效运行。由此可见,当系统运行一段时间后,IPBFT算法的共识效率会比原始的PBFT算法的效率高得多。
4 结束语本文改进传统的PBFT共识算法,提出一种低时延的共识算法IPBFT。通过增设候补节点集合,在视图切换协议上进行优化,使算法的共识过程简化为两阶段,减少了达成共识的时延。此外,采取基于备选投票机制作为主节点选取的方式,在共识节点进行共识的同时完成候补节点的选举,不仅减少了视图切换过程的节点通信次数,而且还能支持节点的动态变化。实验结果证明了IPBFT算法的有效性及其低时延、高吞吐量、高共识效率的优点,同时能够较好地支持节点动态的加入或退出。下一步将在不影响算法效率的基础上把拜占庭节点的容错性提升到(n-1)/2,使IPBFT算法能够适应更大规模的公有链。
[1] |
ZHANG L, LIU B X, ZHANG R Y, et al. Overview of blockchain technology[J]. Computer Engineering, 2019, 45(5): 1-12. (in Chinese) 张亮, 刘百祥, 张如意, 等. 区块链技术综述[J]. 计算机工程, 2019, 45(5): 1-12. |
[2] |
SWAN M. Blockchain: blueprint for a new economy[M]. [S.l.]: O'Reilly, 2015.
|
[3] |
HE P, YU G, ZHANG Y F. Survey on blockchain technology and its application prospect[J]. Computer Science, 2017, 44(4): 1-7. (in Chinese) 何蒲, 于戈, 张岩峰, 等. 区块链技术与应用前瞻综述[J]. 计算机科学, 2017, 44(4): 1-7. |
[4] |
WANG H, LIU Y X, CAO S X. Medical data storage mechanism integrating blockchain technology[J]. Computer Science, 2020, 47(4): 285-291. (in Chinese) 王辉, 刘玉祥, 曹顺湘. 融入区块链技术的医疗数据存储机制[J]. 计算机科学, 2020, 47(4): 285-291. |
[5] |
WANG Z H, LIU P Z, SONG C B, et al. Research and development of flexible and reliable traceability system for agricultural products based on blockchain[J]. Computer Engineering, 2020, 46(12): 313-320. (in Chinese) 王志铧, 柳平增, 宋成宝, 等. 基于区块链的农产品柔性可信溯源系统研究[J]. 计算机工程, 2020, 46(12): 313-320. |
[6] |
LAMPORT L, SHOSTAK R, PEASE M. The Byzantine generals problem[J]. ACM Transactions on Programming Languages and Systems, 1982, 4(3): 382-401. DOI:10.1145/357172.357176 |
[7] |
FAN J, YI L T, SHU J W. Research on the technologies of Byzantine system[J]. Journal of Software, 2013, 24(6): 1346-1360. (in Chinese) 范捷, 易乐天, 舒继武. 拜占庭系统技术研究综述[J]. 软件学报, 2013, 24(6): 186-200. |
[8] |
JAKOBSSON M, JUELS A. Proofs of work and bread pudding protocols(extended abstract)[M]//PRENEEL B. Secure Information Networks. Berlin, Germany: Springer, 1999: 258-272.
|
[9] |
YUAN Y, NI X C, ZENG S, et al. Blockchain consensus algorithms: the state of the art and future trends[J]. Acta Automatica Sinica, 2018, 44(11): 93-104. (in Chinese) 袁勇, 倪晓春, 曾帅, 等. 区块链共识算法的发展现状与展望[J]. 自动化学报, 2018, 44(11): 93-104. |
[10] |
LAMPORT L. The part-time parliament[J]. ACM Transactions on Computer Systems, 1998, 16(2): 277-317. |
[11] |
LAMPORT L, REED B C, JUNQUEIRA F P, et al. In search of an understandable consensus algorithm[C]//Proceedings of USENIX ATC'14. Philadelphia, USA: USENIX Association, 2014: 304-319.
|
[12] |
CASTRO M, LISKOV B. Practical Byzantine fault tolerance[C]//Proceedings of the 3rd Symposium on Operating Systems Design and Implementation. [S. l. ]: USENIX Association, 1999: 173-186.
|
[13] |
ANDROUTSELLIS-THEOTOKIS S, SPINELLIS D. A survey of peer-to-peer content distribution technologies[J]. ACM Computing Surveys, 2004, 36(4): 335-371. DOI:10.1145/1041680.1041681 |
[14] |
YEOW K, GANI A, AHMAD R W, et al. Decentralized consensus for edge-centric Internet of Things: a review, taxonomy, and research issues[J]. IEEE Access, 2018, 6: 1513-1524. DOI:10.1109/ACCESS.2017.2779263 |
[15] |
XIA C L, SONG Y R, JIANG G P, et al. An optimized proof of stake consensus strategy[J]. Computer Engineering, 2019, 45(5): 25-28, 34. (in Chinese) 夏昌琳, 宋玉蓉, 蒋国平. 一种优化的权益证明共识策略[J]. 计算机工程, 2019, 45(5): 25-28, 34. |
[16] |
LIU Y X, LI Y B, JIANG W. Comparison of blockchain consensus algorithms applied in Internet of things[J]. Electric Power Information and Communication Technology, 2020, 18(6): 30-34. (in Chinese) 刘永相, 李彦斌, 蒋炜, 等. 应用于物联网的区块链共识算法比较研究[J]. 电力信息与通信技术, 2020, 18(6): 30-34. |
[17] |
GUO C M, ZHU B P. An improved blockchain consensus algorithm[J]. Computer and Digital Engineering, 2020, 48(6): 1290-1293, 1349. (in Chinese) 郭春梅, 朱保平. 一种改进的区块链共识算法[J]. 计算机与数字工程, 2020, 48(6): 1290-1293, 1349. DOI:10.3969/j.issn.1672-9722.2020.06.006 |
[18] |
FANG W W, WANG Z Y, SONG H L, et al. An optimized PBFT consensus algorithm for blockchain[J]. Journal of Beijing Jiaotong University, 2019, 43(5): 58-64. (in Chinese) 方维维, 王子岳, 宋慧丽, 等. 一种面向区块链的优化PBFT共识算法[J]. 北京交通大学学报, 2019, 43(5): 58-64. |
[19] |
ZHANG S J, CHAI J, CHEN Z H, et al. Byzantine consensus algorithm based on Gossip protocol[J]. Computer Science, 2018, 45(2): 20-24. (in Chinese) 张仕将, 柴晶, 陈泽华, 等. 基于Gossip协议的拜占庭共识算法[J]. 计算机科学, 2018, 45(2): 20-24. |
[20] |
CHEN Z H, LI Q. Improved PBFT consensus mechanism based on K-medoids[J]. Computer Science, 2019, 46(12): 101-107. (in Chinese) 陈子豪, 李强. 基于K-medoids的改进PBFT共识机制[J]. 计算机科学, 2019, 46(12): 101-107. DOI:10.11896/jsjkx.181002014 |
[21] |
FANG Y, DENG J Q, CONG L H, et al. An improved scheme for PBFT blockchain consensus algorithm based on ring signature[J]. Computer Engineering, 2019, 45(11): 32-36. (in Chinese) 方轶, 邓建球, 丛林虎, 等. 一种基于环签名的PBFT区块链共识算法改进方案[J]. 计算机工程, 2019, 45(11): 32-36. |
[22] |
MIN X P, LI Q Z, KONG L J, et al. Permissioned blockchain dynamic consensus mechanism based multicenters[J]. Chinese Journal of Computers, 2018, 41(5): 1005-1020. (in Chinese) 闵新平, 李庆忠, 孔兰菊, 等. 许可链多中心动态共识机制[J]. 计算机学报, 2018, 41(5): 1005-1020. |