基于联盟链微电网交易的改进Raft共识算法
2024-10-14张铭泉曹新宇
摘 要:针对联盟链微电网交易场景的高吞吐量与抵御拜占庭节点攻击的需求,提出了一种基于Raft的多领导者拜占庭容错共识算法MLB-Raft(multi-leader Byzantine fault tolerance-Raft)。首先使用可验证随机函数VRF选举领导者节点群,通过多领导者并行提交区块的方式提高算法的吞吐量;接着引入了协调者角色,负责领导者的选举、管理与系统共识;在领导者与跟随者进行区块复制的过程中,结合并简化了PBFT算法的共识流程,实现本算法的抗拜占庭特性。实验结果表明,在大规模网络节点环境下,相较于Raft算法,该算法提高了吞吐量与共识效率,但付出了部分通信开销代价;相较于PBFT算法,该算法提高了拜占庭容错能力,降低了通信开销。综上,该算法能有效保障联盟链微电网交易的时效性与安全性。
关键词:联盟链;微电网;共识算法;Raft算法;PBFT算法;可验证随机函数
中图分类号:TP301 文献标志码:A 文章编号:1001-3695(2024)10-005-2911-07
doi:10.19734/j.issn.1001-3695.2024.01.0010
Improvement of Raft consensus algorithm based on alliance chain microgrid trading
Zhang Mingquan, Cao Xinyu
(School of Control & Computer Engineering, North China Electric Power University, Baoding Hebei 071003, China)
Abstract:To address the high throughput and resistance to Byzantine node attacks in the microgrid trading scenario of consortium chains, this paper proposed a multi-leader Byzantine fault tolerance consensus algorithm based on Raft, named MLB-Raft. The algorithm first utilized the VRF to select a group of leader nodes, increasing throughput by allowing multiple leaders to submit blocks in parallel. A coordinator role was then introduced, responsible for the election and management of leaders and system consensus. During the block replication process between leaders and followers, the consensus process of the practical Byzantine fault tolerance (PBFT) algorithm was integrated and simplified to achieve the Byzantine resilience of this algorithm. Experimental results show that, under a large-scale network node environment, compared to the Raft algorithm, this algorithm improves throughput and consensus efficiency at the cost of some communication overhead. Compared to the PBFT algorithm, this algorithm enhances Byzantine fault tolerance and reduces communication overhead. In summary, this algorithm can effectively ensure the timeliness and security of alliance chain microgrid transactions.
Key words:alliance chain; microgrids; consensus algorithm; Raft algorithm; PBFT algorithm; verifiable random function(VRF)
0 引言
2022年8月1日,工业和信息化部、国家发展改革委、生态环境部发布《工业领域碳达峰实施方案》[1],明确提出要加快工业绿色微电网建设,促进就近大规模、高比例消纳可再生能源。微电网[2]是指由分布式电源、储能装置、能量转换装置、相关负荷和监控、保护装置汇集而成的小型发配电系统,是一个能够实现自我控制、保护和管理的自治系统。微电网通过点对点电力交易形成微电网电力交易市场,可有效解决当前可再生能源的就近消纳问题。但传统的集中式电力交易模式很难适应分布式电源分散性的特点,因其存在交易数据不透明、无法追溯、数据易被窜改等问题,无法有效实现交易双方点对点的电力交易。
区块链技术于2008年在Satoshi Nakamoto发表的《Bitcoin: a peer-to-peer electronic cash system》[3]中被首次提出,它集成了分布式存储、共识算法、数字签名、点对点传输与智能合约等技术,通过网络中所有的节点共同管理、监督所有链上数据,摆脱了网络中单一节点或集群的中心化管理,是一个去中心化、无须信任的、不可窜改的分布式账本。区块链技术的特点与微电网电力交易的需求高度契合,当前已有许多研究将区块链技术与微电网电力交易相结合。文献[4]提出了一种基于区块链的微电网群分布式电能交易模型,用于解决传统集中交易模式在处理高频、小量的微电网群电能交易时存在的运行成本高、信息不安全等弊端。文献[5]将区块链技术与微电网交易相结合,基于连续双向拍卖模式提出了基于区块链技术的微电网交易机制。
区块链根据其去中心化程度分为公有链、私有链和联盟链。公有链是完全公开透明的,不受任何组织控制,所有人都能参与;私有链的写入权限仅属于个人或某一组织,中心化程度高;联盟链则介于两者之间,只对特定的团体组织开放,参与者可以进行交易或信息查阅,但仅有联盟中的节点有权进行交易验证、发布合约等功能。文献[6]指出了联盟链比公有链和私有链更适用于能源交易场景,建立了基于联盟链的去中心化能源交易系统。文献[7]针对微电网电力交易存在着身份认证协议不安全、交易中心化、数据无法追踪溯源、节点之间缺乏共识等问题,提出了基于联盟链的微电网身份认证协议。联盟链的部分去中心化特性、节点准入机制等特点,方便监管机构对交易进行监督与管理,因此适用于微电网电力交易。
共识机制是区块链的重要组成部分,是区块链网络中节点间达成一致的重要技术,保证了区块链网络中的数据一致性和安全性。文献[8]为解决电力系统不同主体之间的信任问题,提出了一种基于区块链的分布式能源交易市场信用风险管理方法,其使用PoO(proof of optimization)算法进行共识,但是该算法存在大量算力浪费的问题。文献[9]针对能源场景选择了PoS共识算法进行改进,设计了适用于能源互联网的发用电量权益共识机制(proof of electrical output & load,PoEOL),但该算法没有解决PoS类共识算法可能出现的单个节点权力过大导致系统中心化的问题。文献[10]针对可再生能源生产领域,提出了一种能源效率币(energy efficiency coin,EEcoin),使可再生能源的建设能够被有效追踪。并基于股份委托证明机制(delegated proof of stake,DPoS)作出了算法改进,降低了共识过程造成的能源消耗。文献[11]结合联盟链应用场景,提出了一种KRaft算法(Kademlia Raft),对Raft算法的领导者选举流程与日志复制过程进行了优化,提高了算法的吞吐量与可扩展性,但该算法无法实现拜占庭容错。从上述文献可以看出,当前已有研究大多都是针对适用于公有链的PoS类共识算法进行改进,缺乏应用于联盟链能源交易的共识算法改进。由于微电网电力交易存在频繁且单笔量小的特性[4],产消者与消费者之间的订单数量多且杂乱[12],所以对交易中的系统吞吐量有着较高的要求,过低的交易吞吐量会对电力交易的及时性造成影响;且微电网电力市场的准入门槛低,分布式电力产消者的个体趋利性较强[13],可能会出现窜改交易信息等恶意行为,不利于微电网交易安全高效地进行,所以为微电网电力交易设计适合的共识机制就显得尤为重要。
本文设计了适用于基于联盟链微电网交易的共识机制。首先分析在联盟链场景中常用的实用拜占庭容错PBFT[14]共识算法与分布式共识算法Raft[15]的优缺点以及选择Raft算法进行改进的原因。接着提出一种基于Raft改进的多领导者拜占庭容错Raft共识算法MLB-Raft。为适应联盟链微电网交易高吞吐量的需求,该算法将原Raft的单一领导者机制修改为多领导者机制,并引入协调者作为中介,由领导者们并行提交不同的区块,协调者进行轮次切换工作;为提高联盟链微电网交易系统的灵活性,再对原领导者选举流程进行改进,引入可验证随机函数VRF实现领导者小组的选举,当领导者数量低于一定水平时便会触发选举,使领导者能在必要时让位给其他节点;最后为保证联盟链微电网交易系统的数据安全性与稳定性,将PBFT算法引入到算法共识过程中,判断日志信息是否遭受到拜占庭节点的窜改,并将拜占庭领导者进行标记,由协调者进行轮次切换时剔除该节点。
1 共识机制
1.1 PBFT共识算法
PBFT算法由Castro和Liskov于1999年提出[14],用于解决分布式系统的拜占庭容错问题,能够保证节点总数1/3的拜占庭容错率,其通信复杂度为O(n2),经常被用作联盟链的共识算法。
PBFT算法的具体流程包含请求(request)、预准备(pre-prepare)、准备(prepare)、提交(commit)和回复(reply)五个阶段。客户端首先向主节点发送请求消息,主节点收到消息后便生成预准备消息并广播给所有的从节点。从节点接收到主节点发出的预准备消息后进行验证,验证通过则向所有节点发送准备消息。当从节点接收到除自己以外的2f个不同节点的有效准备消息时,向其他节点广播确认消息并收集其他节点传来的确认消息,当收到2f+1条来自不同节点的确认消息后,将该请求消息提交,并向客户端发送回复消息。客户端收到f+1条来自不同节点传来的有效回复消息后,便认为本次共识成功。PBFT算法的具体共识流程如图1所示。
若从节点确认主节点失效或成为拜占庭节点后,便会触发视图切换协议(view change)重新选取新的主节点,该协议可确保当主节点成为拜占庭节点时,系统仍然可以正常的运行,保证了系统的稳定性。
但是PBFT算法也存在一定的问题,虽然该算法不需要消耗大量的算力,但由于其O(n2)的通信复杂度,通信开销会随着节点数量的增加而平方级增长,降低共识效率,影响系统的性能。另外PBFT算法的网络结构属于静态结构,若要动态添加节点,必须要重启整个系统,使系统的可用性难以保障[16]。因此单一的PBFT算法不能满足基于联盟链的微电网电力交易需求。
1.2 Raft共识算法
Raft算法由Ongaro等人[15]于2014年提出,该算法对比Paxos算法[17]更加易于理解和实现,核心内容由领导者选举与日志复制两部分组成。算法中的节点有领导者(leader)、候选者(candidate)与跟随者(follower)三种角色,节点状态会根据不同的条件进行转换。正常情况下,系统中仅有单个领导者节点,其他节点均为跟随者,领导者通过周期性的心跳维持与跟随者的正常通信。当跟随者在超时状态下仍未收到领导者的心跳消息时,其状态转变为候选者,并向其他节点发送请求投票信息,申请成为下一任领导者,若该节点在规定时间内收到了半数以上节点的投票,其状态转变为领导者。Raft算法节点状态转变过程如图2所示。
在日志复制阶段,领导者负责将所有的交易信息打包生成区块,并向所有的跟随者广播,当其收到半数以上的跟随者回复后,领导者将确认信息发送给所有节点,该区块便成功上链。
Raft算法的通信复杂度为O(n),其共识效率较高,算法扩展性较好,当系统内宕机节点不超过一半时仍然可以正常工作,但是Raft算法不支持拜占庭容错,不能保证微电网电力交易的系统安全性。
1.3 微电网交易与算法关联分析
由于微电网电力交易存在订单数量多、交易频率高等特点,对交易吞吐量性能有较高的要求;此外在交易过程中恶意用户还可能出现窜改交易信息的行为,破坏交易的安全性,因此所使用的共识算法应满足高吞吐量、交易时延低及支持拜占庭容错等需求。当前应用于联盟链中的主流共识算法有两类:a)拜占庭容错共识算法,代表性的是PBFT算法;b)非拜占庭容错共识算法,代表性的是Paxos与Raft算法。PBFT算法虽支持拜占庭容错,但其属于静态网络结构,且通信开销大,不能很好地满足微电网电力交易的需求。Paxos算法结构复杂,实现难度大,而Raft算法较其更加易于理解和实现,且共识效率较高,算法扩展性较好,仅存在不支持拜占庭容错的问题。因此若能解决Raft算法的拜占庭容错性问题,并对Raft算法性能做进一步优化,就能更好地适用于基于联盟链的微电网电力交易。
2 MLB-Raft共识算法
本文针对联盟链微电网交易中高吞吐量、低交易时延与拜占庭容错等需求,结合PBFT算法的拜占庭容错与Raft算法的高效性与可扩展性,提出了一种多领导者拜占庭容错Raft共识算法MLB-Raft。对Raft算法的领导者机制进行改进,系统中选举多领导者,通过并行状态机的思想,使多领导者并行提交区块以提高系统的吞吐量,将PBFT算法的共识流程进行简化并应用于系统的区块复制过程中,避免日志信息遭到拜占庭节点窜改。另外引入协调者节点用于管理领导者与算法的共识流程。
2.1 系统框架
MLB-Raft算法的系统框架如图3所示,包含联盟链电力交易监管中心、客户端、协调者、领导者、候选者、跟随者和拜占庭节点七个实体。
a)联盟链电力交易监管中心。该实体为国家电力职能部门,负责电力交易的监督与管理,以及系统中协调者的指派。
b)客户端。该实体为参与电力交易的用户,其作用是将其买卖电力的交易信息提交至交易系统中,以满足自身的需求。
c)协调者。该实体由联盟链电力交易监管中心指派,负责维护系统中共识算法的平稳运行,如领导者选举、协助共识、任期轮次切换、移除拜占庭节点等任务。
d)领导者。该实体由协调者在候选者中进行选举产生,通常系统中同时存在多名领导者,共同负责在每轮任期提交区块、完成共识流程与区块复制。
e)候选者。该实体为跟随者至领导者的过渡角色,在领导者选举过程中产生,若选举成功则成为领导者节点,选举失败则成为跟随者节点。
f)跟随者。该实体占系统中节点数量的大多数,未成功竞选领导者的节点均为跟随者节点,负责参与系统共识过程,接收领导者的信息并将区块复制到自身日志中。
g)拜占庭节点。该实体为系统中作出恶意行为的节点,通过窜改信息的方式对系统进行破坏,其身份可能是领导者,也可能是跟随者。当拜占庭节点被系统中其他节点发现后,对其进行标记,由协调者在轮次切换时将其剔出系统。
2.2 改进的领导者选举
2.2.1 领导者节点群选举方法
为实现多领导者的选举,本文在领导者选举流程中引入了可验证随机函数VRF[18],它是Silvio等人在1999年提出的一种具有非交互零知识证明特点的伪随机数生成函数。在领导者选举过程中,使用VRF函数实现加密抽签选取领导者节点群,具体的选取流程如图4所示。
选举开始后所有节点均成为候选者,由系统设定范围值range,如设置range的值为0.2,那么仅有使用VRF函数计算出随机数在[0,0.2]的节点才能加入领导者节点群,由于VRF输出的随机变量来自均匀分布,所以预期成功率几乎与范围值相同,成为领导者节点群的节点数占总节点的20%,其余节点成为跟随者。生成密钥的加密算法选择Ed25519签名算法,节点i计算随机数的过程如下:
a)节点i通过Ed25519签名算法生成公钥pki与私钥ski。
b)节点i输入hash与自己的私钥ski,使用VRF()函数生成随机数ni与身份证明pi。其中hash为对上一个区块的区块号和任期term进行哈希得到的hash值,VRF()函数如式(1)所示。
VRF(hash,sk)=(n,p)(1)
c)其他节点使用VRF_proof()函数对节点i生成的随机数ni进行验证,输入节点i的公钥pki、哈希值hash、随机数ni与身份证明pi。VRF_proof()函数如式(2)所示。
VRF_proof(pk,hash,n,p)=true∨false(2)
所有节点完成VRF选举提交后,会继续在candidate候选阶段等待能否成为领导者的判定,协调者对各节点通过VRF函数计算出的随机数进行收集,完成收集后向它们返回结果result。如果协调者统计的节点中有随机数符合范围条件且数值相同的多个节点,则根据先来先得的原则成为领导者。result值为1代表该节点成为领导者;result值为2表示该节点当前不在领导者节点选择范围,不具备成为领导者节点的资格,如节点任期数低于当前任期等情况;result值为3表示该节点未能成为领导者节点。未成为领导者节点的其余节点从candidate候选状态变为follower状态,成为跟随者节点。
当VRF选举完成后,协调者会向所有节点发送领导者节点群信息,广播changeleader请求给所有节点,并更新目前的任期以及领导者节点群的全部ID信息。若VRF选举超时没有选举决议,则增加任期term的期限,开始新的VRF选举。
2.2.2 重新触发选举条件
Raft算法中,当跟随者节点未在限定时间内接收到来自领导者的心跳信息,即可判定领导者下线,重新选举领导者。但在多领导者方案中,沿用Raft重新选举领导者节点的方法不可行。假设个别领导者因为不同原因退出领导者集群,但系统中依然存在领导者节点,无法触发重新选举领导者节点的行为。并且随着领导者节点总数的降低,系统的吞吐量会随之下降,从而影响系统性能。为解决该问题,本算法作出如下改进:
由协调者设置心跳信息限定时间(heart time,Ht)和领导者心跳正常总数(heart number,Hn)及其警戒值(heart warning,Hw),各领导者节点需在每次Ht结束前向协调者发送自己的心跳信息,证明自己的状态正常。若协调者在Ht时间内未接收到某个领导者的心跳信息,则认定该节点发生故障,更新Hn的值,并在进行下一次轮次切换时删除领导者名单中该领导者节点的信息。当Hn的值低于Hw时,代表系统中领导者的数量过低,重新启动领导者选举,以保证算法的正常运行。
2.2.3 节点可信性分析
沿用Raft算法的思想,系统完成领导者选举后,由领导者节点群负责处理客户端的请求,各跟随者节点会完全相信领导者,并直接响应来自领导者的消息,完成MLB-Raft算法共识流程。由于跟随者节点对领导者节点是完全信任的,所以当出现拜占庭节点恶意窜改信息时,由算法的共识流程来保证区块信息的正确传递与提交,保证系统的共识效率与安全性。
2.3 MLB-Raft算法流程
2.3.1 并行提交区块
为更好地利用多领导者的并行性,MLB-Raft算法对领导者提交区块的流程作出了改进,引入了并行状态机的思想,它由一个主状态机和多个子状态机组成,每个子状态机可以独立地运行,也可以同时执行。当一个子状态机完成其任务时,它会通知主状态机,主状态机会根据需要切换到下一个状态,该机制可以提高系统的并发性和效率。在MLB-Raft算法中,由协调者担任主状态机的角色,负责领导者批次划分、区块序号分配与轮次切换工作;各领导者担任子状态机的角色,负责区块提交与共识工作。
如图5所示,各领导者依据协调者划分的批次顺序,按照协调者分配的区块序号进行并行提交,每一轮次中每个领导者只提交一个区块,每个区块中都包含该领导者的签名和该区块的序号Si。其中签名用于确保消息的完整性和标记区块来源,序号Si是本区块的目标状态机标识符(state machine identifier),其作用是确保各个子状态机(领导者)的执行不会相互干扰。当该轮次中的所有区块都达成共识后,各领导者便向协调者发送成功同步消息successsync,协调者在接收到足够的successsync消息后,将本轮交易中的各区块打包成区块集合并提交,区块集合的结构由区块号、时间戳、上一轮区块哈希、本轮区块哈希、打包的交易及轮次、序列号等组成。接着协调者广播任期切换消息TC,系统进入下一轮次区块提交中。
2.3.2 共识与区块复制
为实现系统的抗拜占庭节点的特性,MLB-Raft将PBFT的共识流程进行简化并应用到系统的区块复制过程中,防止拜占庭节点作出恶意行为,保障系统的稳定性。另外,PBFT现存的问题也不会对系统性能造成影响,一是通信开销会随着节点数量的增加而增长,本文算法针对一致性协议进行简化,因此算法的通信开销对比PBFT会显著降低;二是PBFT无法动态添加节点,本文算法所提出的多领导者机制不存在动态添加领导者的过程,仅有对整个领导者节点群进行重新选举的操作,避免了该问题。MLB-Raft的区块复制共识过程分为多个阶段,包括request、preprepare、prepare、commit、commitreply、successsync和termchange&reply,具体流程如图6所示。
a)request(请求)。本阶段是客户端向系统提交请求的起点,客户端将其请求信息发送至系统中的领导者消息池,由协调者进行领导者节点群的交易区块分配。
b)preprepare(预准备)。当每个领导者接收到客户端请求后,它将会创建一个新的区块条目,并将自己分配到的内容附加到整个新的区块条目中,设置该区块条目的状态为preprepare。下一步领导者采用BLS签名方案对消息签名,以确保消息的完整性和来源。完成以上操作后,将此preprepare消息广播给其他节点,通知它们新请求的到来。
BLS签名(Boneh-Lynn-Shacham) [19]是一种基于椭圆曲线密码学的数字签名方案。此处采用BLS签名的原因是其具有聚合性和高效性的优点,这些优点使其成为PBFT中一个有力的工具,有助于提高系统性能、可靠性和安全性。这种签名机制减少了通信和计算开销,有助于确保在拜占庭故障情况下的可靠性。
c)prepare(准备)。其他节点收到领导者的preprepare消息后,先验证签名,确认消息的来源和完整性。然后它们将preprepare消息添加到自身的本地日志中,并将其状态从preprepare更改为prepare。接着各节点将prepare消息广播给各领导者节点,这是为了向各领导者节点表明它们已经达成了对该请求的初始共识。
d)commit(提交)。当一个领导者节点收到来自多数派节点的prepare消息后,它将再次验证消息的完整性与BLS签名,并将prepare消息添加到它的本地日志中,将状态从prepare更改为commit。然后该节点把commit消息广播给其他节点,表明它已经对该请求达成了共识。若节点接收到来自多数派节点的commit消息后,便可确认该请求已经被多数派节点所接受。
e)commitreply(提交回复)。当其他节点收到来自主节点的commit消息后,它将最后的消息添加到它们的本地日志中,表明该区块可以同步。当主节点收到来自多数派节点的commitresponse消息后,它可以确认该请求已经被多数派节点接受。
f)successsync(成功同步)。本阶段是由领导者节点对协调者节点发送,对于领导者节点,一旦节点确认请求已被多数派节点接受,领导者将向协调者发送successsync的消息,等待协调者确认,并向协调者说明是否作为之后的领导者继续完成任务。
g)termchange & reply(任期切换与响应)。当本任期的领导者节点的所有跟随者节点都正常地被prepare、commit等流程填充,且满足系统中最小共识节点数k的范围,将向协调者发送一个成功同步消息successsync,协调者希望收到所有领导者节点的successsync消息,以证明所有的区块都在多数派节点上达成了共识。接着协调者会验证每个领导者节点的successsync消息中所有节点对其的签名,验证成功则证明所有的领导者节点均为诚实节点。一旦协调者收到足够的信息,它向全网广播一个任期切换消息(term change, TC),其中包括下一个任期(t+1)的任期号、t+1轮的新领导者以及t+1轮为这些领导者分配的新的序列号。当数据全部上链处理成功之后,协调者向客户端发送一个响应,告知客户端请求已成功处理,客户端接收到响应后,将知道其请求已经在系统中达成了共识,至此一轮共识结束。
2.3.3 安全性分析
2.3.2节步骤d)中的多数派节点是指系统中的诚实节点,其概念如下:在PBFT中,共识的核心思想是通过节点之间的互相通信来达成一致,在一个由3f+1个节点构成的系统中,只要有不少于2f+1个非恶意节点正常工作,该系统就能达成一致性。而在本文的并行多领导者的场景下,要确保整个系统在最后对于跟随者节点可以有2f+1的节点数目在每个主节点上都达成共识,就需要考虑拜占庭节点的数量,以及对于每个领导者节点而言的最小共识节点数。为更好地介绍概念,本文设定以下参数:n代表总节点数,包括领导者节点和跟随者节点;fe0c2b4d6b605e5314483ccdc6c8998f5代表最大拜占庭节点数量;m代表领导者节点数量;k代表每个领导者节点需要的最小共识节点数。
系统要确保在每个领导者节点的共识结果中,对于所有n个总节点来说,至少有2f+1的节点是共识的。所以需要找到一个合适的k,这样即使在最坏的情况下,即有f个拜占庭节点存在时,系统也能保证正确的共识。
由于各领导者的跟随者节点是共享的,所以在这种情况下,就需要确保系统能够容忍f个拜占庭节点,并且在每个领导者节点上都能达成共识。这意味着每个领导者节点都需要至少2f+1个节点的支持来达成共识,以确保即使在f个节点作恶的情况下,仍有f+1个诚实节点支持正确的决策。在这里本文假设恶意节点发生作恶行为时,是对每个领导者节点都会做恶。因6ceea9a1fef5ed8941d1a3bc1ccf90c7此对于每个领导者节点而言的最小共识节点数k的范围如式(3)所示。
k≥2f+1(3)
该条件确保了每个领导者节点都能与足够多的诚实节点达成共识,从而使整个系统的共识是有效的。同时,由于跟随者节点是共享的,不需要为每个领导者节点分别计算2f+1个诚实节点,整个系统只需要确保有足够的诚实节点来支持所有的领导者节点即可。
为了整个系统达成共识,需要的总诚实节点数应至少是2f+1,这是因为本文中假设拜占庭节点最多有f个,而共识至少需要f+1个诚实节点来克服这些拜占庭节点。然而由于领导者节点也可能是拜占庭节点,需要确保即使所有的领导者节点都是恶意的,共识过程也能正常进行。这意味着需要至少m+f个诚实节点来保证至少有一个领导者节点可以达成正确的共识。因此,总节点数n的范围如式(4)所示。
n≥m+f+(2f+1)(4)
这样即使所有的领导者节点都是拜占庭节点,系统中仍然有足够数量的诚实跟随者节点来达成共识,这为系统提供了一个安全的下界。
2.3.4 拜占庭领导者处理
在2.3.2节的步骤f)任期切换与响应中,若协调者在规定时间内未收到所有领导者节点的successsync消息,或是有恶意的successsync签名,则可认定对应的领导者节点为拜占庭领导者(Byzantine leader),需要采取措施对其进行处理。
在这种情况下系统会启动复杂轮次切换,首先将拜占庭领导者被分配的序列号的位置提交一个特殊的空块,对该节点进行标记。然后系统触发视图切换,视图切换流程图7所示,切换至view_new=view+1的新视图,并相互广播viewchange包。协调者收集满在视图view_new上的2f+1个viewchange包后,将自己的view切换为view_new,将view_new对跟随者节点总数进行取模运算,得到新的领导者节点继续对拜占庭领导者的区块进行提交。
完成本轮的工作后,协调者广播一个任期切换消息TC,其中包括下一个任期(t+1)的任期号、t+1轮的领导者集合,以及为每个领导者分配的新的序列号,同时将上一轮的拜占庭领导者剔除,剔除节点全网广播。这种机制确保了MLB-Raft共识算法在轮次切换时能够处理不同情况,包括正常情况和拜占庭情况,以维护系统的稳定性和一致性。
3 基于MLB-Raft算法的微电网电力交易流程
应用本文MLB-Raft进行微电网电力交易,分为身份认证阶段、领导者选举阶段和交易执行阶段三个阶段。
a)身份认证阶段。本阶段将进行交易前的身份注册工作,由联盟链电力交易监管中心指派微电网所在地的管理部门担任协调者,负责处理交易过程中的系统共识、领导者选举及拜占庭节点移除等工作。新用户加入微电网交易平台进行电力交易,须在联盟链中进行身份注册,将各自的身份信息提交至联盟链电力交易监管中心进行审核,审核通过后完成注册。
b)领导者选举阶段。本阶段将使用VRF函数进行微电网电力交易的领导者选举,所有微电网电力交易用户节点均成为候选者,通过Ed25519签名算法生成公钥pk与私钥sk,接着使用VRF()函数输入私钥sk生成随机数n与身份证明p,其他节点使用VRF_proof()函数对某节点生成的随机数n进行验证,协调者对各节点的随机数n进行收集,并根据系统设置的范围值range与节点情况返回选举结果,更新目前的任期以及领导者节点群的全部ID信息。成为领导者的用户节点身份更新为领导者,其他选举失败的用户节点身份更新为跟随者。
c)交易执行阶段。本阶段由微电网电力交易用户提交电力交易至领导者消息池,协调者为各领导者节点分配交易区块,领导者节点群并行提交区块;完成提交后系统进行区块共识与复制流程,待协调者接收并验证各领导者的successsync消息;当数据全部上链处理成功之后,协调者向全网广播任期切换消息TC,剔除共识过程中出现的拜占庭节点,并向微电网电力交易用户发送一个响应,告知其交易请求已成功处理,至此完成一次微电网电力交易。
4 仿真实验
本文通过Go语言实现MLB-Raft、PBFT、Raft、KRaft[11]及rbRaft[20],使用线程监听不同的端口代替节点,并开启多个线程模拟共识节点的通信过程。通过实验分析算法的吞吐量、共识时延、通信开销与拜占庭容错能力四个方面,并将MLB-Raft与其他算法的数据进行对比分析以验证本文算法的有效性。实验的软硬件配置如表1所示。
4.1 吞吐量
吞吐量是指在单位时间内系统能够处理的事务数量,通常用每秒完成的交易数量(transaction per second,TPS)来表示。在区块链系统中,TPS的值为交易数量STransaction与处理交易的时间t的比值,其计算公式如式(5)所示。
TPS=STransaction/t(5)
为验证MLB-Raft在吞吐量上的优势,本节在不同节点个数的区块链网络中,计算Raft、KRaft、rbRaft及MLB-Raft算法的吞吐量并取平均值进行对比分析。
如图8所示,随着系统中节点个数的增加,四种算法的吞吐量均有不同程度的下降。其中在10~30节点个数时,MLB-Raft的吞吐量远高于其他三种算法,节点个数超过40个后,MLB-Raft的吞吐量依然优于其他三种算法,这是由于MLB-Raft通过多领导者并行提交区块的方法,达到了提高吞吐量的效果,能够适应高吞吐量需求的联盟链微电网电力交易环境。
4.2 共识时延
共识时延是指从客户端向区块链发起请求到该请求被确认上链的时间,是衡量共识算法性能的重要指标。为验证MLB-Raft在共识时延上的优势,本节实验计算了不同节点个数情况下Raft、KRaft、rbRaft及MLB-Raft算法的共识时延并取平均值进行对比分析。
如图9所示,随着系统中节点个数的增加,四种算法的共识时延均有不同程度的上升,都呈近似线性的增加趋势,且MLB-Raft的共识时延始终低于其他三种算法的共识时延。另外随着节点个数的增加,可以明显观察到MLB-Raft的共识时延始终在Raft的50%以下,且MLB-Raft在节点数为60时的共识时延与其他三种算法节点数为10时的数值相近。通过实验可以得出MLB-Raft的共识效率高,能够保证大规模节点网络环境下的高效共识,保障联盟链环境下微电网电力交易的及时性。
4.3 通信开销
通信开销是指在区块链系统中,节点达成全网的单次共识所需要的通信次数。为便于计算,本节实验假设系统中节点总数为N,MLB-Raft使用VRF选举领导者节点总数为N/5。
a)PBFT通信开销。节点完成一次PBFT共识的过程中,pre-prepare阶段进行(N-1)次通信;prepare阶段进行(N-1)×(N-1)次通信;commit阶段进行N×(N-1)次通信;reply阶段进行N次通信。因此PBFT算法中节点单次共识的通信开销如式(6)所示。
N1=(N-1)+(N-1)×(N-1)+N×(N-1)+N=2N2-N(6)
b)Raft通信开销。节点完成一次Raft共识的过程中,领导者向所有跟随者发送一条日志信息,进行N-1次通信;跟随者收到领导者的日志信息后进行回复,进行N-1次通信;领导者接收到半数以上跟随者的回复信息后,向客户端发送回复消息,并向所有跟随者发送确认信息,进行N次通信。因此Raft中节点单次共识的通信开销如式(7)所示。
N2=(N-1)+(N-1)+N=3N-2(7)
c)rbRaft通信开销。节点完成一次rbRaft共识的过程中,在复制阶段领导者将区块信息发送给跟随者,进行N-1次通信;在验证阶段领导者发送包含签名的验证信息,进行N-1次通信。因此rbRaft中节点单次共识的通信开销如式(8)所示。
N3=(N-1)+(N-1)=2N-2(8)
d)MLB-Raft通信开销。节点完成一次MLB-Raft共识的过程中,request阶段进行N/5次通信;preprepare阶段进行N/5×(N-1)次通信;prepare阶段进行N/5×(N-1)次通信;commit阶段进行N/5×(N-1)次通信;commitreply阶段进行N/5×(N-1)次通信;successsyrc阶段进行N/5次通信;termchange&reply阶段进行N次通信。因此MLB-Raft中节点单次共识的通信开销如式(9)所示。
N4=N5+4×N5×(N-1)+N5+N=45N2+35N(9)
根据式(6)~(9)对四种共识算法的通信开销进行了计算,并依据计算结果绘制出各算法的通信开销变化趋势。
如图10所示,在系统节点个数相同时,MLB-Raft的通信开销低于PBFT,但高于Raft与rbRaft。当系统中节点数量为60个时,PBFT的通信开销为7 140,MLB-Raft将通信开销降低了5915%,其值为2 916。MLB-Raft因使用多领导者并行提交区块的方法提高了系统吞吐量,但支持系统拜占庭容错的特性牺牲了算法的通信开销性能,因此通信开销高于Raft与rbRaft。
4.4 拜占庭容错能力
当系统中存在拜占庭节点时,共识算法应当保证系统中各节点接受到的都是正确信息,并及时将拜占庭节点去除,保障系统的共识效率与安全性。本节设置了两个实验以验证MLB-Raft在面对拜占庭节点攻击时的效率与安全性。实验1设置系统总节点个数为60个,其中拜占庭节点个数为10个,每轮共识有2个拜占庭节点作出恶意行为。基于以上数据,对MLB-Raft、PBFT及rbRaft的拜占庭节点去除效率进行对比分析。
如图11所示,PBFT的拜占庭节点率一直没有降低,这是由于PBFT没有剔除拜占庭节点的机制,即使某节点被认定为拜占庭节点,该节点也能继续存在于系统中;rbRaft与MLB-Raft的拜占庭节点率都在持续下降,其中rbRaft在进行10轮共识后基本去除了系统中所有的拜占庭节点,而MLB-Raft的去除效率明显高于rbRaft,并在完成第六轮共识时便将系统中所有的拜占庭节点去除,更好地保障了系统的安全性。
当区块链系统遭受拜占庭节点的恶意攻击后,将其完全去除所需要的共识轮数代表了该共识算法针对拜占庭容错的有效性。本节设置了实验2以验证系统中出现不同数量的拜占庭节点同时作恶时,MLB-Raft剔除拜占庭节点的能力。实验2设置系统总节点个数为60个,拜占庭节点数分别设置为2、4、6、8、10个,对5种情况下系统剔除拜占庭节点的共识轮数进行对比分析。
如图12所示,5种情况下系统中的拜占庭节点都是经过一轮共识就被剔除出系统。这是由于共识过程中拜占庭节点作出恶意行为后,被其他的正常节点标记并通知协调者,协调者完成拜占庭节点认定后便启动复杂轮次切换以保证系统共识的正常进行,并在轮次切换的过程中移除所有的拜占庭节点,因此能及时地剔除系统中的拜占庭节点,保障微电网电力交易的系统数据安全。
4.5 算法性能对比
本节对PBFT、Raft、rbRaft、KRaft、MLB-Raft算法的部分性能进行汇总对比,采用系统总节点个数为60的实验数据,对比结果如表2所示。
从表2可以看出,对比其他四种共识算法,MLB-Raft的拜占庭容错能力是最好的,PBFT仅能检测出拜占庭节点,无法去除;Raft与KRaft无拜占庭容错能力;rbRaft去除拜占庭节点的性能弱于本文算法。吞吐量与共识时延方面,MLB-Raft均优于Raft、rbRaft、KRaft三种算法。而通信开销方面,MLB-Raft开销对比Raft与rbRaft较高,仅优于PBFT。但对比吞吐量、共识时延和拜占庭容错性带来的性能收益,MLB-Raft增加的通信开销是可以接受的。
5 结束语
本文针对联盟链微电网交易场景高吞吐量与抗拜占庭节点等需求,结合PBFT与Raft提出了一种基于Raft的多领导者拜占庭容错的改进共识算法MLB-Raft。该算法将Raft的单一领导者机制修改为了多领导者机制,使用可验证随机函数VRF选举多领导者,并通过多领导者并行提交区块的方式提高共识算法的吞吐量;引入新的角色协调者负责领导者节点群的选举、管理与系统共识的推进;简化PBFT的共识流程并将其结合到本文领导者与跟随者的区块复制流程中,实现算法的抗拜占庭特性。通过实验证明,相较于Raft,MLB-Raft的吞吐量与共识时延性能均优于Raft;虽然牺牲了部分通信开销性能,使其通信开销高于Raft,但实现了算法的抗拜占庭节点的特性,且相较于PBFT,MLB-Raft的通信开销低,去除拜占庭节点的效率高。综上所述,MLB-Raft能有效保障联盟链环境下微电网电力交易的交易时效性与安全性。但本文算法仍有不足之处,未来可以针对其共识过程做进一步优化,通过降低算法的通信开销,更好地提升算法的性能。
参考文献:
[1]工业和信息化部, 发展改革委, 生态环境部. 关于印发工业领域碳达峰实施方案的通知[EB/OL]. (2022-07-07). https://www.gov.cn/zhengce/zhengceku/2022-08/01/content_5703910.htm. (Notice of the Ministry of Industry and Information Technology, Development and Reform Commission, Ministry of Ecology. Environment on issuing the implementation plan for carbon peak in the industrial sector[EB/OL]. (2022-07-07). https://www.gov.cn/zhengce/zhengceku/2022-08/01/content_5703910.htm.)
[2]王成山, 李鹏. 分布式发电、微网与智能配电网的发展与挑战[J]. 电力系统自动化, 2010, 34(2): 10-14, 23. (Wang Chengshan, Li Peng. Development and challenges of distributed generation, the micro-grid and smart distribution system[J]. Automation of Electric Power Systems, 2010, 34(2): 10-14, 23.)
[3]Nakamoto S. Bitcoin: a peer-to-peer electronic cash system[EB/OL]. (2008). https://bitcoin.org/en/bitcoin-paper.
[4]朱廷虎, 刘洋, 许立雄, 等. 基于区块链技术的微电网群分布式电能交易模式[J]. 电力建设, 2022, 43(6): 12-23. (Zhu Tinghu, Liu Yang, Xyu Lixiong,et al. Research on distributed electricity transaction mode of microgrid cluster applying blockchain technology[J]. Electric Power Construction, 2022, 43(6): 12-23.)
[5]张志龙, 刘忠途. 基于区块链技术的微电网交易机制[J]. 信息技术与信息化, 2023 (2): 136-139. (Zhang Zhilong, Liu Zhongtu. Microgrid transaction mechanism based on blockchain technology [J]. Information Technology and Informatization, 2023 (2): 136-139.)
[6]周鑫, 邓莉荣, 王彬, 等. 基于联盟链的去中心化能源交易系统[J]. 全球能源互联网, 2019, 2(6): 556-565. (Zhou Xin, Deng Lirong, Wang Bin,et al. Decentralized energy trading system based on consortium blockchain[J]. Journal of Global Energy Interconnection, 2019, 2(6): 556-565.)
[7]张利华, 胡方舟, 黄阳, 等. 基于联盟链的微电网身份认证协议[J]. 应用科学学报, 2020, 38(1): 173-183. (Zhang Lihua, Hu Fangzhou, Huang Yang,et al. ldentity authentication protocol of micro-grid power based on consortium blockchain[J]. Journal of Applied Sciences, 2020, 38(1): 173-183.)
[8]平健, 陈思捷, 严正. 适用于电力系统凸优化场景的能源区块链底层技术[J]. 中国电机工程学报, 2020, 40(1): 108-116, 378. (Ping Jian, Chen Sijie, Yan Zheng. A novel energy blockchain technology for convex optimization scenarios in power system[J]. Proceedings of the CSEE, 2020, 40(1): 108-116, 378.)
[9]刘明川. 基于能源区块链的分布式电能交易系统设计[D]. 北京: 华北电力大学(北京), 2019. (Liu Mingchuan. Energy-blockchain-based design of distributed electricity transaction system[D]. Beijing: North China Electric Power University(Beijing), 2019.)
[10]Dispenza J, Garcia C, Molecke R. Energy efficiency coin (EECoin) a blockchain asset class pegged to renewable energy markets[EB/OL]. (2019-11-17). https://wenku.baidu.com/view/0ee7b5bdfd4-ffe4733687e21af45b307e971f97f.html.
[11]王日宏, 周航, 徐泉清, 等. 用于联盟链的非拜占庭容错共识算法[J]. 计算机科学, 2021, 48(9): 317-323. (Wang Rihong, Zhou Hang, Xyu Quanqing,et al. Non-Byzantine fault tolerance consensus algorithm for consortium blockchain[J]. Computer Science, 2021, 48(9): 317-323.)
[12]王嘉瑶, 宋翔宇, 朱俊武. 基于精确分类和最优匹配机制微电网交易决策方法[J]. 计算机应用研究, 2024, 41(2): 348-355. (Wang Jiayao, Song Xiangyu, Zhu Junwu. Microgrid transaction decision making method based on precise classification and optimal matching mechanism[J]. Application Research of Computers, 2024, 41(2): 348-355.)
[13]平健, 严正, 陈思捷, 等. 基于区块链的分布式能源交易市场信用风险管理方法[J]. 中国电机工程学报, 2019, 39(24): 7137-7145, 7487. (Ping Jian, Yan Zheng, Chen Sijie,et al. Credit risk management in distributed energy resource transactions based on blockchain[J]. Proceedings of the CSEE, 2019, 39(24): 7137-7145, 7487.)
[14]Castro M, Liskov B. Practical Byzantine fault tolerance[C]// Proc of the 3rd Symposium on Operating Systems Design and Implementation. Berkeley: USENIX Association, 1999: 173-186.
[15]Ongaro D, Ousterhout J. In search of an understandable consensus algorithm[C]// Proc of USENIX Annual Technical Conference. Berkeley: USENIX Association, 2014: 305-319.
[16]甘俊, 李强, 陈子豪, 等. 区块链实用拜占庭容错共识算法的改进[J]. 计算机应用, 2019, 39(7): 2148-2155. (Gan Jun, Li Qiang, Chen Zihao,et al. Improvement of blockchain practical Byzantine fault tolerance consensus algorithm[J]. Journal of Computer Applications, 2019, 39(7): 2148-2155.)
[17]Lamport L. The part-time parliament[J]. ACM Trans on Compu-ter Systems, 1998, 16(2): 133-169.
[18]Micali S, Rabin M, Vadhan S. Verifiable random functions[C]// Proc of the 40th Annual Symposium on Foundations of Computer Science. Piscataway, NJ: IEEE Press, 1999: 120-130.
[19]Boneh D, Lynn B, Shacham H. Short signatures from the Weil pairing[C]// Proc of International Conference on the Theory and Application of Cryptology and Information Security. Berlin: Springer, 2001: 514-532.
[20]吴雪琛. 基于信誉机制的联盟链共识算法研究[D]. 重庆: 西南大学, 2023. (Wu Xuechen. Research on consensus algorithm of consortium blockchain based on reputation mechanism[D]. Chongqing: Southwest University, 2023.)