一种基于改进型聚类算法的区块链系统共识的方法和装置与流程

文档序号:18406736发布日期:2019-08-10 00:28阅读:358来源:国知局
一种基于改进型聚类算法的区块链系统共识的方法和装置与流程

本发明涉及区块链领域,特别是一种基于改进型聚类算法的区块链系统共识的方法和装置。



背景技术:

区块链技术是由多种已存在的技术(p2p网络、密码学等)组合形成的具有去中心化的记录技术。目前区块链没有统一的定义,维基百科上对区块链的定义是:区块链(bolckchain)是利用分布式的数据库对信息进行甄别、传播和记录的对等网络,简言之,区块链在本质上就是一个具有去中心化特征的分布式数据库,区块链技术从本质来说是一个分布式的数据库技术,网络内的节点利用密码学、共识算法、点对点通信等技术,共同维护全网数据的一致性和完整性。

现有区块链分为公有链、联盟链以及私有链三种形式,其中公有链目前实现共识的算法,主要有工作量证明(proofofwork,pow)、权益证明(proofofstack,pos)和股份授权证明(delegateproofofstack,dpos)等,而联盟链以及私有链因为自身特性的问题,不适合使用公有链的共识算法,一般联盟链以及私有链实现共识的算法主要是实用拜占庭容错算法(practicalbyzantinefaulttolerance,简写为:pbft)。

pbft是一种在分布式场景下,解决状态机副本一致性的算法,该算法可以在失效节点不超过(n-1)/3(n为集群节点总数)的情况下保证共识集群的安全性和一致性。在pbft算法中,假设副本复制服务由n个共识节点组成,服务由状态和操作组成,服务是具有确定性的,即相同状态下的操作在每个共识节点下执行所得到的结果都是相同的,并且每个共识节点在开始执行操作时,也必须拥有相同的状态。共识集群中所有的操作都在某一视图状态(view)中进行,且每一个视图状态下只存在唯一主节点。如图1所示:pbft共识过程的主要三阶段的数据传输流程示意图,副本节点由三种角色构成:客户端、主节点(leader)、从节点(follower1、follower2、follower3)。假设副本节点总数为r,系统对每个节点进行编号,得到0,1,2…,|r|-1。假设系统最大恶意节点数f,则f与r之间的关系如公式(1)所示:

|r|=3f+1(1)

下面为两种主要角色在集群中的具体任务:

(1)主节点:负责处理客户端发送的服务请求,将接收到的请求信息进行顺序编号,然后广播给其他从节点,等待共识集群对服务进行共识。

(2)从节点:接收主节点的请求共识消息,并对信息进行验证。在验证通过后,执行请求中的服务操作o,并将响应客户端<reply,v,t,c,i,r>消息,其中v为视图编号,i为从节点的编号,r为操作结果,返回给c。

pbft算法的共识过程主要流程分为三个阶段:预准备、准备、确认。

(1)预准备阶段:主节点收到客户端请求后,分配序号n给该请求。接着主节点将预准备消息广播给所有从节点,消息的格式为<<preprepare,v,n,d>,m>,其中v为视图编号,客户端消息内容为m,m的摘要为d。

(2)准备阶段:从节点收到主节点的预准备消息后,验证消息内容,验证的主要内容有:判断v是否是当前视图编号;验证消息内容m的摘要d,确保消息内容在传输过程中没有遭到篡改;预准备消息序号n需要满足公式(2),h和h为水线低位和高位,防止失效节点使用一个很大的序号消耗序号空间。

h≤n≤h(2)

通过上诉的内容验证后,从节点会将准备消息<prepare,v,n,d,i>广播给所有共识节点,其中i为节点编号;如果验证不通过,则丢弃此条预准备消息。

(3)确认阶段:当节点收到2n+1个来自不同节点的准备消息(包括自己)且验证结果都为真时,该节点进入确认阶段,将确认消息<commit,v,n,d,i>广播给所有共识节点。同时,它也会陆续接收并验证来自其它节点的确认消息,当收到了2n+1个有效确认消息(包括自己)后,就称该节点对此请求拥有了一个committedcertificate证书,或者说请求在这个节点上达到了committed状态,此时,只通过这一个节点,就断定该请求服务已经被共识集群中的大部分节点验证通过。当请求m到达commited状态后,该请求就可以进入提交阶段随后请求被所有节点执行。

现有的pbft算法应用在区块链系统中时,其所需要的启动节点数量少(最少4个),共识效率较高不需要大量算力维护,但也只适用于共识节点不多的情况下,当大量节点加入区块链系统时,由于其完全去中心化的特点,每个节点都需要执行三阶段的共识过程,使得网络中的通信次数与数据传输量大大增加,很有可能造成网络堵塞现象或出现网络风暴。当网络中共识节点数量增加时,其通信代价将变得非常高。pbft算法以牺牲性能为代价,也造成在此算法上搭建的区块链系统在网络通信成本上并不比中心化系统有优势。



技术实现要素:

鉴于上述问题,本发明提供一种基于改进型聚类算法的区块链系统共识的方法和装置,在保证了区块链系统安全性的前提下,提高了区块链系统的共识效率,降低了共识过程中的通信次数与数据传输量,使得区块链系统的使用更加广泛。

本发明实施例提供了一种基于改进型聚类算法的区块链系统共识的方法,所述区块链系统包括:多个共识节点;

所述区块链系统通过所述改进型聚类算法,对所述区块链中所有的共识节点进行聚类,形成多个簇,所述多个簇中的每一个簇包括:聚类中心节点和非聚类中心节点,一个簇包括多个共识节点,该簇包括的多个共识节点中的主节点即为该簇的聚类中心节点,该簇包括的多个共识节点中的从节点即为该簇的非聚类中心节点;

所述区块链系统通过所述改进型聚类算法,对所述多个簇进行分层,所述多个簇中的每个簇形成一个子共识集群,所述多个簇各自包括的聚类中心节点形成骨干共识集群;所述方法包括:

第一聚类中心节点接收多个请求,所述多个请求为所述第一聚类中心节点所属的子共识集群中的任一共识节点接收的交易内容,所述第一聚类中心节点为所述多个簇中任一个簇包括的聚类中心节点;

所述第一聚类中心节点将接收到的所述多个请求打包为区块;

所述第一聚类中心节点将所述区块广播至其所属的子共识集群中进行共识;

若所述区块通过所述第一聚类中心节点所属的子共识集群的共识验证,则所述第一聚类中心节点将通过子共识集群共识验证的区块广播至所述骨干共识集群中进行共识;

若通过子共识集群共识验证的区块通过所述骨干共识集群的共识验证,则所述骨干共识集群中每一个所述聚类中心节点都对通过所述骨干共识集群共识验证的区块进行数字签名,并广播至除自身之外其他的所有所述聚类中心节点,所述骨干共识集群中每一个所述聚类中心节点接收到多个所述数字签名,形成数字签名集合;

所述骨干共识集群中每一个所述聚类中心节点将接收到的数字签名集合和通过所述骨干共识集群共识验证的区块,打包成提交消息,并将提交消息广播至其所属的子共识集群中;

任一所述子共识集群中每一个所述非聚类中心节点接收到所述提交消息,对所述数字签名集合进行验证;

若所述数字签名集合通过验证,则执行对应于所述数字签名集合通过验证的区块的交易内容,并将该区块上链存储。

本发明实施例还提供了一种基于改进型聚类算法的区块链系统共识的装置,所述区块链系统包括:多个共识节点;

所述区块链系统通过所述改进型聚类算法,对所述区块链中所有的共识节点进行聚类,形成多个簇,所述多个簇中的每一个簇包括:聚类中心节点和非聚类中心节点,一个簇包括多个共识节点,该簇包括的多个共识节点中的主节点即为该簇的聚类中心节点,该簇包括的多个共识节点中的从节点即为该簇的非聚类中心节点;

所述区块链系统通过所述改进型聚类算法,对所述多个簇进行分层,所述多个簇中的每个簇形成一个子共识集群,所述多个簇各自包括的聚类中心节点形成骨干共识集群;所述装置包括:

接收模块,用于第一聚类中心节点接收多个请求,所述多个请求为所述第一聚类中心节点所属的子共识集群中的任一共识节点接收的交易内容,所述第一聚类中心节点为所述多个簇中任一个簇包括的聚类中心节点;

打包模块,用于所述第一聚类中心节点将接收到的所述多个请求打包为区块;

第一广播模块,用于所述第一聚类中心节点将所述区块广播至其所属的子共识集群中进行共识;

第二广播模块,用于若所述区块通过所述第一聚类中心节点所属的子共识集群的共识验证,则所述第一聚类中心节点将通过子共识集群共识验证的区块广播至所述骨干共识集群中进行共识;

数字签名广播模块,用于若通过子共识集群共识验证的区块通过所述骨干共识集群的共识验证,则所述骨干共识集群中每一个所述聚类中心节点都对通过所述骨干共识集群共识验证的区块进行数字签名,并广播至除自身之外其他的所有所述聚类中心节点,所述骨干共识集群中每一个所述聚类中心节点接收到多个所述数字签名,形成数字签名集合;

打包消息广播模块,用于所述骨干共识集群中每一个所述聚类中心节点将接收到的数字签名集合和通过所述骨干共识集群共识验证的区块,打包成提交消息,并将提交消息广播至其所属的子共识集群中;

接收验证模块,用于任一所述子共识集群中每一个所述非聚类中心节点接收到所述提交消息,对所述数字签名集合进行验证;

执行存储模块,用于若所述数字签名集合通过验证,则执行对应于所述数字签名集合通过验证的区块的交易内容,并将该区块上链存储。

与现有技术相比,本发明提供的一种基于改进型聚类算法的区块链系统共识的方法及装置,首先通过改进型聚类算法将区块链系统中的共识节点分成多个簇,形成子共识集群,再由簇中的聚类中心节点形成骨干共识集群,第一聚类中心节点接收多个请求后打包成区块,并广播至子共识集群进行共识,共识验证通过后,由第一聚类中心节点将该区块广播到骨干共识集群再次进行共识,并在共识验证通过后骨干共识集群中所有的聚类中心节点对区块进行数字签名,之后再由第一聚类中心节点将带有所有聚类中心节点数字签名的区块广播至自身所属的子共识集群,由子共识集群再次验证,若验证通过,则执行区块中的请求内容,并将该区块上链存储。该区块链系统通过改进型聚类算法将原pbft全局去中心化共识,改进为两次小范围内的去中心化共识,这样分层次的区块链共识获得更高的共识效率,可以更好地控制节点运行时消耗的算力资源。相比现有pbft每次共识都需要所有的节点间进行数据传输推进共识过程,基于改进型聚类算法的区块链系统共识降低了单次共识所需要的通信次数以及数据传输量,极大的提高了整个区块链系统的工作效率。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1是现有pbft共识过程的主要三阶段的数据传输流程示意图;

图2是本发明一种基于改进型聚类算法的区块链系统共识方法的流程图;

图3是本发明步骤106之后的步骤流程图;

图4是本发明实施例拓扑生成器生成的聚类中心节点及其簇的网络拓扑示意图;

图5是本发明实施例k-pbft共识算法与现有pbft共识算法进行单次共识耗时的图表;

图6是本发明实施例对比k-pbft共识算法与现有pbft共识算法相同共识节点数量下的通信次数比值曲面函数的示意图;

图7是本发明实施例1000个共识节点,k个聚类情况下,k-pbft的通信次数的图表。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。应当理解,此处所描述的具体实施例仅用以解释本发明,仅仅是本发明一部分实施例,而不是全部的实施例,并不用于限定本发明。

如何解决现有pbft算法应用在联盟链或者私有链的区块链系统中,网络中通信次数与数据量传输的数量巨大的问题是一个世界性的难题,发明人通过深入的研究联盟链或者私有链的区块链系统,发现在私有链和联盟链这两种非公有链中,往往存在一定的上层领导节点,这类节点是被社会普遍承认的公信度极高的节点,这种节点往往是一些大型公司或者政府部门在使用的服务器,由于资金的投入量不同,这些服务器的网络安全措施和建立网络宽带的硬件设备,网络平均延迟等多种特征值普遍优于普通用户的个人计算机节点,结合联盟链或者私有链的区块链系统以上的特点,发明人大胆的、创造性的提出了将区块链系统中的所有共识节点按照一定的规则或者性质,划分成多个小范围的集群,并且单独摘出主节点形成另一集群,在保证了区块链系统的唯一性、安全性、不可篡改性等优点的基础上,极大的减少了pbft算法应用在区块链系统实现共识机制产生的通信次数与数据量传输的数量。

小范围集群实现共识机制产生的通信次数与数据量传输的数量相较于现有技术减少的数量是巨大的,单独摘出主节点形成另一集群实现共识机制产生的通信次数与数据量传输的数量,由于主节点数量少,所以其数据传输的数量也少。但如何可以正确、快速的将区块链系统中的所有共识节点按照一定的规则或者性质,划分成多个小范围的集群,并且单独摘出主节点形成另一集群又是一个难题,发明人经过大量的反复计算、推演以及实地操作,再一次创造性改进了聚类算法(k-medoids算法),再结合改进型的k-medoids算法来对区块链系统中的所有共识节点进行分类和分层,达到了正确、快速的将区块链系统中的所有共识节点按照一定的规则或者性质,划分成多个小范围的集群,并且单独摘出主节点形成另一集群的效果。下文将对发明人提出的方案进行具体的解释和说明。

参照图2,示出了一种基于改进型聚类算法的区块链系统共识方法的流程图,该区块链系统包括:多个共识节点;区块链系统通过改进型聚类算法,对区块链中所有的共识节点进行聚类,形成多个簇,该多个簇中的每一个簇包括:聚类中心节点和非聚类中心节点,一个簇包括多个共识节点,该簇包括的多个共识节点中的主节点即为该簇的聚类中心节点,该簇包括的多个共识节点中的从节点即为该簇的非聚类中心节点,区块链系统通过改进型聚类算法,对多个簇进行分层,多个簇中的每个簇形成一个子共识集群,多个簇各自包括的聚类中心节点形成骨干共识集群。

基于改进型聚类算法的区块链系统共识方法包括如下步骤:

步骤101:第一聚类中心节点接收多个请求,多个请求为第一聚类中心节点所属的子共识集群中的任一共识节点接收的交易内容,第一聚类中心节点为多个簇中任一个簇包括的聚类中心节点。

本发明实施例中,一个联盟链或者私有链区块链系统包括:多个共识节点;首先区块链系统通过改进型聚类算法(k-medoids算法),对区块链中所有的共识节点进行聚类,形成多个簇,多个簇中的每一个簇包括多个共识节点,该簇包括的共识节点的主节点即为该簇内的聚类中心节点,该簇包括的共识节点的从节点即为该簇内的非聚类中心节点;之后区块链系统通过改进型k-medoids算法对多个簇进行分层,多个簇中的每一个簇形成一个子共识集群,每一个簇各自包括的聚类中心节点形成骨干共识集群。

作为示例,一个联盟链或者私有链区块链系统包括400个共识节点,通过改进型k-medoids算法将这400个共识节点分成4个簇,对这4个簇进行编号:a、b、c、d,其中a0为a簇中的聚类中心节点(即主节点),剩余的a1~a99为a簇中的非聚类中心节点(即从节点),其余编号的簇与a簇情况完全一致,即b0为b簇中的聚类中心节点(即主节点),剩余的b1~b99为b簇中的非聚类中心节点(即从节点),c0为c簇中的聚类中心节点(即主节点),剩余的c1~c99为c簇中的非聚类中心节点(即从节点),d0为d簇中的聚类中心节点(即主节点),剩余的d1~d99为d簇中的非聚类中心节点(即从节点),那么a簇为一个子共识集群,b簇为一个子共识集群,c簇为一个子共识集群,d簇为一个子共识集群,从而a0、b0、c0、d0又形成骨干共识集群。具体如何通过改进型k-medoids算法将400个共识节点分成4个子共识集群和1个骨干共识集群,会在后续文中的改进型k-medoids算法进行详细的解释和说明。

当一个联盟链或者私有链区块链系统中任何一个共识节点接收到一个新的交易内容(即为一个新请求),都会将该新请求广播到接收到新交易内容的共识节点所属的子共识集群的主节点(即第一聚类中心节点),主节点自身也可能会接收到新请求,所有新请求都会广播给主节点。继续沿用上述示例,例如b簇中b12和b23的从节点接收到新的交易内容,都会广播给b簇的主节点b0。

步骤102:第一聚类中心节点将接收到的多个请求打包为区块。

本发明实施例中,当第一聚类中心节点接收到一定数量的请求后,就会将接收到的请求打包成一个区块。继续沿用上述示例,例如:c簇的聚类中心节点(即第一聚类中心节点)接收到10个请求之后,将这10个请求打包成一个区块。

步骤103:第一聚类中心节点将区块广播至其所属的子共识集群中进行共识。

本发明实施例中,第一聚类中心节点将接收的请求打包成区块后,就将该区块广播至其所属的子共识集群中进行共识。这样做的好处是在保证请求的唯一性、安全性、不可篡改性等特性的基础上,同时减少了区块链系统实现共识机制产生的通信次数与数据量传输的数量,若是每接收一个新的请求,第一聚类中心节点都将其打包成一个区块,广播到子共识集群中进行一次共识,那么整个区块链系统实现共识机制产生的通信次数与数据量传输的数量是极为巨大的,对网络资源和节点性能的消耗也是巨大的,运行成本也很高昂。继续沿用上述示例,例如:d簇有100个共识节点,其聚类中心节点(即第一聚类中心节点)将10个请求打包而成的区块广播到d簇中进行共识,只需进行一次共识,若是每一个请求都打包成一个区块再进行共识,那么就需要进行10次共识,而因一次共识采用现有的pbft算法实现就需要100个节点都执行三阶段的共识过程,那么10次共识所产生的通信次数与数据量传输的数量就即为庞大,因此对10个请求只进行一次共识所产生的通信次数与数据量传输的数量相比较来说就少的多。

可选地,步骤103之后还包括:

步骤104a:若区块通过第一聚类中心节点所属的子共识集群的共识验证,则第一聚类中心节点将通过子共识集群共识验证的区块广播至骨干共识集群中进行共识。

本发明实施例中,若是第一聚类中心节点打包的区块通过其所属的子共识集群的共识验证,则第一聚类中心节点将通过子共识集群共识验证的区块广播至骨干共识集群中进行共识。这样做的好处一是保证了区块的唯一性、安全性、不可篡改性等区块链系统必须要具备的特性,二是极大的减少了区块链系统共识产生的通信次数与数据量传输的数量。继续沿用上述示例,例如d簇的聚类中心节点d0将通过自身所属子共识集群共识验证的区块广播至骨干共识集群中,骨干共识集群中一共有4个聚类中心节点:a0、b0、c0、d0,那么d0广播通过自身所属子共识集群共识验证的区块进行共识就只需要这4个聚类中心节点采用pbft进行一次共识即可,若是没有这个骨干共识集群,那么d0需要将通过自身所属子共识集群共识验证的区块广播至区块链系统中其余300个共识节点采用pbft进行共识,而这300个共识节点都需要执行三阶段的共识过程,那么300个共识节点进行共识产生的通信次数与数据量传输的数量多的惊人,对网络资源和节点性能的消耗巨大,甚至可能会拖垮整个网络,并且需要每个共识节点自身的硬件性能非常好,因素会造成运行成本很高昂。

步骤104b:若区块未通过第一聚类中心节点所属的子共识集群的共识验证,则第一聚类中心节点将未通过子共识集群共识验证的区块,记录为违约请求。

本发明实施例中,若是第一聚类中心节点打包的区块未通过其所属的子共识集群的共识验证,则第一聚类中心节点将该区块对应的请求记录为违约请求。违约请求可以被上级监督部门或者用户查看到。需要说明的是,假设这个区块是由10个请求打包而成的,只要其中有一个请求未通过共识验证,那么认为该区块未通过共识验证,记录的违约请求是未通过共识验证的那一个请求,其它9个请求不记录,其它9个请求可以重新再次提出,虽然这样会稍微延长其他9个请求后续的执行和上链的时间,但相较于每一个请求进行一次共识产生的通信次数与数据量传输的数量以及所需要的时间来讲,采用本发明方案更好。

步骤105a:若通过子共识集群共识验证的区块通过骨干共识集群的共识验证,则骨干共识集群中每一个聚类中心节点都对通过骨干共识集群共识验证的区块进行数字签名,并广播至除自身之外其他的所有聚类中心节点,骨干共识集群中每一个聚类中心节点接收到多个数字签名,形成数字签名集合。

本发明实施例中,若通过子共识集群共识验证的区块通过骨干共识集群的共识验证,则骨干共识集群中每一个聚类中心节点都对通过骨干共识集群共识验证的区块进行数字签名。继续沿用上述示例,例如d0聚类中心节点广播的通过自身所属子共识集群共识验证的区块,又通过了a0、b0、c0、d0形成的骨干共识集群的共识验证,则a0、b0、c0、d0分别对该通过骨干共识集群共识验证的区块进行数字签名,以保证该通过骨干共识集群共识验证的区块的真实性和有效性。

每一个聚类中心节点都对通过骨干共识集群共识验证的区块进行数字签名之后,第一聚类中心节点将带有数字签名的区块进行广播,使得每一个聚类中心节点都收到该带有数字签名的区块,并且形成数字签名的集合,每一个聚类中心节点都会形成一样的数字签名集合。继续沿用上述示例,例如d0聚类中心节点广播的通过自身所属子共识集群共识验证的区块,通过了骨干共识集群的共识验证,该区块就会带有a0、b0、c0、d0各自的数字签名a0'、b0'、c0'、d0',之后d0聚类中心节点将带有a0'、b0'、c0'、d0'数字签名的区块广播,a0、b0、c0就接收到带有a0'、b0'、c0'、d0'数字签名的区块,并且各自形成数字签名集合(a0'、b0'、c0'、d0')

步骤105b:若通过子共识集群共识验证的区块未通过骨干共识集群的共识验证,则骨干共识集群中任一聚类中心节点将通过子共识集群共识验证的区块,记录为违约请求。

本发明实施例中,若通过子共识集群共识验证的区块未通过骨干共识集群的共识验证,则骨干共识集群中任一聚类中心节点将通过子共识集群共识验证的区块,记录为违约请求。继续沿用上述示例,例如d0聚类中心节点广播的通过自身所属子共识集群共识验证的区块,未通过a0、b0、c0、d0形成的骨干共识集群的共识验证,则a0、b0、c0、d0都会将该区块对应的请求记录为违约请求,同样的,违约请求可以被上级监督部门或者用户查看到,假设这个区块是由10个请求打包而成的,只要其中有一个请求未通过共识验证,那么认为该区块未通过共识验证,记录的违约请求是未通过共识验证的那一个请求,其它9个请求不记录,其它9个请求可以重新再次提出,再次提出请求之后依然要重复以上过程。

步骤106:骨干共识集群中每一个聚类中心节点将接收到的数字签名集合和通过骨干共识集群共识验证的区块,打包成提交消息,并将提交消息广播至其所属的子共识集群中。

本发明实施例中,骨干共识集群中每一个聚类中心节点将接收到的数字签名集合和通过骨干共识集群共识验证的区块,打包成提交消息。继续沿用上述示例,例如骨干共识集群中每一个聚类中心节点a0、b0、c0、d0都接收到带有a0'、b0'、c0'、d0'数字签名的区块,将带有a0'、b0'、c0'、d0'数字签名的区块和数字签名集合(a0'、b0'、c0'、d0')打包成提交消息。之后将该提交消息广播至其所属的子共识集群中,例如a0将该提交消息广播至a簇、b0将该提交消息广播至b簇、c0将该提交消息广播至c簇、d0将该提交消息广播至d簇,彼此之间并不互相广播,与以上描述相同的原因,只将提交消息广播至自身所属的子共识集群中,同样在保证了区块的唯一性、安全性、不可篡改性等区块链系统必须要具备的特性的同时,极大的减少了区块链系统共识产生的通信次数与数据量传输的数量。

可选地,骨干共识集群中的每一个聚类中心节点都包括:自身的节点编号,参照图3,步骤106之后还包括:

步骤106a:区块链系统确定骨干共识集群中所有聚类中心节点广播的区块中的末尾区块的块编号;

本发明实施例中,在骨干共识集群中的每一个聚类中心节点都包括:自身的节点编号,继续沿用上述示例,例如骨干共识集群中聚类中心节点a0包括一个自身的节点编号0、聚类中心节点b0包括一个自身的节点编号1、聚类中心节点c0包括一个自身的节点编号2、聚类中心节点d0包括一个自身的节点编号3,而每当其中任何一个聚类中心节点将通过自身所属的子共识集群共识验证的区块广播至骨干共识集群时,都会自动生成一个对应该区块的块编号,该块编号为按照时间顺序排列。继续沿用上述示例,例如聚类中心节点a0在9102年8月9日10:00分将通过a簇共识验证的区块广播至骨干共识集群,其自动生成的块编号就为1、聚类中心节点b0在9102年8月9日10:01分将通过b簇共识验证的区块广播至骨干共识集群,其自动生成的块编号为2、聚类中心节点c0在9102年8月9日10:02分将通过c簇共识验证的区块广播至骨干共识集群,并自动生成的块编号为3、聚类中心节点d0在9102年8月9日10:03分将通过d簇共识验证的区块广播至骨干共识集群,并自动生成的块编号为4。

步骤106b:区块链系统根据骨干共识集群中聚类中心节点的数量和末尾区块的块编号,进行取模运算;

本发明实施例中,在区块链系统建立好骨干共识集群之后,如何用一个规则去保证骨干共识集群中所有聚类中心节点可以正常的实现区块链系统的共识,又是一个待解决的问题。因为现有的pbft实现共识机制,只要发生请求,区块链系统就会利用pbft去进行共识,若是同时有多个请求时,可以按照时间先后顺序去依次进行共识,不需要考虑主节点是否需要按照一定的规则去发起广播和进行共识,但本发明由于将主节点(聚类中心节点)单独形成一个骨干共识集群,为了保证骨干共识集群中所有的聚类中心节点可以正常的实现区块链系统的共识,发明人经过大量研究,创造性的结合取模运算,完美的解决了这个问题。

在区块链初次运行时,区块链系统根据骨干共识集群中聚类中心节点的数量和末尾区块的块编号,进行取模运算。继续沿用上述示例,例如首先从编号0(a0)的聚类中心节点开始广播通过自身所属子共识集群共识验证的区块,编号0的聚类中心节点广播通过自身所属子共识集群共识验证的区块自动生成块编号1,用该块编号与骨干共识集群中聚类中心节点的节点个数进行取模运算,得到的结果即为下一个需要进行广播区块的聚类中心节点的节点编号,在区块链系统确定骨干共识集群中所有聚类中心节点广播的区块中的末尾区块的块编号。继续沿用上述示例,例如:骨干共识集群共有4个聚类中心节点,编号0(a0)的聚类中心节点广播的区块的块编号为1,那么用1与4进行取模运算,得到的结果为1,即下一个需要进行广播区块的聚类中心节点的节点编号就为1,节点编号为1的聚类中心节点是b0,则在a0广播区块,并完成骨干共识集群的共识验证、数字签名以及广播至a簇之后,就轮到b0聚类中心节点广播通过b簇共识验证的区块;b0聚类中心节点广播的区块的块编号为2,用2与4进行取模运算,得到的结果为2,即下一个需要进行广播区块的聚类中心节点的节点编号就为2,节点编号为2的聚类中心节点是c0,在b0广播区块,并完成骨干共识集群的共识验证、数字签名以及广播至b簇之后,就轮到c0聚类中心节点广播通过c簇共识验证的区块;c0聚类中心节点广播的区块的块编号为3,用3与4进行取模运算,得到的结果为3,即下一个需要进行广播区块的聚类中心节点的节点编号就为3,节点编号为3的聚类中心节点是d0,在c0广播区块,并完成骨干共识集群的共识验证、数字签名以及广播至c簇之后,就轮到d0聚类中心节点广播通过d簇共识验证的区块;d0聚类中心节点广播的区块的块编号为4,用4与4进行取模运算,得到的结果为0,即下一个需要进行广播区块的聚类中心节点的节点编号就为0,节点编号为0的聚类中心节点是a0,在d0广播区块,并完成骨干共识集群的共识验证、数字签名以及广播至d簇之后,就又轮到a0聚类中心节点广播通过a簇共识验证的区块。采用如此的轮询方式就完美的实现了骨干共识集群中所有聚类中心节点的共识,并且保证所有聚类中心节点都按照这个顺序去广播通过自身所属子共识集群共识验证的区块。

步骤106c:区块链系统根据取模运算的结果,确定下一个需要进行广播区块的聚类中心节点的节点编号。

本发明实施例中,区块链系统利用取模运算,得到取模运算的结果,再根据取模运算的结果,就确定了下一个需要进行广播区块的聚类中心节点的节点编号。继续沿用上述示例,例如d0聚类中心节点此时广播的区块的块编号为216,用216与4进行取模运算,得到的结果为0,即下一个需要进行广播区块的聚类中心节点的节点编号就为0,节点编号为0的聚类中心节点是a0,在d0广播区块,并完成骨干共识集群的共识验证、数字签名以及广播至d簇之后,就又轮到a0聚类中心节点广播通过a簇共识验证的区块。

步骤106d:若下一个需要进行广播区块的聚类中心节点没有接收任何请求,则下一个需要进行广播区块的聚类中心节点将打包一个空区块;

本发明实施例中,在骨干共识集群中聚类中心节点采用轮询方式进行共识的过程中,会出现轮询到一个聚类中心节点时,该聚类中心节点并没有任何通过自身所属子共识集群共识验证的区块需要广播的情况,此时就需要该聚类中心节点打包一个空区块,以此来推动整个轮询的过程。继续沿用上述示例,例如此时轮到b0聚类中心节点广播的区块,但b0聚类中心节点并无需要向骨干共识集群广播的通过b簇共识验证的区块,那么b0聚类中心节点就自动打包一个空区块。

步骤106e:下一个需要进行广播区块的聚类中心节点将空区块广播至骨干共识集群中进行共识。

本发明实施例中,当需要进行广播区块的聚类中心节点打包好空区块后,将该空区块广播至骨干共识集群中进行共识。继续沿用上述示例,例如此时轮到b0聚类中心节点广播的区块,b0聚类中心节点并无需要向骨干共识集群广播的通过b簇共识验证的区块,b0聚类中心节点就自动打包一个空区块该空区块的块编号为214,用214与4进行取模运算,得到的结果为2,即下一个需要进行广播区块的聚类中心节点的节点编号就为2,节点编号为2的聚类中心节点是c0,在b0广播该空区块,并完成骨干共识集群的共识验证、数字签名以及广播至b簇之后,就又轮到c0聚类中心节点广播通过c簇共识验证的区块。

步骤107:任一子共识集群中每一个非聚类中心节点接收到提交消息,对数字签名集合进行验证。

本发明实施例中,在骨干共识集群中每一个聚类中心节点都将提交消息广播至其所属的子共识集群之后,其所属的子共识集群中每一个非聚类中心节点都接收到提交消息,接收之后再对提交消息中的数字签名集合进行验证。继续沿用上述示例,例如:a0将提交消息(带有a0'、b0'、c0'、d0'数字签名的区块和数字签名集合)广播至a簇,a簇中每一个非聚类中心节点都接收到该提交消息,a簇中每一个非聚类中心节点都对数字签名集合(a0'、b0'、c0'、d0')进行验证;b0将提交消息(带有a0'、b0'、c0'、d0'数字签名的区块和数字签名集合(a0'、b0'、c0'、d0'))广播至b簇,b簇中每一个非聚类中心节点都接收到该提交消息,b簇中每一个非聚类中心节点都对数字签名集合(a0'、b0'、c0'、d0')进行验证;c0将提交消息(带有a0'、b0'、c0'、d0'数字签名的区块和数字签名集合)广播至c簇,c簇中每一个非聚类中心节点都接收到该提交消息,c簇中每一个非聚类中心节点都对数字签名集合(a0'、b0'、c0'、d0')进行验证;d0将提交消息(带有a0'、b0'、c0'、d0'数字签名的区块和数字签名集合)广播至d簇,d簇中每一个非聚类中心节点都接收到该提交消息,d簇中每一个非聚类中心节点都对数字签名集合(a0'、b0'、c0'、d0')进行验证。

可选地,步骤107之后还包括:

步骤108a:若数字签名集合通过验证,则执行对应于数字签名集合通过验证的区块的交易内容,并将该区块上链存储。

本发明实施例中,若是数字签名集合通过验证,则执行对应于数字签名集合通过验证的区块中包含的交易内容,并将该区块上链存储。继续沿用上述示例,例如a簇中每一个非聚类中心节点都对数字签名集合(a0'、b0'、c0'、d0')进行验证,并且验证通过,则a簇中所有共识节点都执行对应数字签名集合(a0'、b0'、c0'、d0')的区块中包含的交易内容,在执行完之后,将该区块上链存储;b簇中每一个非聚类中心节点都对数字签名集合(a0'、b0'、c0'、d0')进行验证,并且验证通过,则b簇中所有共识节点都执行对应数字签名集合(a0'、b0'、c0'、d0')的区块中包含的交易内容,在执行完之后,将该区块上链存储;c簇中每一个非聚类中心节点都对数字签名集合(a0'、b0'、c0'、d0')进行验证,并且验证通过,则c簇中所有共识节点都执行对应数字签名集合(a0'、b0'、c0'、d0')的区块中包含的交易内容,在执行完之后,将该区块上链存储;d簇中每一个非聚类中心节点都对数字签名集合(a0'、b0'、c0'、d0')进行验证,并且验证通过,则d簇中所有共识节点都执行对应数字签名集合(a0'、b0'、c0'、d0')的区块中包含的交易内容,在执行完之后,将该区块上链存储。这样整个区块链系统就完成了一次区块正确上链操作。

步骤108b:若数字签名集合未通过验证,则由对应于数字签名集合未通过验证的非聚类中心节点,向上级举报该非聚类中心节点所属的子共识集群中的聚类中心节点。

本发明实施例中,若是数字签名集合未通过验证,则认为广播该数字签名集合对应的提交消息的聚类中心节点存在恶意行为,由对应于数字签名集合未通过验证的非聚类中心节点,向上级举报该非聚类中心节点所属的子共识集群中的聚类中心节点,达到从节点向上监督的作用,上级一般指区块链运营者或监督者,由上级确定该聚类中心节点是否存在恶意行为,若是存在,那么就需要更换该聚类中心节点;若是该聚类中心节点不存在恶意行为,则上级需要确定该聚类中心节点所属子共识集群的非聚类中心节点(从节点)是否存在恶意或者故障,若是存在则需要更换从节点。

需要说明的是,骨干共识集群中进行共识的过程和子共识集群中进行共识的过程可以并行进行,例如a0将提交消息广播至a簇之后,a0将继续参与骨干共识集群的共识,同时a簇中的非聚类中心节点将进行数字签名验证,两者并不冲突。现有区块链系统需要所有共识节点都参与进行共识,自然整个区块链系统进行共识需要的时间就较长,而本发明这种分层式的结构,可以并行进行共识,这样的话会极大的缩减整个区块链系统进行共识的需要的时间,从而极大的提高整个区块链系统的工作效率。

下面结合对共识节点聚类和分层的方法来解释和说明改进型k-medoids算法。首先大体讲下现有k-medoids算法,k-medoids算法也属于基于划分的聚类算法,其算法过程如下。

假设有n个p维特征的对象节点作为聚类数据集。用vi={vi1,vi2,vi3…,vip},i={1,2,...,n},表示第i个节点映射在p维特征空间rp的一个坐标值。可将上述所有的节点数据集v={v1,v2,…,vn}表达为公式(3):

k-medoids算法使用欧氏距离来表达两个节点的相似度,利用下面公式(4)来表示两个节点vi、vk的距离函数。

k-medoids的目标是将数据集聚类成为k个簇,每个簇用vi表示。每个vi有一个ci代表聚类中心节点,所有中心节点集用c={c1,c2,…,ck}来表示。属于vi簇内的节点vi与同一簇内的其他节点相似度较高,与其他簇内节点的相似度较低。并且有v=∪1≤k≤kvk,则|v|表示整个数据集合样本个数n,|vk|表示第k个聚类中的节点个数。为了方便表达这种算法策略,引入隶属函数如公式(5)所示:

于是可以定义k-medoids算法的目标函数公式(6):

并对算法过程数学建模如下:

mint(c)

s.t.c={v1,v2,…,vk}

c={c1,c2,…,ck}

v=∪1≤k≤kvk(7)

k-medoids算法集合区块链系统中共识节点进行聚类和分层的过程:

步骤1:在数据集v中随机选取k个节点作为初始簇中心节点集;

步骤2:根据公式(4)、(5)计算每一个节点距离k个簇中心的距离函数和隶属函数;

步骤3:对每个簇中除簇中心点外的其他节点计算到簇内所有点的距离和,将拥有距离最小值的节点作为新的聚类中心节点;

步骤4:如果新的中心点集与原中心点集相同,算法终止返回最终聚类结果;如果新的中心点集与原中心点集不完全相同,返回步骤3继续。

由于k-medoids算法每次递代过程都需要反复计算簇内所有节点到其他节点的距离,增加了算法的计算复杂度。结合联盟链或者私有链区块链的具体应用场景,其参与区块链共识的节点集群数量不稳定,硬件条件参差不齐,且运行的环境条件不确定,所以在一般情况下,高层监督者或者运营商选择出初始簇中心节点后,可能并不希望浪费共识集群的计算资源去频繁更换簇内中心,综合以上原因,发明人经过大量的计算和实地测试,对k-medoids算法结合区块链场景做出改进。

结合改进后的k-medoids算法对区块链系统中共识节点聚类、分层的好处是:通过改进后的k-medoids算法将现有pbft的去中心化共识改进为两次小范围内的去中心化共识。具体进行时,在节点特征空间坐标系中,可以考虑网络平均延迟,地理空间位置等特征,利用改进型k-medoids算法将网络通信延迟小的节点集合成为一个簇,簇中心节点应是簇内硬件环境和网络环境等多种特征中条件较好的节点,分层次的区块链共识获得更高的共识效率,将pbft的完全去中心化改变成为多中心化共识。因此将现有k-medoids算法运用于区块链环境下,初始的k个中心节点的选择并不能像一般默认情况下随机选择出来的,而是上层监督者或者运营商通过了严格审查,筛选出社会公信度较高的节点成为初始化的聚类中心节点,在这种情况下一般不希望再对中心节点进行调整,改进型k-medoids算法可以更好的控制簇中心节点更换的概率。改进型k-medoids算法流程步骤如下:

步骤1:区块链系统在多个共识节点形成的集合中,选取预设数量的共识节点作为每一个簇的初始中心节点,形成初始骨干共识集群中的初始聚类中心节点集合,并设定惰性系数。例如:在数据集v(多个共识节点形成的集合)中选取k个节点作为每一个簇的初始中心节点,并初始化惰性系数p(0<p<1)。

步骤2:区块链系统根据初始中心节点,确定多个共识节点形成的簇。即以初始中心节点为一个簇的初始中心节点,计算其余所有非初始中心节点与初始中心节点的相似度。例如:根据公式(4)和(5)首先计算所有节点到k个初始中心节点的距离函数和隶属函数,最终使得一个簇内的节点与该簇内的其他节点相似度较高,与其他簇内节点的相似度较低,这样就聚类成为k个簇。

步骤3:区块链系统对所有簇中除该簇的初始中心节点之外的每一个共识节点,计算该共识节点到该簇中其他剩余共识节点的距离和,将距离和的值最小的一个共识节点作为该簇中待定的新初始中心节点,并形成初始骨干共识集群中待定的新初始聚类中心节点集合。例如:对每个簇中除该簇中心点外的其他节点,计算到簇内所有点的距离和,将拥有距离最小值的节点作为待定新聚类中心节点,最终得到待定新聚类中心节点集合。

步骤4:若待定的新初始聚类中心节点集合与初始聚类中心节点集合相同,则确定初始聚类中心节点集合为骨干共识集群中的聚类中心节点。例如:如果待定新中心节点集与原中心节点集相同,算法终止返回最终聚类结果;如果待定新中心节点集与原中心节点集不完全相同,中心节点集将在p概率下替换为步骤3中的待定新聚类中心节点集并返回步骤3,在(1-p)概率下算法终止返回最终聚类结果。

例如:区块链系统有400个共识节点,由上级监督者或者运营商选取4个初始聚类中心节点,形成集合(a0、b0、c0、d0),设定惰性系数p为0.02,根据公式(4)和(5)首先计算所有节点到4个初始聚类中心节点的距离函数和隶属函数,最终使得一个簇内的节点与该簇内的其他节点相似度较高,与其他簇内节点的相似度较低,这样就聚类成为4个簇:a簇、b簇、c簇、d簇。之后再对每个簇中除该簇聚类中心节点外的其他节点,计算到簇内所有点的距离和,将拥有距离最小值的节点作为待定新聚类中心节点,最终得到待定新聚类中心节点集合,假设为(a0'、b0'、c0'、d0'),若是新聚类中心节点集合(a0'、b0'、c0'、d0')与初始聚类中心节点集合(a0、b0、c0、d0)完全相同(a0==a0'&&b0==b0'&&c0==c0'&&d0==d0'),则算法终止返回最终聚类结果,确定最终的骨干共识集群的聚类中心节点为a0、b0、c0、d0。

若是新聚类中心节点集合(a0'、b0'、c0'、d0')与初始聚类中心节点集合(a0、b0、c0、d0)不完全相同(a0!=a0'||b0!=b0'||c0!=c0'||d0!=d0'),则在p概率下(2%)用新聚类中心节点集合(a0'、b0'、c0'、d0')替换初始聚类中心节点集合(a0、b0、c0、d0),并重复上述步骤3,再次得到另一个新聚类中心节点集合(a0″、b0″、c0″、d0″),之后再一次对比另一新聚类中心节点集合(a0″、b0″、c0″、d0″)与新聚类中心节点集合(a0'、b0'、c0'、d0')是否完全相同,若相同则算法终止返回最终聚类结果,确定最终的骨干共识集群的聚类中心节点为a0'、b0'、c0'、d0',若是不同则继续在p概率下(2%)用另一新聚类中心节点集合(a0″、b0″、c0″、d0″)替换新聚类中心节点集合(a0'、b0'、c0'、d0')重复步骤3直到选出最终的骨干共识集群的聚类中心节点。

另一种情况,若是新聚类中心节点集合(a0'、b0'、c0'、d0')与初始聚类中心节点集合(a0、b0、c0、d0)不完全相同(a0!=a0'||b0!=b0'||c0!=c0'||d0!=d0'),则在1-p概率下(98%)直接算法终止返回最终聚类结果,确定最终的骨干共识集群的聚类中心节点为a0、b0、c0、d0。

改进型k-medoids算法与现有k-medoids算法的区别在于加入了惰性系数p,当不希望初始的聚类中心节点被替换时,可在初始化时设置p为接近0的常数;当希望聚类算法能够真实反映出集群的聚类情况时,可以设置p为接近1的常数。当p等于1时改进型k-medoids算法与现有k-medoids算法完全相同,当p等于0时,初始的聚类中心节点直接作为骨干共识集群的聚类中心节点,不再进行聚类递代。之所以这样设置p的原因是:在某些区块链场景中需要政府部门的若干服务器作为各簇初始中心节点集合时,平台运营方可能并不想因某一在各方面特征评价优于政府节点的私人用户节点加入区块链平台而更换簇中心节点集合,使政府节点失去参与骨干共识集群共识的机会,进而导致政府丧失对多中心化区块链系统的宏观可控性。因此,在初始化时便可以将改进型k-medoids算法中的惰性系数p设置成接近0的常数,防止簇中心节点被更换。例如:音视频类数字版权区块链场景中,需要具有上层监督作用(如:版权局,网信办等)的节点加入才能更好地维护网络上的音视频创作内容版权不被侵权,但将管理权限完全交给由上述为数不多的节点中心化管理也存在着巨大风险(如:黑客网络攻击,管理人员泄露版权信息隐私等),所以可以将骨干共识集群节点设置为这些具有较高社会公信度的节点担任,将普通用户当做从节点,聚类后进行多中心化共识,既能让从节点真正参与到链上共识中监督骨干共识集群中主节点的行为,又能让具有社会公信度的骨干共识集群保留对区块链平台的宏观可控性。

同时,在某些无组织,用户自发维护的区块链应用场景中,如全球各高校生物系想要联合组建一个专业论文数据区块链,由于链上不存在上层的监督者,各所高校之间在区块链上应当拥有完全平等的地位,所以可以将改进型k-medoids算法中的惰性系数p设置为接近1的常数。这样做可以保证在选择了适当特征(如:节点网络环境、硬件存储条件等)作为聚类评判标准的条件下,具有一定代表性的节点们会被选择出来成为各个簇的中心节点,在这种参与节点数量较大且不固定的场景下,相比现有pbft的全局无差别共识,先对节点进行聚类与分层然后共识能提高区块链平台处理请求的效率。这样可以更好地控制节点运行聚类算法消耗的算力资源,并能够方便选择区块链环境下骨干共识集群的节点集,提高区块链平台的可控性。

需要说明的是,上述实施例是为了更清晰的对本发明实施例做出说明而例举的一个简单的例子,并不代表所有区块链系统的内容以及形式,所有可以通过本发明实施例的方法实现减少区块链共识过程中产生的通信次数与数据量的方案都落入本发明的保护范围之内。

本发明实施例还提供了一种基于改进型聚类算法的区块链系统共识的装置,区块链系统包括:多个共识节点;

区块链系统通过改进型聚类算法,对区块链中所有的共识节点进行聚类,形成多个簇,多个簇中的每一个簇包括:聚类中心节点和非聚类中心节点,一个簇包括多个共识节点,该簇包括的多个共识节点中的主节点即为该簇的聚类中心节点,该簇包括的多个共识节点中的从节点即为该簇的非聚类中心节点;

区块链系统通过改进型聚类算法,对多个簇进行分层,多个簇中的每个簇形成一个子共识集群,多个簇各自包括的聚类中心节点形成骨干共识集群;基于改进型聚类算法的区块链系统共识的装置包括:

接收模块,用于第一聚类中心节点接收多个请求,多个请求为第一聚类中心节点所属的子共识集群中的任一共识节点接收的交易内容,第一聚类中心节点为多个簇中任一个簇包括的聚类中心节点;

打包模块,用于第一聚类中心节点将接收到的多个请求打包为区块;

第一广播模块,用于第一聚类中心节点将区块广播至其所属的子共识集群中进行共识;

第二广播模块,用于若区块通过第一聚类中心节点所属的子共识集群的共识验证,则第一聚类中心节点将通过子共识集群共识验证的区块广播至骨干共识集群中进行共识;

数字签名广播模块,用于若通过子共识集群共识验证的区块通过骨干共识集群的共识验证,则骨干共识集群中每一个聚类中心节点都对通过骨干共识集群共识验证的区块进行数字签名,并广播至除自身之外其他的所有聚类中心节点,骨干共识集群中每一个聚类中心节点接收到多个数字签名,形成数字签名集合;

打包消息广播模块,用于骨干共识集群中每一个聚类中心节点将接收到的数字签名集合和通过骨干共识集群共识验证的区块,打包成提交消息,并将提交消息广播至其所属的子共识集群中;

接收验证模块,用于任一子共识集群中每一个非聚类中心节点接收到提交消息,对数字签名集合进行验证;

执行存储模块,用于若数字签名集合通过验证,则执行对应于数字签名集合通过验证的区块的交易内容,并将该区块上链存储。

以下将分别从单次共识耗时与单次共识过程通信次数两个方向对基于改型k-medoids算法的区块链共识算法(k-pbft)与现有pbft共识算法进行对比实验。

1、共识耗时实验

实验采用ns2(networksimulatorversion2)配合gt-itm拓扑生成器,模拟底层的物理网络情况。如图4(a)所示为拓扑生成器生成的9个聚类中心节点,其中每个聚类中心节点所属的簇有10个节点的网络拓扑图,图4(b)所示为拓扑生成器生成的100个聚类中心节点,其中每个聚类中心节点所属的簇有10个节点的网络拓扑图。

共识耗时实验中生成1000个节点,节点间的欧式距离用网络延迟代表,共分成10个子共识集群,每个子共识集群99个从节点,由于需要对比两种共识算法的共识耗时,需要设置每个节点与全网所有节点的延迟,根据骨干共识集群中的节点一般属于网络条件较好的节点比非骨干共识集群节点网络延迟低,簇内节点间网络延迟比簇间节点网络延迟低等聚类情况,分别设置模拟延迟如下:

1)delay(vi,vj).属于同一子共识集群从节点之间延迟控制在30~50ms之间;

2)delay(vi,vj).不属于同一子共识集群从节点之间延迟控制在200~250ms之间;

3)delay(ci,cj).骨干共识集群节点间延迟控制在50~100ms之间;

4)delay(vi,cj).骨干共识集群中的主节点与其同属于一子共识集群的从节点间延迟控制在10~30ms;

5)delay(vi,cj).骨干共识集群中的主节点与其不同属于一子共识集群的从节点间延迟控制在100~120ms;

在实验中我们采用k-medoids聚类算法。k-medoids聚类算法中的节点相似度计算只考虑两个节点间的网络延迟,令距离公式如下(9)计算:

d(vi,vj)=delay(vi,vj)(9)

实验中不考虑单个节点在接收到信息后的处理耗时与单机上的资源利用、cpu处理速度、磁盘读写速度、网络拥塞等因素,并假设同一时间点单机上所有消息的接收与发送都并行发生,只计算共识流程开始到共识流程结束的耗时。我们为了对比评价两种模型的共识耗时,进行了20次独立的对比耗时实验(忽略骨干共识集群的轮询过程)。每次实验按照上述模拟控制条件随机生成节点之间的延迟,然后记录k-pbft共识算法与现有pbft共识算法进行单次共识的耗时,对比结果如图5所示。图中横轴实验编号为进行的实验次数,一共进行了20次实验;纵轴耗时(毫秒、ms)为进行实验时两种算法共识过程的耗时。

由实验结果知道,现有pbft平均耗时580.7ms;k-pbft平均耗时447.7ms。且由于k-pbft的多中心化结构,单个子共识集群之间以及子共识集群与骨干共识集群之间都可以并行执行共识过程,在真实环境下效率会更高。可见基于k-medoids算法改进的pbft共识算法共识耗时要低于现有pbft,因为现有pbft单次共识需要全范围内的所有共识节点进行一次三阶段共识过程达到完全去中心化的目的,而利用k-medoids算法改进后的pbft通过聚类节点的方法将共识节点进行分层次,划区域的进行两次较小范围内的共识,故有效缩短了共识过程耗时。

2、通信次数对比

为了验证改进后的共识算法模型在通信次数方面比传统的pbft共识算法优秀,我们设置了共识过程通信次数对比试验。

1)计算pbft单次共识通信次数:

假设现在平台上有n(n>3)个节点参与pbft共识。我们可以利用共识算法流程计算出一次完整的pbft共识需要的通信次数。(在这里只计算预准备阶段,准备阶段和确认阶段三个主要阶段的通信次数)

预准备阶段主节点收到客户端请求后,处理请求。接着主节点将预准备消息发送给所有从节点,此阶段共识网络中的通信次数为(n-1)次。准备阶段从节点收到主节点的预准备消息之后,对预准备消息进行验证,如果验证通过,则从节点会将准备消息发送给除自己之外的所有共识节点,此阶段共识网络中的通信次数为(n-1)·(n-1)次。确认阶段所有节点对收到的准备消息进行验证,当验证结果为真时就发送确认消息给除自己以外的所有节点,此阶段共识网络中的通信次数为n·(n-1)次。

由此我们可以计算得到完成一次pbft共识过程需要的三阶段总通信次数为(n-1)+(n-1)·(n-1)+n·(n-1)次,化简得到2n·(n-1)次。

总共的通信次数z1=pbft单次共识过程通信次数,带入可得公式(10):

z1=2n·(n-1)(10)

2)计算k-pbft单次共识通信次数:

同样假设现在平台上有n(n>3)个节点参与k-pbft共识,并设置聚类数目为k,默认平均分配每个子共识集群的共识节点个数为n/k,骨干共识集群的节点个数为k。

我们利用改进后的k-medoids算法,计算出一次完整的k-pbft共识需要的通信次数:

区块被提交后会先在所属的子共识集群进行一次pbft共识过程,由上面的pbft过程通信次数分析结果可知子共识集群中的通信次数为2n/k·(n/k-1)次,子共识集群通过共识后,主节点会将此区块在骨干共识集群中再次进行一次pbft共识,在骨干共识集群中共识的通信次数为2k·(k-1)次。在骨干共识集群共识验证通过后,所有骨干共识集群中的聚类中心节点都会将此区块广播至其所属的子共识集群中,通知此区块已经通过共识过程可以上链存储,此过程的通信次数为(n/k-1)·k次。

由此我们可以计算得到完成一次k-pbft共识过程需要的总通信次数为2n/k·(n/k-1)+2k·(k-1)+(n/k-1)·k次。

总共的通信次数z2=k-pbft单次共识过程通信次数,带入可得公式(11):

令两种算法的通信次数之比为y,由公式(10)和公式(11)可知:y=z1/z2,带入可得公式(12):

我们设n与k为自变量,y可画曲面函数图如图6所示,其中聚类k值为聚类中心节点的个数,总节点个数为区块链系统中所有共识节点的个数,通信次数比值为现有pbft共识过程中的通信次数与本发明k-pbft共识过程中的通信次数的比值。比值的曲面函数成拱形,将n看做常数,可以通过令y导数为0解一个四元一次方程,得到y取最大值时k的取值为两个不等实根(一个正数,一个负数)和一对共轭虚根解,由于解此方程的过程太过冗杂,这里就不把过程全部列出,只将实验得出的结果写出:由于公式中的n和k都为真实环境下的取值,所以不存在小数形式,用int()表示取整操作。当共识节点总数为n时,y大致在时取得最大值,此时k-pbft相较于pbft取得最佳通信次数比。

n等于1000时pbft算法三阶段共识,总共需要发送1998000次消息进行共识,达到百万数量级;而在k个聚类情况下,k-pbft的通信次数如图7所示,其中k值为5时(即有5个簇,5个聚类中心节点),k-pbft的通信次数为80635,k值为50时(即有50个簇,50个聚类中心节点),k-pbft的通信次数仅为6610,相比较现有pbft降低了三个数量级的通信次数,缩减的通信次数是巨大的。

经过上述实验分析,k-pbft能够有效减少单次共识过程的通信次数。利用改进型k-medoids算法进行聚类,每个聚类都是一个去中心化的子共识集群,再由各子共识集群的主节点构成一个上层的骨干共识集群。相比现有pbft每次共识都需要所有的节点间进行数据传输推进共识过程,新共识算法降低了单次共识所需要的通信次数。同时,当区块链平台共识节点数量庞大的情况下,也不再需要每个共识节点都保持与所有其余节点之间的p2p网络连接,只需与同一子共识集群中的节点进行网络连接,减少了建立与保持网络连接在单个机器上的资源消耗。

通过上述实施例,本发明区块链系统通过改进型聚类算法将原pbft全局去中心化共识,改进为两次小范围内的去中心化共识,这样分层次的区块链共识获得更高的共识效率,可以更好地控制节点运行时消耗的算力资源。由于现有pbft单次共识需要全范围内的所有共识节点进行一次三阶段共识过程达到完全去中心化的目的,而利用改进型聚类算法将共识节点进行分层次,划区域的进行两次较小范围内的共识,故有效缩短了共识过程耗时。相比现有pbft每次共识都需要所有的节点间进行数据传输推进共识过程,基于改进型聚类算法的区块链系统共识降低了单次共识所需要的通信次数以及数据传输量,同时,当区块链系统共识节点数量庞大的情况下,也不再需要每个共识节点都保持与所有其余节点之间的p2p网络连接,只需与同一子共识集群中的节点进行网络连接,减少了建立与保持网络连接在单个机器上的资源消耗。在减少了区块链运营成本的同时,极大的提高了整个区块链系统的工作效率。

以上对本发明所提供的一种基于改进型聚类算法的区块链系统共识的方法和装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1