发明内容
申请人发现:系统用户的增多,使得交易请求的处理效率降低的原因为:处理交易请求时需要对交易请求进行共识,然而,随着系统用户的与日俱增,参与共识过程(即对交易请求进行共识)的节点数量变多,令共识过程的运算难度增加、运算时间延长,降低了共识过程的运算效率,从而减缓交易请求的处理效率。
本申请提供了一种基于信用分组的节点选取方法、装置、存储介质和设备,目的在于减少参与共识过程的节点数量,以便于提高交易请求的处理效率。
为了实现上述目的,本申请提供了以下技术方案:
一种基于信用分组的节点选取方法,包括:
获取电能交易系统中各个节点的交易电量和信用值;
对各个所述节点进行划分,得到多个节点分组;其中,任意两个所述节点分组的交易电量总额之间的差值的绝对值不大于第一预设阈值,任意两个所述节点分组的信用值总额之间的差值的绝对值不大于第二预设阈值;所述交易电量总额为所述节点分组中的各个节点的交易电量的总和;所述信用值总额为所述节点分组中的各个节点的信用值的总和;
对于每个所述节点分组,控制所述节点分组中的各个节点根据预设投票策略互相投票,得到每个所述节点的赞同票数和反对票数;所述预设投票策略为:向信用值较低的节点投反对票,以及向信用值较高的节点投赞同票;
依据每个所述节点的信用值、赞同票数和反对票数,计算得出每个所述节点的总票数;
选取所述节点分组中总票数最大的节点,作为所述节点分组的代理节点;
从各个所述代理节点中选取总票数最大的代理节点,作为主节点,并将除所述主节点之外的其它代理节点,均标识为从节点;
基于所述主节点以及所述从节点,作为共识算法的共识节点,并利用各个所述共识节点对客户端发送的交易请求进行共识,得到所述交易请求的共识结果。
可选的,所述选取所述节点分组中总票数最大的节点,作为所述节点分组的代理节点,包括:
从所述节点分组所包含的各个节点中,选取出总票数等于目标数值的节点,作为候选节点;所述目标数值为:所述节点分组中所出现的最大总票数;
在所述候选节点的数量为一个的情况下,将所述候选节点作为所述节点分组的代理节点;
在所述候选节点的数量为多个的情况下,从各个所述候选节点中,选取出交易电量最大的候选节点,作为所述节点分组的代理节点。
可选的,从各个所述代理节点中选取总票数最大的代理节点,作为主节点,包括:
从各个所述代理节点中,选取出总票数最大的所有代理节点;
从所述总票数最大的所有代理节点中,选取交易电量最大的代理节点,作为主节点。
可选的,所述从各个所述代理节点中选取总票数最大的代理节点,作为主节点,并将除所述主节点之外的其它代理节点,均标识为从节点,包括:
按照总票数由高到低的顺序,对各个所述代理节点进行排序,得到代理节点序列;
将所述代理节点序列中序位为第一位的代理节点,标识为主节点;
将所述代理节点序列中序位为第二位的代理节点,标识为备选主节点;所述备选主节点用于:当所述主节点发生异常时,替代所述主节点执行所述交易请求的共识过程;
将所述代理节点序列中序位不为第一位和第二位的代理节点,均标识为从节点;
所述基于所述主节点以及所述从节点,作为共识算法的共识节点,包括:
基于所述主节点、所述备选主节点以及所述从节点,作为共识算法的共识节点。
可选的,还包括:
在检测到所述交易请求的共识过程中,存在异常的共识节点的情况下,依据每个所述共识节点在所述共识过程中的表现状况,对每个所述节点分组中各个节点的信用值进行调整,得到每个所述节点的最新信用值。
可选的,所述依据每个所述共识节点在所述共识过程中的表现状况,对每个所述节点分组中各个节点的信用值进行调整,得到每个所述节点的最新信用值,包括:
对于每个所述共识节点,在确定所述共识节点在所述共识过程中的表现状况为无异常的情况下,提高所述共识节点的信用值,得到所述共识节点的最新信用值;
提高目标节点的信用值,得到所述目标节点的最新信用值;其中,所述目标节点为:与所述共识节点归属于同一节点分组、且向所述共识节点投票的节点;
令非目标节点的信用值保持不变,得到所述非目标节点的最新信用值;所述非目标节点为:与所述共识节点归属于同一节点分组、且未向所述共识节点投票的节点。
可选的,所述依据每个所述共识节点在所述共识过程中的表现状况,对每个所述节点分组中各个节点的信用值进行调整,得到每个所述节点的最新信用值,包括:
对于每个所述共识节点,在确定所述共识节点在所述共识过程中的表现状况为异常的情况下,降低所述共识节点的信用值,得到所述共识节点的最新信用值;
降低目标节点的信用值,得到所述目标节点的最新信用值;其中,所述目标节点为:与所述共识节点归属于同一节点分组、且向所述共识节点投票的节点;
令非目标节点的信用值保持不变,得到所述非目标节点的最新信用值;所述非目标节点为:与所述共识节点归属于同一节点分组、且未向所述共识节点投票的节点。
可选的,还包括:
统计每个所述节点连续未参与共识过程的次数,得到每个所述节点的信用损耗值;所述共识过程为:利用所述共识节点对所述交易请求进行共识的过程;
依据每个所述节点的信用损耗值,对每个所述节点的信用值进行调整,得到每个所述节点的最新信用值。
可选的,还包括:
依据每个所述节点的最新信用值,重新确定新的共识节点。
一种基于信用分组的节点选取装置,包括:
信息获取单元,用于获取电能交易系统中各个节点的交易电量和信用值;
节点划分单元,用于对各个所述节点进行划分,得到多个节点分组;其中,任意两个所述节点分组的交易电量总额之间的差值的绝对值不大于第一预设阈值,任意两个所述节点分组的信用值总额之间的差值的绝对值不大于第二预设阈值;所述交易电量总额为所述节点分组中的各个节点的交易电量的总和;所述信用值总额为所述节点分组中的各个节点的信用值的总和;
分组投票单元,用于对于每个所述节点分组,控制所述节点分组中的各个节点根据预设投票策略互相投票,得到每个所述节点的赞同票数和反对票数;所述预设投票策略为:向信用值较低的节点投反对票,以及向信用值较高的节点投赞同票;
票数计算单元,用于依据每个所述节点的信用值、赞同票数和反对票数,计算得出每个所述节点的总票数;
第一选取单元,用于选取所述节点分组中总票数最大的节点,作为所述节点分组的代理节点;
第二选取单元,用于从各个所述代理节点中选取总票数最大的代理节点,作为主节点,并将除所述主节点之外的其它代理节点,均标识为从节点;
节点利用单元,用于基于所述主节点以及所述从节点,作为共识算法的共识节点,并利用各个所述共识节点对客户端发送的交易请求进行共识,得到所述交易请求的共识结果。
一种计算机可读存储介质,所述计算机可读存储介质包括存储的程序,其中,所述程序执行所述的基于信用分组的节点选取方法。
一种基于信用分组的节点选取设备,包括:处理器、存储器和总线;所述处理器与所述存储器通过所述总线连接;
所述存储器用于存储程序,所述处理器用于运行程序,其中,所述程序运行时执行所述的基于信用分组的节点选取方法。
本申请提供的技术方案,获取电能交易系统中各个节点的交易电量和信用值。对各个节点进行划分,得到多个节点分组。对于每个节点分组,控制节点分组中的各个节点根据预设投票策略互相投票,得到每个节点的赞同票数和反对票数。依据每个节点的信用值、赞同票数和反对票数,计算得出每个节点的总票数。选取节点分组中总票数最大的节点,作为节点分组的代理节点。从各个代理节点中选取总票数最大的代理节点,作为主节点,并将除主节点之外的其它代理节点,均标识为从节点。基于主节点以及从节点,作为共识算法的共识节点,并利用各个共识节点对客户端发送的交易请求进行共识,得到交易请求的共识结果。基于本申请所示方案,对各个节点进行划分,得到多个节点分组,控制节点分组中的各个节点根据预设投票策略互相投票,并基于节点的信用值、赞同票数和反对票数,计算得到节点的总票数,并依据总票数选出各个节点分组的代理节点参与共识过程,相较于现有技术,参与共识过程的节点数量明显减少,共识过程的运算效率得到明显提高,从而使得交易请求的处理效率得到提高。此外,在选取代理节点时,控制各个节点分组中各个节点根据预设投票策略互相投票,并依据节点的信用值、赞同票数和反对票数计算总票数,能够充分筛选出可靠的节点作为代理节点,从而有效避免不可靠节点参与共识过程,确保共识过程不会因不可靠节点的参与而延长运算时间。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
如图1a所示,为本申请实施例提供的一种基于信用分组的节点选取方法的流程示意图,应用于电能交易系统,包括如下步骤:
S101:预先获取电能交易系统中各个节点的交易电量和信用值。
其中,每个节点均代表系统用户(即利用电能交易系统进行电量交易的用户)。每个系统用户的信用值,可由技术人员根据实际情况进行设置。
S102:依据预设的分组条件,对各个节点进行划分,得到多个节点分组。
其中,预设的分组条件包括:第一分组的交易电量总额和第二分组的交易电量总额之间的差值的绝对值小于等于第一预设阈值,第一分组的信用值总额和第二分组的信用值总额之间的差值的绝对值小于等于第二预设阈值,第一分组和第二分组均为多个节点分组中的任意一个节点分组,交易电量总额为节点分组中的各个节点的交易电量的总和,信用值总额为节点分组中的各个节点的信用值的总和。
需要说明的是,第一分组所包含的节点的数量和第二分组所包含的节点的数量,可以互不相同。
具体的,预设的分组条件可以参见公式(1)和(2)所示。
在公式(1)和(2)中,Qi代表第一分组的交易电量总额,Qj代表第二分组的交易电量总额,Qave代表第一预设阈值,i和j均代表节点分组的索引,n代表节点分组的数量,Vi代表第一分组的信用值总额,Vj代表第二分组的信用值总额,Vave代表第二预设阈值。
一般来讲,节点分组的数量、以及每个节点分组中所包含的节点的数量,可由技术人员根据实际情况进行设置。
S103:对于每个节点分组,控制节点分组中的各个节点根据预设投票策略互相投票,得到每个节点的赞同票数和反对票数。
其中,预设投票策略为:向信用值较低的节点投反对票,以及向信用值较高的节点投赞同票。在投票过程中,每个节点均具有赞成票和反对票,每个节点根据预设投票策略向节点分组中的其它节点投票。
可选的,预设投票策略还可以为:向信用值较低、且交易电量较低的节点投反对票,以及向信用值较高、且交易电量较高的节点投赞同票。
S104:依据每个节点的信用值、赞同票数和反对票数,计算得出每个节点的总票数。
其中,依据每个节点的信用值、赞同票数和反对票数,计算得出每个节点的总票数的具体实现过程,可以参见公式(3)所示。
在公式(3)中,Resulti代表节点i的总票数,Ci代表节点i的信用值,Votesi代表节点i的赞同票数,NVotesi代表节点i的反对票数,λ代表预设权重系数(技术人员可以根据区块链中的节点数量进行调整),μ和ω均为常量、且μ+ω=1,通常来讲,μ和ω的取值均可设为0.5。
由公式(3)可知,节点的信用值越低、赞同票数越少、反对票数越多,则节点的总票数越低,节点的信用值越高、赞同票数越多、反对票数越少,则节点的总票数越高。
需要强调的是,节点的总票数越大,则代表节点的可靠性越高,即将节点纳入共识过程,给共识过程带来负面影响的可能性越低。也就是说,基于节点的信用值、赞同票数和反对票数计算得出的总票数,能够有效避免不可靠节点参与共识过程,减少共识过程的异常风险,从而提高共识过程的运算效率。
所谓的共识过程,即利用共识节点(代理节点)对交易请求进行共识的过程。
S105:选取节点分组中总票数最大的节点,作为节点分组的代理节点。
其中,在同一节点分组中,总票数最大的节点的数量可能会有多个,然而,节点分组的代理节点是唯一的,需要从总票数最大的所有节点中,选出一个节点,作为代理节点。
可选的,从节点分组所包含的各个节点中,选取出总票数等于目标数值的节点,作为候选节点;目标数值为:节点分组中所出现的最大总票数;在候选节点的数量为一个的情况下,将候选节点作为节点分组的代理节点;在候选节点的数量为多个的情况下,从各个候选节点中,选取出交易电量最大的候选节点,作为节点分组的代理节点。
S106:按照总票数由高到低的顺序,对各个代理节点进行排序,得到代理节点序列。
S107:将代理节点序列中序位为第一位的代理节点,标识为主节点。
S108:将代理节点序列中序位为第二位的代理节点,标识为备选主节点。
其中,备选主节点用于:当主节点发生异常时,替代主节点执行交易请求的共识过程。
S109:将代理节点序列中序位不为第一位和第二位的代理节点,均标识为从节点。
S110:基于主节点、备选主节点以及从节点,作为共识算法的共识节点,并利用各个共识节点对客户端发送的交易请求进行共识,得到交易请求的共识结果。
其中,本申请实施例所采用的共识算法,包括但不限于为联盟币共识(PracticalByzantine Fault Tolerance,PBFT)算法。对于传统的PBFT算法来说,当区块链中的节点数量为m时,交易请求达成共识所需的消息数量为2m2,也就是说,随着区块链中节点数量的增加,交易请求达成共识所需的消息数量将会暴增,消息数量的暴增将延长交易请求达成共识所需的实际时间,从而成为电能交易系统的性能瓶颈,并限制电能交易系统的规模,使得电能交易系统处理交易请求的效率逐渐降低。
相较于传统的PBFT算法,基于主节点、备选主节点以及从节点,作为PBFT算法的共识节点,能够减少共识节点的数量,从而进一步减少交易请求达成共识所需的消息数量,使得交易请求达成共识所需的实际时间缩短。
具体的,利用共识节点对客户端发起的交易请求进行共识,得到交易请求的共识结果的实现过程,参见图1b所示(在图1b中,c代表客户端,0代表主节点,1代表备选主节点,2和3均代表从节点),包括如下步骤:
1、控制主节点接收客户端发送的交易请求。
需要说明的是,交易请求的格式可设为<CGREQUEST,o,t,c>。在<CGREQUEST,o,t,c>中,CGREQUEST代表交易请求,o代表交易请求的具体操作,t代表客户端发起交易请求时的时间戳,c代表客户端的标识。
2、控制主节点生成与交易请求对应的预备消息,并将预备消息发送给从节点和备选主节点。
需要说明的是,预备消息的格式可设为<CGPRE-PREPARE,v,n,d,message>。在<CGPRE-PREPARE,v,n,d,message>中,CGPRE-PREPARE代表预备消息,v代表视图编号,n代表消息标号,message代表消息(即交易请求),d代表消息的哈希值。一般来讲,消息的哈希值基于对消息进行哈希运算所得到。
3、控制从节点对预备消息进行校验,在确定预备消息通过校验的情况下,在预备消息中添加时间戳和自身的节点编号,得到准备消息,并将准备消息发送给主节点和备选主节点。
需要说明的是,准备消息的格式可设为<CGPREPARE,v,n,d,i>。在<CGPREPARE,v,n,d,i>中,CGPREPARE代表准备消息,v代表视图编号,n代表消息标号,d代表消息的哈希值,i代表节点编号。
一般来讲,对预备消息进行校验的具体实现方式,为本领域技术人员所熟悉的公知常识,这里不再赘述。
4、控制备选主节点对预备消息进行校验,在确定预备消息通过校验的情况下,在预备消息中添加自身的节点编号,得到准备消息,并将准备消息发送给主节点。
5、控制主节点统计自身所接收到的准备消息的总数,得到第一数值,并在第一数值大于第三预设阈值的情况下,向从节点和备选主节点发送对应的确认消息。
需要说明的是,确认消息的格式可设为<CGCOMMIT,v,n,d,i>。在<CGCOMMIT,v,n,d,i>中,CGCOMMIT代表确认消息,v代表视图编号,n代表消息标号,d代表消息的哈希值,i代表节点编号。一般来讲,若确认消息是发送给从节点的,则节点编号为从节点的节点编号,若确认消息是发送给备选主节点的,则节点编号为备选主节点的节点编号。
6、控制备选主节点统计自身所接收到的准备消息的总数,得到第二数值,并在第二数值大于第三预设阈值的情况下,向从节点和主节点发送对应的确认消息。
7、控制主节点响应确认消息,得到响应消息,并向客户端发送响应消息。
需要说明的是,响应消息的格式可设为<CGREYLY,v,t,c,i,r>。在<CGREYLY,v,t,c,i,r>中,CGREYLY代表响应消息,v代表视图编号,t代表客户端发起交易请求时的时间戳,c代表客户端的标识,i代表节点编号,r代表交易请求的操作结果。
8、控制备选主节点响应确认消息,得到响应消息,并向客户端发送响应消息。
9、控制从节点响应确认消息,得到响应消息,并向客户端发送响应消息。
10、统计客户端所接收到的、且操作结果为目标操作结果的响应消息的总数,得到第三数值,在确定第三数值大于第四预设阈值的情况下,确定交易请求达成共识,并将目标操作结果,标识为交易请求的共识结果。
需要说明的是,目标操作结果为:客户端所接收到的各类操作结果中,出现次数最多的操作结果。
在传统的PBFT算法中,当检测到主节点出现异常(例如没有生成与交易请求对应的预备消息、未向从节点发送预备消息、宕机)时,则会将主节点标识为拜占庭节点(即异常节点),并重新选择新的主节点来替代拜占庭节点,即需执行视图切换。相较于传统的PBFT算法,基于本实施例所示方案,当检测到主节点出现异常后,只需利用备选主节点替代主节点即可,无需消耗时间去重新选择新的主节点,即无需执行视图切换,从而有效提高共识过程的运算效率。
S111:在检测到交易请求的共识过程中,存在异常的共识节点的情况下,依据每个共识节点在共识过程中的表现状况,以及预设的惩罚机制,对每个节点分组中各个节点的信用值进行调整,得到每个节点的最新信用值。
在执行S111之后,继续执行S114。
其中,预设的惩罚机制可以参见公式(4)所示。
在公式(4)中,Ci代表共识节点i的信用值,α和β均为预设常量、且α<β, Cj代表与共识节点i归属于同一节点分组、且向共识节点i投票的节点j的信用值,δ和γ均为预设常量、且δ<γ。此外,所谓的异常包括但不限于为:节点未产生区块、节点产生错误区块、节点宕机等现象。
可选的,依据每个共识节点在共识过程中的表现状况,对每个节点分组中各个节点的信用值进行调整,得到每个节点的最新信用值,包括:
对于每个共识节点,在确定共识节点在共识过程中的表现状况为无异常的情况下,提高共识节点的信用值,得到共识节点的最新信用值;提高目标节点的信用值,得到目标节点的最新信用值,并令非目标节点的信用值保持不变,得到非目标节点的最新信用值。其中,目标节点为:与共识节点归属于同一节点分组、且向共识节点投票的节点;非目标节点为:与共识节点归属于同一节点分组、且未向共识节点投票的节点。
在确定共识节点在共识过程中的表现状况为异常的情况下,降低共识节点的信用值,得到共识节点的最新信用值;降低目标节点的信用值,得到目标节点的最新信用值;并令非目标节点的信用值保持不变,得到非目标节点的最新信用值。
在本申请实施例中,节点的信用值提高的幅度较小,但信用值降低的幅度较大,为此,通过降低异常节点(即异常的共识节点)的信用值,以及降低向异常节点投票的节点的信用值,不仅可以促使区块链中各个节点诚实投票,提高各个节点的总票数的可靠性和合理性,还可以避免异常节点参与共识过程,从而提高整个电能交易系统的稳定性。
S112:统计每个节点连续未参与共识过程的次数,得到每个节点的信用损耗值。
其中,若节点连续未参与共识过程的次数较多,则代表节点的活跃程度较低,对于区块链中共识算法而言,参与共识过程的节点若不涵盖所有节点,只有部分节点参与共识过程的话,则会降低共识过程的运算效率和安全性。为了提高共识过程的运算效率和安全性,即为了提高节点的活跃程度,促使各个节点积极参加共识过程,引入对每个节点的信用损耗值,促使每个节点积极参与共识过程,节点只要积极参与共识过程,确保自身连续未参与共识过程的次数为零,就不会有信用损耗值,节点的信用值就不会损耗。
S113:依据每个节点的信用损耗值,对每个节点的信用值进行调整,得到每个节点的最新信用值。
其中,依据每个节点的信用损耗值,对每个节点的信用值进行调整,得到每个节点的最新信用值的具体实现过程,如公式(5)所示。
在公式(5)中,Ci代表节点的最新信用值,Ci-1代表节点的信用值,σ代表预设的惩罚因子,ι代表节点的信用损耗值。
需要说明的是,信用损耗值的引入,提升了各个节点的活跃度,确保了电能交易系统中有足够的节点参与共识过程,保障了电能交易系统的安全性。
S114:依据每个节点的最新信用值,重新确定新的共识节点。
其中,依据每个节点的最新信用值,重新确定新的共识节点的具体实现过程包括:
1、对于每个节点分组,控制节点分组中的各个节点根据预设投票策略互相投票,得到每个节点的最新赞同票数和最新反对票数。
2、依据每个节点的最新信用值、最新赞同票数和最新反对票数,计算得出每个节点的最新总票数。
3、选取节点分组中最新总票数最大的节点,作为节点分组的最新代理节点。
4、按照总票数由高到低的顺序,对各个最新代理节点进行排序,得到最新代理节点序列。
5、将最新代理节点序列中序位为第一位的最新代理节点,标识为最新主节点。
6、将最新代理节点序列中序位为第二位的最新代理节点,标识为最新备选主节点。其中,最新备选主节点用于:当最新主节点发生异常时,替代最新主节点执行交易请求的共识过程。
7、将最新代理节点序列中序位不为第一位和第二位的最新代理节点,均标识为最新从节点。
8、将最新主节点、最新备选主节点以及最新从节点,标识为新的共识节点。
综上所述,对各个节点进行划分,得到多个节点分组,控制节点分组中的各个节点根据预设投票策略互相投票,并基于节点的信用值、赞同票数和反对票数,计算得到每个节点的总票数,并依据总票数选出各个节点分组的代理节点参与共识过程,相较于现有技术,参与共识过程的节点数量明显减少,共识过程的运算效率得到明显提高,从而使得交易请求的处理效率得到提高。此外,根据代理节点的信用值,筛选出主节点以及备选主节点,当主节点异常时,可利用备选主节点替代主节点执行交易请求的共识过程,不仅提高了共识过程的运算效率,还提高了共识过程的安全性。依据每个共识节点在共识过程中的表现状况,对各个节点分组中的每个节点的信用值进行调整,确保异常节点、向异常节点投票的节点均受到惩罚(即信用值降低),从而避免不可靠的节点参与共识过程,提高共识过程的稳定性。
需要说明的是,上述实施例提及的S110,为本申请所述基于信用分组的节点选取方法的一种可选的实现方式。此外,上述实施例提及的S111,也为本申请所述基于信用分组的节点选取方法的一种可选的实现方式。为此,上述实施例提及的流程,可以概括为图2所述的方法。
如图2所示,为本申请实施例提供的另一种基于信用分组的节点选取方法的流程示意图,包括如下步骤:
S201:获取电能交易系统中各个节点的交易电量和信用值。
S202:对各个节点进行划分,得到多个节点分组。
其中,任意两个节点分组的交易电量总额之间的差值的绝对值不大于第一预设阈值,任意两个节点分组的信用值总额之间的差值的绝对值不大于第二预设阈值;交易电量总额为节点分组中的各个节点的交易电量的总和;信用值总额为节点分组中的各个节点的信用值的总和。
S203:对于每个节点分组,控制节点分组中的各个节点根据预设投票策略互相投票,得到每个节点的赞同票数和反对票数。
其中,预设投票策略为:向信用值较低的节点投反对票,以及向信用值较高的节点投赞同票。
S204:依据每个节点的信用值、赞同票数和反对票数,计算得出每个节点的总票数。
S205:选取节点分组中总票数最大的节点,作为节点分组的代理节点。
S206:从各个代理节点中选取总票数最大的代理节点,作为主节点,并将除主节点之外的其它代理节点,均标识为从节点。
其中,总票数最大的代理节点可能会有多个,然而,主节点却是唯一的,需要从总票数最大的所有代理节点中,选出一个代理节点,作为主节点。
可选的,从各个代理节点中,选取出总票数最大的所有代理节点,并从总票数最大的所有代理节点中,选取交易电量最大的代理节点,作为主节点。
此外,若是总票数最大的代理节点为两个,则选出交易电量最大的代理节点作为主节点,另外一个总票数最大的代理节点,作为备选主节点。
S207:基于主节点以及从节点,作为共识算法的共识节点,并利用各个共识节点对客户端发送的交易请求进行共识,得到交易请求的共识结果。
基于本实施例所示方案,对各个节点进行划分,得到多个节点分组,控制节点分组中的各个节点根据预设投票策略互相投票,并基于节点的信用值、赞同票数和反对票数,计算得到每个节点的总票数,并依据总票数选出各个节点分组的代理节点参与共识过程,相较于现有技术,参与共识过程的节点数量明显减少,共识过程的运算效率得到明显提高,从而使得交易请求的处理效率得到提高。此外,在选取代理节点时,控制各个节点分组中各个节点根据预设投票策略互相投票,并依据节点的信用值、赞同票数和反对票数计算总票数,能够充分筛选出可靠的节点作为代理节点,从而有效避免不可靠节点参与共识过程,确保共识过程不会因不可靠节点的参与而延长运算时间。
与上述本申请实施例提供的基于信用分组的节点选取方法相对应,本申请实施例还提供了一种基于信用分组的节点选取装置。
如图3所示,为本申请实施例提供的一种基于信用分组的节点选取装置的架构示意图,包括:
信息获取单元100,用于获取电能交易系统中各个节点的交易电量和信用值。
节点划分单元200,用于对各个节点进行划分,得到多个节点分组;其中,任意两个节点分组的交易电量总额之间的差值的绝对值不大于第一预设阈值,任意两个节点分组的信用值总额之间的差值的绝对值不大于第二预设阈值;交易电量总额为节点分组中的各个节点的交易电量的总和;信用值总额为节点分组中的各个节点的信用值的总和。
分组投票单元300,用于对于每个节点分组,控制节点分组中的各个节点根据预设投票策略互相投票,得到每个节点的赞同票数和反对票数;预设投票策略为:向信用值较低的节点投反对票,以及向信用值较高的节点投赞同票。
票数计算单元400,用于依据每个节点的信用值、赞同票数和反对票数,计算得出每个节点的总票数。
第一选取单元500,用于选取节点分组中总票数最大的节点,作为节点分组的代理节点。
其中,第一选取单元500具体用于:从节点分组所包含的各个节点中,选取出总票数等于目标数值的节点,作为候选节点;目标数值为:节点分组中所出现的最大总票数;在候选节点的数量为一个的情况下,将候选节点作为节点分组的代理节点;在候选节点的数量为多个的情况下,从各个候选节点中,选取出交易电量最大的候选节点,作为节点分组的代理节点。
第二选取单元600,用于从各个代理节点中选取总票数最大的代理节点,作为主节点,并将除主节点之外的其它代理节点,均标识为从节点。
其中,第二选取单元600具体用于:从各个代理节点中,选取出总票数最大的所有代理节点;从总票数最大的所有代理节点中,选取交易电量最大的代理节点,作为主节点。
第二选取单元600具体用于:按照总票数由高到低的顺序,对各个代理节点进行排序,得到代理节点序列;将代理节点序列中序位为第一位的代理节点,标识为主节点;将代理节点序列中序位为第二位的代理节点,标识为备选主节点;备选主节点用于:当主节点发生异常时,替代主节点执行交易请求的共识过程;将代理节点序列中序位不为第一位和第二位的代理节点,均标识为从节点。
节点利用单元700,用于基于主节点以及从节点,作为共识算法的共识节点,并利用各个共识节点对客户端发送的交易请求进行共识,得到交易请求的共识结果。
其中,节点利用单元700具体用于:基于主节点、备选主节点以及从节点,作为共识算法的共识节点。
节点惩罚单元800,用于在检测到交易请求的共识过程中,存在异常的共识节点的情况下,依据每个共识节点在共识过程中的表现状况,对每个节点分组中各个节点的信用值进行调整,得到每个节点的最新信用值。
其中,节点惩罚单元800具体用于:对于每个共识节点,在确定共识节点在共识过程中的表现状况为无异常的情况下,提高共识节点的信用值,得到共识节点的最新信用值;提高目标节点的信用值,得到目标节点的最新信用值;其中,目标节点为:与共识节点归属于同一节点分组、且向共识节点投票的节点;令非目标节点的信用值保持不变,得到非目标节点的最新信用值;非目标节点为:与共识节点归属于同一节点分组、且未向共识节点投票的节点。
节点惩罚单元800具体用于:对于每个共识节点,在确定共识节点在共识过程中的表现状况为异常的情况下,降低共识节点的信用值,得到共识节点的最新信用值;降低目标节点的信用值,得到目标节点的最新信用值;其中,目标节点为:与共识节点归属于同一节点分组、且向共识节点投票的节点;令非目标节点的信用值保持不变,得到非目标节点的最新信用值;非目标节点为:与共识节点归属于同一节点分组、且未向共识节点投票的节点。
节点损耗单元900,用于统计每个节点连续未参与共识过程的次数,得到每个节点的信用损耗值;共识过程为:利用共识节点对交易请求进行共识的过程;依据每个节点的信用损耗值,对每个节点的信用值进行调整,得到每个节点的最新信用值。
节点替换单元1000,用于依据每个节点的最新信用值,重新确定新的共识节点。
基于本实施例所示方案,对各个节点进行划分,得到多个节点分组,控制节点分组中的各个节点根据预设投票策略互相投票,并基于节点的信用值、赞同票数和反对票数,计算得到每个节点的总票数,并依据总票数选出各个节点分组的代理节点参与共识过程,相较于现有技术,参与共识过程的节点数量明显减少,共识过程的运算效率得到明显提高,从而使得交易请求的处理效率得到提高。此外,在选取代理节点时,控制各个节点分组中各个节点根据预设投票策略互相投票,并依据节点的信用值、赞同票数和反对票数计算总票数,能够充分筛选出可靠的节点作为代理节点,从而有效避免不可靠节点参与共识过程,确保共识过程不会因不可靠节点的参与而延长运算时间。
本申请还提供了一种计算机可读存储介质,计算机可读存储介质包括存储的程序,其中,程序执行上述本申请提供的基于信用分组的节点选取方法。
本申请还提供了一种基于信用分组的节点选取设备,包括:处理器、存储器和总线。处理器与存储器通过总线连接,存储器用于存储程序,处理器用于运行程序,其中,程序运行时执行上述本申请提供的基于信用分组的节点选取方法,包括如下步骤:
获取电能交易系统中各个节点的交易电量和信用值;
对各个所述节点进行划分,得到多个节点分组;其中,任意两个所述节点分组的交易电量总额之间的差值的绝对值不大于第一预设阈值,任意两个所述节点分组的信用值总额之间的差值的绝对值不大于第二预设阈值;所述交易电量总额为所述节点分组中的各个节点的交易电量的总和;所述信用值总额为所述节点分组中的各个节点的信用值的总和;
对于每个所述节点分组,控制所述节点分组中的各个节点根据预设投票策略互相投票,得到每个所述节点的赞同票数和反对票数;所述预设投票策略为:向信用值较低的节点投反对票,以及向信用值较高的节点投赞同票;
依据每个所述节点的信用值、赞同票数和反对票数,计算得出每个所述节点的总票数;
选取所述节点分组中总票数最大的节点,作为所述节点分组的代理节点;
从各个所述代理节点中选取总票数最大的代理节点,作为主节点,并将除所述主节点之外的其它代理节点,均标识为从节点;
基于所述主节点以及所述从节点,作为共识算法的共识节点,并利用各个所述共识节点对客户端发送的交易请求进行共识,得到所述交易请求的共识结果。
具体的,在上述实施例的基础上,所述选取所述节点分组中总票数最大的节点,作为所述节点分组的代理节点,包括:
从所述节点分组所包含的各个节点中,选取出总票数等于目标数值的节点,作为候选节点;所述目标数值为:所述节点分组中所出现的最大总票数;
在所述候选节点的数量为一个的情况下,将所述候选节点作为所述节点分组的代理节点;
在所述候选节点的数量为多个的情况下,从各个所述候选节点中,选取出交易电量最大的候选节点,作为所述节点分组的代理节点。
具体的,在上述实施例的基础上,从各个所述代理节点中选取总票数最大的代理节点,作为主节点,包括:
从各个所述代理节点中,选取出总票数最大的所有代理节点;
从所述总票数最大的所有代理节点中,选取交易电量最大的代理节点,作为主节点。
具体的,在上述实施例的基础上,所述从各个所述代理节点中选取总票数最大的代理节点,作为主节点,并将除所述主节点之外的其它代理节点,均标识为从节点,包括:
按照总票数由高到低的顺序,对各个所述代理节点进行排序,得到代理节点序列;
将所述代理节点序列中序位为第一位的代理节点,标识为主节点;
将所述代理节点序列中序位为第二位的代理节点,标识为备选主节点;所述备选主节点用于:当所述主节点发生异常时,替代所述主节点执行所述交易请求的共识过程;
将所述代理节点序列中序位不为第一位和第二位的代理节点,均标识为从节点;
所述基于所述主节点以及所述从节点,作为共识算法的共识节点,包括:
基于所述主节点、所述备选主节点以及所述从节点,作为共识算法的共识节点。
具体的,在上述实施例的基础上,还包括:
在检测到所述交易请求的共识过程中,存在异常的共识节点的情况下,依据每个所述共识节点在所述共识过程中的表现状况,对每个所述节点分组中各个节点的信用值进行调整,得到每个所述节点的最新信用值。
具体的,在上述实施例的基础上,所述依据每个所述共识节点在所述共识过程中的表现状况,对每个所述节点分组中各个节点的信用值进行调整,得到每个所述节点的最新信用值,包括:
对于每个所述共识节点,在确定所述共识节点在所述共识过程中的表现状况为无异常的情况下,提高所述共识节点的信用值,得到所述共识节点的最新信用值;
提高目标节点的信用值,得到所述目标节点的最新信用值;其中,所述目标节点为:与所述共识节点归属于同一节点分组、且向所述共识节点投票的节点;
令非目标节点的信用值保持不变,得到所述非目标节点的最新信用值;所述非目标节点为:与所述共识节点归属于同一节点分组、且未向所述共识节点投票的节点。
具体的,在上述实施例的基础上,所述依据每个所述共识节点在所述共识过程中的表现状况,对每个所述节点分组中各个节点的信用值进行调整,得到每个所述节点的最新信用值,包括:
对于每个所述共识节点,在确定所述共识节点在所述共识过程中的表现状况为异常的情况下,降低所述共识节点的信用值,得到所述共识节点的最新信用值;
降低目标节点的信用值,得到所述目标节点的最新信用值;其中,所述目标节点为:与所述共识节点归属于同一节点分组、且向所述共识节点投票的节点;
令非目标节点的信用值保持不变,得到所述非目标节点的最新信用值;所述非目标节点为:与所述共识节点归属于同一节点分组、且未向所述共识节点投票的节点。
具体的,在上述实施例的基础上,还包括:
统计每个所述节点连续未参与共识过程的次数,得到每个所述节点的信用损耗值;所述共识过程为:利用所述共识节点对所述交易请求进行共识的过程;
依据每个所述节点的信用损耗值,对每个所述节点的信用值进行调整,得到每个所述节点的最新信用值。
具体的,在上述实施例的基础上,还包括:
依据每个所述节点的最新信用值,重新确定新的共识节点。
本申请实施例方法所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本申请实施例对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,移动计算设备或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。