CN115022340A - 一种运行联盟链网络的方法 - Google Patents
一种运行联盟链网络的方法 Download PDFInfo
- Publication number
- CN115022340A CN115022340A CN202210616509.3A CN202210616509A CN115022340A CN 115022340 A CN115022340 A CN 115022340A CN 202210616509 A CN202210616509 A CN 202210616509A CN 115022340 A CN115022340 A CN 115022340A
- Authority
- CN
- China
- Prior art keywords
- node
- nodes
- link
- multicast distribution
- chain
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 113
- 238000009826 distribution Methods 0.000 claims abstract description 151
- 238000004891 communication Methods 0.000 claims description 40
- 230000015654 memory Effects 0.000 claims description 33
- 230000008569 process Effects 0.000 claims description 31
- 230000004044 response Effects 0.000 claims description 21
- 238000011144 upstream manufacturing Methods 0.000 claims description 8
- 230000005540 biological transmission Effects 0.000 claims description 6
- 230000008859 change Effects 0.000 claims description 5
- 230000001934 delay Effects 0.000 claims description 5
- 230000009467 reduction Effects 0.000 claims description 4
- 238000003860 storage Methods 0.000 description 23
- 238000010586 diagram Methods 0.000 description 19
- 238000012545 processing Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 13
- 230000006872 improvement Effects 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 8
- 238000004590 computer program Methods 0.000 description 7
- 238000004422 calculation algorithm Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 5
- 230000003936 working memory Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000018109 developmental process Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000012795 verification Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 108010001267 Protein Subunits Proteins 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000010267 cellular communication Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 239000007795 chemical reaction product Substances 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 229920001296 polysiloxane Polymers 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
- H04L67/1044—Group management mechanisms
- H04L67/1051—Group master selection mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/12—Discovery or management of network topologies
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
- H04L67/1059—Inter-group management mechanisms, e.g. splitting, merging or interconnection of groups
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Theoretical Computer Science (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Small-Scale Networks (AREA)
Abstract
本公开涉及运行联盟链网络的方法,包括:由所述联盟链网络中将要发起共识提议的主节点建立以所述联盟链网络中各链节点为树节点的组播分发树,所述组播分发树包括一个根节点、一层或多层树干节点、以及一层叶子节点,其中根节点为所述主节点;由所述主节点在所述联盟链网络中广播所述组播分发树;以及根据所述组播分发树,由所述主节点将包括共识周期内的交易集合的数据包组播给所述一层或多层树干节点中的第一层树干节点,并由每个树干节点将接收到的数据包组播给其子节点。
Description
技术领域
本公开实施例属于计算机技术领域,尤其涉及运行联盟链网络的方法、运行区块链网络的方法和用于区块链网络的节点。
背景技术
随着区块链技术的发展,基于联盟链网络的业务处理模式较为常见。联盟链可以是只针对特定群体的成员和有限的第三方,多个服务机构可以组成一个联盟。允许授权的节点加入联盟链网络,每个服务机构的服务器(或服务器集群)可以为联盟链网络中的一个节点,链上节点可根据权限查看信息。随着联盟链支撑的业务规模越来越大,联盟链中需要接入的共识(或非共识)节点数量也越来越多。
发明内容
本公开的目的在于提供运行联盟链网络的方法、运行区块链网络的方法和用于区块链网络的节点。
根据本公开的第一方面,提供了一种运行联盟链网络的方法,包括:由所述联盟链网络中将要发起共识提议的主节点建立以所述联盟链网络中各链节点为树节点的组播分发树,所述组播分发树包括一个根节点、一层或多层树干节点、以及一层叶子节点,其中根节点为所述主节点;由所述主节点在所述联盟链网络中广播所述组播分发树;以及根据所述组播分发树,由所述主节点将包括共识周期内的交易集合的数据包组播给所述一层或多层树干节点中的第一层树干节点,并由每个树干节点将接收到的数据包组播给其子节点。
根据本公开的第二方面,提供了一种运行联盟链网络的方法,包括:由所述联盟链网络中的各链节点选举主节点,所述主节点能够发起共识提议;由所述联盟链网络中的各链节点建立、并周期性地更新及广播其本地路由表,所述本地路由表指示相应链节点的各邻居节点的上行带宽、以及相应链节点与各邻居节点之间的网络延迟;由所述主节点根据所述联盟链网络中各链节点的本地路由表建立并在所述联盟链网络中广播以所述联盟链网络中各链节点为树节点的组播分发树,所述组播分发树包括一个根节点、一层或多层树干节点、以及一层叶子节点,其中根节点为所述主节点;以及由所述联盟链网络中的各链节点根据所述组播分发树,将包括共识周期内的交易集合的数据包组播给其子节点。
根据本公开的第三方面,提供了一种运行区块链网络的方法,所述区块链网络中的各节点之间为全连接模式,所述方法包括:由所述区块链网络中的第一链节点根据各链节点的通信状况建立以所述区块链网络中各链节点为树节点的组播分发树,所述组播分发树包括一个根节点、一层或多层树干节点、以及一层叶子节点,其中,根节点为所述第一节点,并且根节点和每个树干节点均有多个子节点;响应于要被发送给其他各链节点的第一数据包的大小大于阈值,根据所述组播分发树,所述第一链节点和每个树干节点将第一数据包组播给其子节点;以及响应于要被发送给其他各链节点的第二数据包的大小小于阈值,所述第一链节点在所述区块链网络中广播第二数据包。
根据本公开的第四方面,提供了一种用于区块链网络的节点,包括电路系统,所述电路系统被配置为执行:建立并周期性地更新及广播其本地路由表,所述本地路由表指示相应链节点的各邻居节点的上行带宽、以及相应链节点与各邻居节点之间的网络延迟;响应于所述节点被选举为主节点:根据所述联盟链网络中各链节点的本地路由表建立并在所述联盟链网络中广播以所述联盟链网络中各链节点为树节点的组播分发树,所述组播分发树包括一个根节点、一层或多层树干节点、以及一层叶子节点,其中根节点为所述主节点;以及根据所述组播分发树,将包括共识周期内的交易集合的数据包组播给所述一层或多层树干节点中的第一层树干节点;响应于所述节点未被选举为主节点:接收主节点广播的组播分发树;以及根据所述组播分发树,将接收到的包括共识周期内的交易集合的数据包组播给所述节点的子节点。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是示例联盟链网络的示意图;
图2是图1的示例联盟链网络的拓扑结构的示意图;
图3是联盟链网络中主节点发送Pre-Prepare消息的示意图;
图4是根据本公开实施例的运行联盟链网络的方法中主节点发送Pre-Prepare消息的示意图;
图5是图4中主节点发送Pre-Prepare消息的组播分发树的示意图;
图6是图4中主节点发送Pre-Prepare消息的消息路由表的示意图;
图7是根据本公开实施例的用于区块链网络的节点设备的至少部分的结构示意图;
图8是可应用于根据本公开实施例的通用硬件系统的示例性框图。
具体实施方式
为了使本技术领域的人员更好地理解本公开中的技术方案,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本公开保护的范围。
图1是示例联盟链网络的示意图。该示例联盟链网络有多个参与方(参与方A、B、C),每个参与方可以有一个或多个联盟链节点(节点0至节点5)。每个联盟链节点可以从该参与方所服务的客户接收交易,并由联盟链网络中的各节点进行分布式执行与存证。为了区别于后文描述的组播分发树中的节点,本文中将联盟链网络中的链上节点简称为“链节点”,将组播分发树中的根节点、树干节点和叶子节点统称为“树节点”。
联盟链的网络拓扑结构可以为全连接(full-mesh)网络结构,如图2所示。在全连接模式下,每个链节点都与其他的链节点直接通信连接。联盟链采用的共识算法可以是实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法。联盟链中的一个链节点,例如节点0,可以通过选举被确定为主节点。主节点在PBFT共识算法中,负责发起共识提议,并将一个共识周期内的交易集合(Pre-Prepare消息)广播给其他的链节点(在共识阶段为参与共识的链节点),如图3所示。具体地,主节点根据本节点存储的各条交易的交易内容和执行结果生成状态树、交易树和收据树,将这三棵树的根节点对应的根哈希记入区块头中;然后,主节点将这一组交易打包并生成新的区块后,将该区块(或区块头)广播至其他链节点。其他的链节点,例如节点1至节点15,接收到Pre-Prepare消息之后,通过执行Pre-Prepare消息中的一组交易,对区块头中的根哈希进行验证。在对共识提议的验证通过后,向其它节点发送Prepare消息。在预定时间范围内,如果收到超过2F个不同链节点的Prepare消息(其中F为PBFT共识算法中的容错节点个数),就代表Prepare阶段已经完成,则进入Commit阶段。每个链节点向其它节点广播Commit消息,当收到2F+1个Commit消息后(包括自己的),代表当前共识周期内的共识已经达成,各链节点可以将包含这组交易的区块追加到原有的区块链的末尾(也称链式存储、上链),并根据这组交易的执行结果对世界状态进行更新。
需要说明的是,本文所述的交易(transaction),是指用户通过区块链的客户端创建,并需要最终发布至区块链的分布式数据库中的一笔数据。交易是区块链协议中所约定的一种数据结构,一笔数据要存入区块链,就需要被封装成交易。区块链中的交易,存在狭义的交易以及广义的交易之分。狭义的交易是指用户向区块链发布的一笔价值转移;例如,在传统的比特币区块链网络中,交易可以是用户在区块链中发起的一笔转账。而广义的交易是指用户向区块链发布的一笔具有业务意图的业务数据;例如,运营方可以基于实际的业务需求搭建一个联盟链,依托于联盟链部署一些与价值转移无关的其它类型的在线业务(比如,租房业务、车辆调度业务、保险理赔业务、信用服务、医疗服务等),而在这类联盟链中,交易可以是用户在联盟链中发布的一笔具有业务意图的业务消息或者业务请求。
可以看出,在以上描述的共识过程中,主节点需要将包括一个共识周期内的所有交易的Pre-Prepare消息广播给联盟链网络内其他所有的共识节点,如图3所示。Pre-Prepare消息包含了一个区块中所有交易数据,一般有几百KB至10MB。采用PBFT算法,主节点要把Pre-Prepare消息发给其他所有共识节点,随着共识节点数量增多,主节点需要的带宽就成倍增加。主节点的上行带宽往往成了整个联盟链吞吐量的瓶颈。例如,对于有100个链节点的联盟链网络,如果平均每个交易的大小为1KB,若要支撑2000TPS(每秒交易数,Transaction Per Second),则每个节点需要提供的带宽大小为:2000TPS*1KB*8bit*(100-1)个节点≈1600Mbps。如果联盟链网络的链节点的个数增多,则对每个节点能提供的带宽大小的要求也随之增高。
本公开一个或多个实施例提供的运行联盟链网络的方法,针对主节点分发Pre-Prepare消息的过程,对联盟链网络中的链节点构建组播分发树,以主节点作为数据源,即组播分发树的根节点,部分节点作为用于消息分发的一个或多个中间层(即一层或多层树干节点),以将消息分发到更多的边缘节点(即叶子节点),从而使得Pre-Prepare消息从主节点分发到各个链节点。根据这些实施例的运行联盟链网络的方法,主节点不需要将Pre-Prepare消息发送给所有其他的链节点,而只需要发给部分链节点(即第一层树干节点),因此可以大幅降低对主节点带宽的要求。如此,即便在链节点数量庞大的情况下,也能够保证主节点的带宽满足要求,有助于实现联盟链网络的扩展。本公开一个或多个实施例提供的运行联盟链网络的方法,可以基于链节点之间的通信延迟、共识阶段的时延要求和各链节点的上行带宽,建立时延最优的可变单源组播分发树。根据这些实施例的运行联盟链网络的方法,能够动态优化组播分发树带来的消息分发的总时延,有助于联盟链网络性能的提升。
下面结合图4至图6以具体的示例描述根据本公开实施例的运行联盟链网络的方法。在采用PBFT等机制的区块链网络中,在一轮共识开始之前已经选举确定了用于发起共识提议的主节点(即记账节点)。选举可以是定期进行,也可以由事件触发,例如共识不通过则触发重新选举主节点。非主节点在收到客户端提交的该交易后,将该交易发送至已确定的主节点。主节点在共识阶段将本共识周期内的交易打包发送至其他各链节点(即验证节点)。
联盟链网络中的每个链节点建立各自的本地路由表。链节点的本地路由表可以指示该链节点的各邻居节点的上行带宽、以及该链节点与各邻居节点之间的网络延迟。邻居节点,也称邻节点,即直接连接的节点。在联盟链网络中的各链节点之间为全连接模式的情况下,每个链节点都与其他各个链节点建立直接的通信连接,因此,每个链节点的邻居节点均包括其他所有链节点。相邻的链节点之间会定期发送不具有业务语义的心跳报文,以探测邻居节点的网络连接状态、以及本节点和邻居节点之间的通信状况,从而本节点可以统计各邻居节点的上行带宽、以及本节点与各邻居节点之间的网络延迟等数据。
在一个具体的示例中,第一链节点建立的本地路由表local_route_table可以包括清单,清单中的每一项为对每个邻居节点建立的结构为route_item的节点描述。例如,本地路由表local_route_table可以具有如下的数据结构:
struct route_item{
string nid;
uint32_t srtt;
uint32_t bandwidth;
uint16_t state;
}
std::list<route_item>local_route_table;
其中,nid为相应的邻居节点的ID,为该链节点的标识信息,例如可以是该链节点的公钥的哈希值;srtt为第一链节点与ID为nid的邻居节点之间通信的平滑往返时间(Smoothed Round Trip Time);bandwidth为ID为nid的邻居节点的上行带宽;state为ID为nid的邻居节点的状态,例如指示该节点在线或离线的网络连接状态、指示该节点超载、低载还是正常状态的CPU的使用率等。
每个链节点可以周期性地更新各自的本地路由表,并在初次建立以及每次更新之后向整个联盟链网络中的所有其他链节点广播其本地路由表。在一些实施例中,每个链节点可以不广播其本地路由表,而只是将其路由表发送给之前确定的联盟链网络中的主节点。在一些网络架构下,如果一个链节点与主节点不是直接连接,则该链节点可以将其本地路由表通过其邻居节点转发给主节点;在链节点与主节点存在直接连接的情况下,该链节点可以将其本地路由表直接发送给主节点。
主节点接收联盟链网络中其他链节点的本地路由表,并可以根据各链节点的本地路由表建立全局路由表。在一个具体的示例中,全局路由表global_route_table可以具有如下的数据结构:
std::map<string,RouteList>global_route_table;
map集合中存储键值对(key-value),其中string字符串用作键,为链节点ID;RouteList清单列表用作值,为相应链节点的本地路由表。
建立全局路由表之后,主节点可以根据全局路由表建立用于消息分发的组播分发树。组播分发树中的各个树节点均对应为联盟链中的链节点。组播分发树包括一个根节点、一层或多层树干节点、以及一层叶子节点,其中根节点为主节点。图5示出了组播分发树的一个示例。组播分发树的建立包括两个过程,第一个过程是确定组播分发树的结构,即确定组播分发树的阶数n和层数L,其中,阶数n指示各树节点(除叶子节点外)的最大子节点个数,层数L指示树干节点和叶子节点的总层数;第二个过程是将各个链节点对应到(本公开也称配置为)组播分发树中的各个树节点。需要说明的是,本文中提到“子节点”时,除另有说明,均指直接子节点,不包括孙节点。
在第一个过程中,主节点根据链节点的总数N、链节点上行带宽的最低要求bw(例如在联盟链网络中通常会要求部署的节点满足一个最低的带宽要求)、各链节点之间的通信延迟和共识超时时间T,来确定组播分发树的阶数n和层数L。在一个具体的示例中,主节点根据如下的公式1至公式3来确定组播分发树的阶数n和层数L:
1+n+n^2+n^3+......+n^(L-1)<=N<=1+n+n^2+n^3+......+n^(L) 公式1
n*b<=bw 公式2
SRTT1+SRTT2+......+SRTT(L-1)+SRTT(L)<T 公式3
其中,b为包括共识周期内的交易集合的数据包的大小,SRTTk为层数L中第k层的各树节点的平滑往返时间的最大值,例如SRTT1为层数L中第1层的各树节点的平滑往返时间的最大值,SRTT2为层数L中第2层的各树节点的平滑往返时间的最大值,依次类推。
如前所述,一个Pre-Prepare消息的大小相当于一个出块周期内所有交易的大小总和,因此,基于平均交易大小和最大TPS可以估算Pre-Prepare消息的大小b(即包括共识周期内的交易集合的数据包的大小),从而基于主节点最多能够支持的子节点(即第一层树干节点)的个数,根据公式2可以计算出阶数n的上限值。公式3的左边体现了依照组播分发树进行多层的消息分发所带来的延时时间,因此要想保障共识能按预期时间完成,那么需要在共识超时时间T内完成将Pre-Prepare消息从主节点分发到叶子节点。因此可以根据共识超时时间T和每个链节点的SRTT,可以根据公式3计算出层数L的上限值。根据公式1中阶数n和层数L以及链节点的总数N之间的关系,可以调整并最终确定阶数n和层数L的值。
为了保障共识的稳定性,组播分发树的阶数n大于或等于3,从而主节点可以将其下一级节点的个数安排为3个及以上,即一层或多层树干节点中的第一层树干节点的个数大于或等于3。如此,能保障主节点的下一级节点中即使宕掉一个节点也能够有除主节点之外的其他所有链节点的2/3能够接收到Pre-Prepare消息,也就是说,即使第一层树干节点中有一个节点故障也不会立即导致共识无法通过,这可以给主节点预留充分的时间来调整组播分发树,例如在下一次共识进行之前建立新的组播分发树即可。
在确定了组播分发树的阶数n和层数L之后,整个组播分发树的结构就可以确定了,即包括一个根节点(例如图5中的节点0),在根节点下还包括L层节点(在图5所示的示例中层数L=2),每个节点最多具有n(阶数)个子节点(在图5所示的示例中阶数n=4)。主节点在如下所述的第二个过程中,将各个链节点配置到组播分发树的各个树节点上。在为根节点或树干节点配置子节点时,通常选择配置n个(即将阶数n填满,例如图5中每个树干节点具有阶数个子节点),但也可以配置小于n个(例如图5中的根节点具有小于阶数个子节点)。
在第二个过程中,主节点根据各链节点之间的通信延迟和各链节点的上行带宽,将联盟链网络的各链节点配置为组播分发树的相应的树节点。主节点可以将上行带宽小于阈值的链节点配置为叶子节点;以及将上行带宽大于阈值的链节点配置为树干节点,并且将与父节点之间的通信延迟较小的节点配置在更靠近父节点的层。
由于作为树干节点的中间分发节点需要向多个子节点组播数据包,因此树干节点的上行带宽也是个重要的考量因素。如果链节点的上行带宽较小(例如小于阈值),则将该链节点配置为叶子节点;如果链节点的上行带宽较大(例如大于阈值),则可以将其配置为树干节点。
在树干节点的排布时,主节点在选择自己的多个子节点时,首先基于本地路由表中的SRTT数据,优先选择最低延迟的传输链路;主节点在为分发节点选择子节点时,基于全局路由表中对应节点的邻接表(即该节点的本地路由表)中的SRTT数据,优先选择SRTT小的节点,但带宽需要可支撑其子节点数量的传输带宽需求。
在一个示例中,主节点以自身作为组播分发树的根节点,选取与自身直接连接的链节点中SRTT最小的n个链节点作为第一层树干节点;然后依次对第一层树干节点中的各个节点再选取其子节点,依次类推,直到层数达到L,从而构建成如下的消息路由表
其中,nid为相应的链节点的ID,为该链节点的标识信息,例如可以是该链节点的公钥的哈希值;parent_node_idx为ID为nid的链节点在组播分发树中的父节点的索引值。组播分发树中的树节点的索引值为从根节点开始逐层依次向下对每个树节点的编号,如图5中每个树节点位置的数字即为相应树节点的索引值。
与图5所示的组播分发树对应的消息路由表list_pp_msg_route_table如图6所示。消息路由表list_pp_msg_route_table可以是主节点创建、所有链节点存储的组播分发树的一个实例。在图6所示的消息路由表的实例中,节点0(ID为nid0的链节点)的父节点索引值为-1,即节点0为根节点;节点1(ID为nid1的链节点)至节点3(ID为nid3的链节点)的父节点索引值为0,即节点1至节点3的父节点为节点0;节点4(ID为nid4的链节点)至节点7(ID为nid7的链节点)的父节点索引值为1,即节点4至节点7的父节点为节点1;节点8(ID为nid8的链节点)至节点11(ID为nid11的链节点)的父节点索引值为2,即节点8至节点11的父节点为节点2;节点12(ID为nid12的链节点)至节点15(ID为nid15的链节点)的父节点索引值为3,即节点12至节点15的父节点为节点3。
主节点将其建立的组播分发树在联盟链网络中进行广播,例如以消息路由表的形式广播给其他链节点。若是该主节点第一次构建组播分发树,则主节点立即进行广播;若不是该主节点第一次构建组播分发树,则在满足下文所述的更新条件时进行广播。其他链节点接收并保存组播分发树。
参照图4,主节点,例如节点0,开始进行共识时,基于组播分发树,将包括共识周期内的交易集合的数据包,即Pre-Prepare消息数据包,组播给自己所有的子节点,即第一层树干节点,例如节点1至节点3。树干节点接收到Pre-Prepare消息之后,基于组播分发树,把Pre-Prepare消息转发给自己所有的子节点(可能是叶子节点也可能是下一层的树干节点)。例如,节点1将Pre-Prepare消息转发给节点4至节点7,节点2将Pre-Prepare消息转发给节点8至节点11,节点3将Pre-Prepare消息转发给节点12至节点15。依此类推,依照组播分发树逐层转发,直到把Pre-Prepare消息发送到各个叶子节点,从而完成共识提议阶段的Pre-Prepare消息的全链分发过程。节点1至节点15接收到Pre-Prepare消息之后,对消息中的交易集合进行验证,并在验证通过后向其它节点发送Prepare消息和Commit消息,以完成本次共识过程。Prepare消息和Commit消息通常比Pre-Prepare消息要小得多,因此其发送可以采用现有的方式进行。例如,在联盟链网络的拓扑结构为全连接结构的情况下,可以利用各链节点之间的全连接模式完成Prepare消息和Commit消息的发送,即每个链节点向其他所有链节点广播Prepare消息和Commit消息。在非全连接的网络结构下,每个链节点可以将Prepare消息和Commit消息发送给其邻居节点,并由邻居节点进行转发,从而将Prepare消息和Commit消息发送给联盟链网络中其他的链节点。
在上述过程中,整个联盟链网络的组播分发树均由主节点建立和维护,其他链节点从主节点接收并保存组播分发树,可以保证每个链节点的组播分发树一致,从而可以避免消息路由环路,减少消息重复转发造成的消息风暴。
在一个具体的示例中,联盟链网络中有1000个链节点,即N=1000。如果平均每个交易大小为1KB,一个共识周期内有2000条交易,则每个Pre-Prepare消息的大小为2000*1KB*8bit=16Mb。如果联盟链中部署的节点的最低带宽bw要求为160Mbps,根据上述方法,组播分发树的阶数n可以被确定为10,层数L可以被确定为3,以支持1000个节点。按照上文所述的方法,将与父节点之间的通信延迟较小的节点配置在更靠近父节点的层,因此在对组播分发树进行总时延估计时,可以将除主节点之外的各链节点的SRTT从小到大排列,排列之后的第10个链节点的SRTT值为SRTT1,即第一层树干节点的中的最大延迟时间,第110个链节点的SRTT为SRTT2,即第二层树干节点中的最大延迟时间,第999个链节点的SRTT为SRTT3,即叶子节点中的最大延迟时间。但由于共识通过的要求为总共(2N+1)/3个节点验证通过Pre-Prepare消息即可,因此,第三层即叶子节点层可能的最短时延为总排列的第(2N+1)/3个链节点的SRTT(为简便起见,下文即为Ro)。因此,能够使得共识通过的整个组播分发树可能的最短总时延Rn=SRTT1+SRTT2+Ro。
在主节点将Pre-Prepare消息广播给其他各链节点的操作方式中,按照整个联盟链网络中有100个链节点来计算,节点需提供的上行带宽为1600Mbps(如上文所述),能够使得共识通过的最大时延为Ro。而根据本公开实施例的运行联盟链网络的方法,按照整个联盟链网络中有1000个链节点来计算,节点需提供的上行带宽为160Mbps,能够使得共识通过的最大时延为SRTT1+SRTT2+Ro。可见,根据本公开实施例的运行联盟链网络的方法,在没有大幅增加共识延迟的情况下,可以让节点带宽需求降低90%、链规模增长10倍。
在本公开各实施例中,主节点根据联盟链网络中各链节点的通信状况来建立组播分发树。然而在联盟链网络运行的过程中,各个链节点的通信状况,例如链节点的总数N、链节点上行带宽的最低要求bw、各链节点之间的通信延迟和各链节点的上行带宽等,均会随着时间的经过而发生变化。如上所述,每个链节点定期将其本地路由表发送给主节点,主节点可以定期根据联盟链网络中各链节点周期性报告的本地路由表来计算当前使用的组播分发树的通信总时延(下文称为第一总时延);以及基于变化的各节点的通信状况、并使用上文所述的方法来建立可能的更新组播分发树,并计算可能的更新组播分发树的通信总时延(下文称为第二总时延)。组播分发树的通信总时延的估计方法在上文已经描述。主节点比较两个总时延,在第二总时延比第一总时延的减少量满足条件的情况下,例如减少10%的时延量,则主节点将当前使用的组播分发树更新为该可能的更新组播分发树,并向联盟链网络中的各链节点广播该更新组播分发树,以将该更新组播分发树用于之后的共识过程中的Pre-Prepare消息的分发,从而完成组播分发树的优化。
此外,联盟链网络中有如下三种情况可能会触发组播分发树的变化。
第一种情况:联盟链网络中的链节点离线。
如果离线链节点为组播分发树的叶子节点,因为叶子节点的离线不影响组播分发过程,因此此时不需要更新组播分发树。
如果离线链节点为树干节点,需区分不同情况进行处理。1.如果该离线树干节点不是第一层树干节点(指最接近根节点的树干节点),则因为消息能够分发到的链节点的总数大于链节点总数的2/3,因此不影响整体共识。主节点基于其他链节点上报的本地路由表,可以发现部分节点(即离线链节点的子节点)无法接收到分发的Pre-Prepare消息了。此时,主节点等到接收到离线链节点的所有子节点上报更新的本地路由表之后,基于上文所述的方法重新建立(即更新)组播分发树,并将更新后的组播分发树在联盟链网络内进行广播。这个组播分发树的更新过程,可以在本次共识过程结束之后、并且在下一次共识过程开始之前完成,从而保证能够在不影响共识进行的情况下更新组播分发树。2.如果该离线树干节点是第一层树干节点,并且如果组播分发树的阶数n大于3,则按照与前述第1条相同的方式来处理;如果组播分发树的阶数n小于或等于3,则主节点立即更新并广播组播分发树,以保证在分发Pre-Prepare消息之前先更新组播分发树。
第二种情况:联盟链网络中有新的链节点加入。
如果有新链节点加入到联盟链网络,则主节点先将该新链节点配置为组播分发树的叶子节点,即放到第L层中,更新组播分发树并将更新后的组播分发树至少通知给该新链节点及其父节点,例如广播该更新后的组播分发树、或定向发送该组播分发树。此外,如上文所述,主节点定期进行组播分发树的优化,因此之后可能将该新链节点重新配置为某一层的树干节点或仍然配置为叶子节点。
第三种情况:主节点离线或变更。
如果主节点离线或满足主节点变更条件(例如共识失败),则由联盟链网络中的各链节点重新选举主节点,并且之后各链节点周期性地讲各自的本地路由表发送给新主节点。之后由新主节点根据联盟链网络中各链节点的本地路由表建立并广播组播分发树,并由该新主节点发起共识提议,将Pre-Prepare消息发送给第一层树干节点。联盟链网络中的各链节点根据组播分发树,将接收到的Pre-Prepare消息数据包转发给其子节点,从而使得Pre-Prepare消息在整个联盟链网络中被分发。
本公开一个或多个实施例还提供了运行区块链网络的方法,其中区块链网络中的各节点之间为全连接模式,该方法包括:由区块链网络中的第一链节点根据各链节点的通信状况建立以区块链网络中各链节点为树节点的组播分发树,组播分发树包括一个根节点、一层或多层树干节点、以及一层叶子节点,其中,根节点为第一节点,并且根节点和每个树干节点均有多个子节点;响应于要被发送给其他各链节点的第一数据包的大小大于阈值,根据组播分发树,第一链节点和每个树干节点将第一数据包组播给其子节点;以及响应于要被发送给其他各链节点的第二数据包的大小小于阈值,第一链节点在区块链网络中广播第二数据包。根据这一个或多个实施例的运行区块链网络的方法,在全连接模式的区块链网络中,可以对较大的需要被全区块链网络分发的数据包,依照组播分发树进行分发;并且对较小的需要被全区块链网络分发的数据包,由相应的链节点直接进行广播。如此,保证区块链网络内各链节点之间通信效率的情况下,能够降低对链节点的上行带宽的要求,有助于区块链网络的性能提升和规模扩展。
图7是根据本公开实施例的用于区块链网络的节点设备700的至少部分的结构示意图。节点设备700包括一个或多个处理器710、一个或多个存储器720、以及通常存在于计算机等装置中的其他组件(未示出)。一个或多个存储器720中的每一个可以存储可由一个或多个处理器710访问的内容,包括可以由一个或多个处理器710执行的指令721、以及可以由一个或多个处理器710来检索、操纵或存储的数据722。
指令721可以是将由一个或多个处理器710直接地执行的任何指令集,诸如机器代码,或者间接地执行的任何指令集,诸如脚本。本公开中的术语“指令”、“应用”、“过程”、“步骤”和“程序”在本公开中可以互换使用。指令721可以存储为目标代码格式以便由一个或多个处理器710直接处理,或者存储为任何其他计算机语言,包括按需解释或提前编译的独立源代码模块的脚本或集合。本公开其他部分更加详细地解释了指令721的功能、方法和例程。
一个或多个存储器720可以是能够存储可由一个或多个处理器710访问的内容的任何临时性或非临时性计算机可读存储介质,诸如硬盘驱动器、存储卡、ROM、RAM、DVD、CD、USB存储器、能写存储器和只读存储器等。一个或多个存储器720中的一个或多个可以包括分布式存储系统,其中指令721和/或数据722可以存储在可以物理地位于相同或不同的地理位置处的多个不同的存储装置上。一个或多个存储器720中的一个或多个可以经由网络连接至一个或多个第一装置710,和/或可以直接地连接至或并入一个或多个处理器710中的任何一个中。
一个或多个处理器710可以根据指令721来检索、存储或修改数据722。虽然本公开所描述的主题不受任何特定数据结构限制,但是数据722还可能存储在计算机寄存器(未示出)中,作为具有许多不同的字段和记录的表格或XML文档存储在关系型数据库中。数据722可以被格式化为任何计算装置可读格式,诸如但不限于二进制值、ASCII或统一代码。此外,数据722可以包括足以识别相关信息的任何信息,诸如编号、描述性文本、专有代码、指针、对存储在诸如其他网络位置处等其他存储器中的数据的引用或者被函数用于计算相关数据的信息。
一个或多个处理器710可以是任何常规处理器,诸如市场上可购得的中央处理单元(CPU)、图形处理单元(GPU)等。可替换地,一个或多个处理器710还可以是专用组件,诸如专用集成电路(ASIC)或其他基于硬件的处理器。虽然不是必需的,但是一个或多个处理器710可以包括专门的硬件组件来更快或更有效地执行特定的计算过程。
虽然图7中示意性地将一个或多个处理器710以及一个或多个存储器720示出在同一个框内,但是节点设备700可以实际上包括可能存在于同一个物理壳体内或不同的多个物理壳体内的多个处理器或存储器。因此,引用处理器、计算机、计算装置或存储器应被理解成包括引用可能并行操作或可能非并行操作的处理器、计算机、计算装置或存储器的集合。
图8是可应用于根据本公开一个或多个示例性实施例的通用硬件系统800的示例性框图。现在将参考图8描述系统800,其是可以应用于本公开的各方面的硬件设备的示例。上述各实施例中的节点设备700可以包括系统800的全部或部分。系统800可以是被配置为执行处理和/或计算的任何机器,可以是但不限于工作站、服务器、台式计算机、膝上型计算机、平板计算机、个人数据助理、智能电话、车载电脑、或其任何组合。
系统800可以包括可能经由一个或多个接口与总线802连接或与总线802通信的元件。例如,系统800可以包括总线802,以及一个或多个处理器804,一个或多个输入设备806和一个或多个输出设备808。一个或多个处理器804可以是任何类型的处理器,可以包括但不限于一个或多个通用处理器和/或一个或多个专用处理器(例如特殊处理芯片)。上文所述的方法中的各个操作和/或步骤均可以通过一个或多个处理器804执行指令来实现。
输入设备806可以是可以向计算设备输入信息的任何类型的设备,可以包括但不限于鼠标、键盘、触摸屏、麦克风和/或遥控器。输出设备808可以是可以呈现信息的任何类型的设备,可以包括但不限于显示器、扬声器、视频/音频输出终端、振动器和/或打印机。
系统800还可以包括非暂时性存储设备810或者与非暂时性存储设备810连接。非暂时性存储设备810可以是非暂时性的并且可以实现数据存储的任何存储设备,可以包括但不限于磁盘驱动器、光学存储设备、固态存储器、软盘、硬盘、磁带或任何其他磁介质、光盘或任何其他光学介质、ROM(只读存储器)、RAM(随机存取存储器)、高速缓冲存储器、和/或任何其他存储器芯片/芯片组、和/或计算机可从其读取数据、指令和/或代码的任何其他介质。非暂时性存储设备810可以从接口拆卸。非暂时性存储设备810可以具有用于实现上述方法、操作、步骤和过程的数据/指令/代码。
系统800还可以包括通信设备812。通信设备812可以是能够与外部设备和/或与网络通信的任何类型的设备或系统,可以包括但不限于调制解调器、网卡、红外通信设备、无线通信设备、和/或芯片组,例如蓝牙设备、802.11设备、WiFi设备、WiMax设备、蜂窝通信设备、卫星通信设备、和/或类似物。
总线802可以包括但不限于工业标准体系结构(ISA)总线、微通道架构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)本地总线、和外围部件互连(PCI)总线。特别地,对于车载设备,总线802还可以包括控制器区域网络(CAN)总线或设计用于在车辆上应用的其他架构。
系统800还可以包括工作存储器814,其可以是可以存储对处理器804的工作有用的指令和/或数据的任何类型的工作存储器,可以包括但不限于随机存取存储器和/或只读存储设备。
软件元素可以位于工作存储器814中,包括但不限于操作系统816、一个或多个应用程序818、驱动程序、和/或其他数据和代码。用于执行上述方法、操作和步骤的指令可以包括在一个或多个应用程序818中。软件元素的指令的可执行代码或源代码可以存储在非暂时性计算机可读存储介质中,例如上述存储设备810,并且可以通过编译和/或安装被读入工作存储器814中。还可以从远程位置下载软件元素的指令的可执行代码或源代码。
还应该理解,可以根据具体要求进行变化。例如,也可以使用定制硬件,和/或可以用硬件、软件、固件、中间件、微代码、硬件描述语言或其任何组合来实现特定元件。此外,可以采用与诸如网络输入/输出设备之类的其他计算设备的连接。例如,根据本公开实施例的方法或设备中的一些或全部可以通过使用根据本公开的逻辑和算法的、用汇编语言或硬件编程语言(诸如VERILOG,VHDL,C++)的编程硬件(例如,包括现场可编程门阵列(FPGA)和/或可编程逻辑阵列(PLA)的可编程逻辑电路)来实现。
还应该理解,系统800的组件可以分布在网络上。例如,可以使用一个处理器执行一些处理,而可以由远离该一个处理器的另一个处理器执行其他处理。系统800的其他组件也可以类似地分布。这样,系统800可以被解释为在多个位置执行处理的分布式计算系统。
尽管到目前为止已经参考附图描述了本公开的各方面,但是上述方法,系统和设备仅仅是示例性示例,并且本公开的范围不受这些方面的限制,而是仅由以下方面限定:所附权利要求及其等同物。可以省略各种元件,或者可以用等效元件代替。另外,可以以与本公开中描述的顺序不同的顺序执行这些步骤。此外,可以以各种方式组合各种元件。同样重要的是,随着技术的发展,所描述的许多元素可以由在本公开之后出现的等同元素代替。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为服务器系统。当然,本申请不排除随着未来计算机技术的发展,实现上述实施例功能的计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
虽然本公开一个或多个实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。例如若使用到第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本公开一个或多个时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本公开是参照根据本公开实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储、石墨烯存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本领域技术人员应明白,本公开一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本公开一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本公开一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本公开一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本本公开一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本公开中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本公开的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本公开的至少一个实施例或示例中。在本公开中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本公开中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
以上所述仅为本公开一个或多个实施例的实施例而已,并不用于限制本本公开一个或多个实施例。对于本领域技术人员来说,本公开一个或多个实施例可以有各种更改和变化。凡在本公开的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。
Claims (34)
1.一种运行联盟链网络的方法,包括:
由所述联盟链网络中将要发起共识提议的主节点,根据所述联盟链网络中各链节点的通信状况建立以所述联盟链网络中各链节点为树节点的组播分发树,所述组播分发树包括一个根节点、一层或多层树干节点、以及一层叶子节点,其中根节点为所述主节点;
由所述主节点在所述联盟链网络中广播所述组播分发树;以及
根据所述组播分发树,由所述主节点将包括共识周期内的交易集合的数据包组播给所述一层或多层树干节点中的第一层树干节点,并由每个树干节点将接收到的数据包组播给其子节点。
2.根据权利要求1所述的方法,还包括由所述主节点:
根据链节点的总数N、链节点上行带宽的最低要求bw、各链节点之间的通信延迟和共识超时时间T,确定所述组播分发树的阶数n和层数L,其中阶数n指示各树节点的最大子节点个数,层数L指示树干节点和叶子节点的总层数;以及
根据各链节点之间的通信延迟和各链节点的上行带宽,将所述联盟链网络的各链节点配置为所述组播分发树的相应的树节点。
3.根据权利要求2所述的方法,还包括由所述主节点根据如下确定所述组播分发树的阶数n和层数L:
1+n+n^2+n^3+......+n^(L-1)<=N<=1+n+n^2+n^3+......+n^(L);
n*b<=bw;以及
SRTT1+SRTT2+......+SRTT(L-1)+SRTT(L)<T,
其中,b为包括共识周期内的交易集合的所述数据包的大小,SRTTk为层数L中第k层的各树节点的平滑往返时间的最大值。
4.根据权利要求2所述的方法,其中,所述阶数n大于或等于3。
5.根据权利要求1所述的方法,其中,所述第一层树干节点的个数大于或等于3。
6.根据权利要求2所述的方法,还包括由所述主节点:
将上行带宽小于阈值的链节点配置为叶子节点;以及
将上行带宽大于阈值的链节点配置为树干节点,并且将与父节点之间的通信延迟较小的节点配置在更靠近父节点的层。
7.根据权利要求2所述的方法,其中,所述主节点通过接收其他链节点的广播来获取各链节点之间的通信延迟和各链节点的上行带宽。
8.根据权利要求1所述的方法,还包括:
由所述联盟链网络中的各链节点周期性地将其本地路由表报告给所述主节点,链节点的本地路由表指示该链节点的各邻居节点的上行带宽、以及该链节点与各邻居节点之间的网络延迟;以及
由所述主节点根据所述联盟链网络中各链节点的本地路由表建立所述组播分发树。
9.根据权利要求8所述的方法,还包括响应于所述联盟链网络中的第一链节点离线,并且:
响应于所述一层或多层树干节点中的第一层树干节点的个数小于或等于3并且所述第一链节点为第一层树干节点,由所述主节点更新并广播组播分发树;以及
响应于所述一层或多层树干节点中的第一层树干节点的个数大于3并且所述第一链节点为第一层树干节点、或者所述第一链节点为所述一层或多层树干节点中的非第一层树干节点,由所述主节点在接收到所述第一链节点的所有子节点的更新的本地路由表之后,更新并广播组播分发树。
10.根据权利要求8所述的方法,还包括:
响应于新链节点加入到所述联盟链网络,所述主节点将所述新链节点配置为组播分发树中的叶子节点,更新组播分发树并将更新后的组播分发树至少通知给所述新链节点及其父节点。
11.根据权利要求8所述的方法,还包括:
由所述主节点定期根据所述联盟链网络中各链节点周期性报告的本地路由表计算当前使用的组播分发树的第一总时延以及可能的更新组播分发树的第二总时延;
响应于所述第二总时延比所述第一总时延的减少量满足条件,由所述主节点更新并广播组播分发树。
12.一种运行联盟链网络的方法,包括:
由所述联盟链网络中的各链节点选举主节点,所述主节点能够发起共识提议;
由所述联盟链网络中的各链节点建立、并周期性地更新及广播其本地路由表,所述本地路由表指示相应链节点的各邻居节点的上行带宽、以及相应链节点与各邻居节点之间的网络延迟;
由所述主节点根据所述联盟链网络中各链节点的本地路由表建立并在所述联盟链网络中广播以所述联盟链网络中各链节点为树节点的组播分发树,所述组播分发树包括一个根节点、一层或多层树干节点、以及一层叶子节点,其中根节点为所述主节点;以及
由所述联盟链网络中的各链节点根据所述组播分发树,将包括共识周期内的交易集合的数据包组播给其子节点。
13.根据权利要求12所述的方法,还包括:
由所述主节点根据所述联盟链网络中各链节点的本地路由表建立全局路由表,并根据所述全局路由表建立所述组播分发树,其中,所述全局路由表包括所述联盟链网络中各链节点的本地路由表。
14.根据权利要求12所述的方法,还包括由所述主节点:
根据链节点的总数N、链节点上行带宽的最低要求bw、各链节点之间的通信延迟和共识超时时间T,确定所述组播分发树的阶数n和层数L,其中阶数n指示各树节点的最大子节点个数,层数L指示树干节点和叶子节点的总层数;以及
根据各链节点之间的通信延迟和各链节点的上行带宽,将所述联盟链网络的各链节点配置为所述组播分发树的相应的树节点。
15.根据权利要求14所述的方法,还包括由所述主节点根据如下确定所述组播分发树的阶数n和层数L:
1+n+n^2+n^3+......+n^(L-1)<=N<=1+n+n^2+n^3+......+n^(L);
n*b<=bw;以及
SRTT1+SRTT2+......+SRTT(L-1)+SRTT(L)<T,
其中,b为包括共识周期内的交易集合的所述数据包的大小,SRTTk为层数L中第k层的各树节点的平滑往返时间的最大值。
16.根据权利要求14所述的方法,其中,所述阶数n大于或等于3。
17.根据权利要求12所述的方法,其中,所述一层或多层树干节点中的第一层树干节点的个数大于或等于3。
18.根据权利要求14所述的方法,还包括由所述主节点:
将上行带宽小于阈值的链节点配置为叶子节点;以及
将上行带宽大于阈值的链节点配置为树干节点,并且将与父节点之间的通信延迟较小的节点配置在更靠近父节点的层。
19.根据权利要求12所述的方法,其中,包括共识周期内的交易集合的数据包为Pre-Prepare消息数据包。
20.根据权利要求19所述的方法,其中,所述联盟链网络中的各链节点之间为全连接模式,所述方法还包括:利用各链节点之间的全连接模式完成Prepare消息和Commit消息的发送,以完成本次共识过程。
21.根据权利要求12所述的方法,还包括响应于所述联盟链网络中的第一链节点离线,并且:
响应于所述一层或多层树干节点中的第一层树干节点的个数小于或等于3并且所述第一链节点为第一层树干节点,由所述主节点更新并广播组播分发树;以及
响应于所述一层或多层树干节点中的第一层树干节点的个数大于3并且所述第一链节点为第一层树干节点、或者所述第一链节点为所述一层或多层树干节点中的非第一层树干节点,由所述主节点在接收到所述第一链节点的所有子节点的更新的本地路由表之后,更新并广播组播分发树。
22.根据权利要求12所述的方法,还包括:
响应于新链节点加入到所述联盟链网络,所述主节点将所述新链节点配置为组播分发树中的叶子节点,更新组播分发树并将更新后的组播分发树至少通知给所述新链节点及其父节点。
23.根据权利要求12所述的方法,还包括:
由所述主节点定期根据所述联盟链网络中各链节点周期性报告的本地路由表计算当前使用的组播分发树的第一总时延以及可能的更新组播分发树的第二总时延;
响应于所述第二总时延比所述第一总时延的减少量满足条件,由所述主节点更新并广播组播分发树。
24.根据权利要求12所述的方法,还包括:
响应于主节点离线或满足主节点变更条件,由所述联盟链网络中的各链节点重新选举主节点;
由重新选举的主节点根据所述联盟链网络中各链节点的本地路由表建立并广播组播分发树;以及
由所述联盟链网络中的各链节点根据所述组播分发树,将包括共识周期内的交易集合的数据包组播给其子节点。
25.一种运行区块链网络的方法,所述区块链网络中的各节点之间为全连接模式,所述方法包括:
由所述区块链网络中的第一链节点根据各链节点的通信状况建立以所述区块链网络中各链节点为树节点的组播分发树,所述组播分发树包括一个根节点、一层或多层树干节点、以及一层叶子节点,其中,根节点为所述第一节点,并且根节点和每个树干节点均有多个子节点;
响应于要被发送给其他各链节点的第一数据包的大小大于阈值,根据所述组播分发树,所述第一链节点和每个树干节点将第一数据包组播给其子节点;以及
响应于要被发送给其他各链节点的第二数据包的大小小于阈值,所述第一链节点在所述区块链网络中广播第二数据包。
26.根据权利要求25所述的方法,其中,所述第一节点通过接收其他链节点的广播来获取各链节点的通信状况。
27.根据权利要求25所述的方法,其中,所述各链节点的通信状况包括各链节点之间的通信延迟和各链节点的上行带宽。
28.根据权利要求27所述的方法,还包括由所述第一节点:
将上行带宽小于阈值的链节点配置为叶子节点;以及
将上行带宽大于阈值的链节点配置为树干节点,并且将与父节点之间的通信延迟较小的节点配置在更靠近父节点的层。
29.根据权利要求25所述的方法,其中,根节点有大于或等于3个子节点。
30.根据权利要求25所述的方法,其中,所述一层或多层树干节点中的第一层树干节点的个数大于或等于3。
31.根据权利要求25所述的方法,其中,所述区块链网络为联盟链网络。
32.根据权利要求25所述的方法,其中,第一数据包包括Pre-Prepare消息数据包,第二数据包包括Prepare消息数据包或Commit消息数据包。
33.一种用于区块链网络的节点设备,包括电路系统,所述电路系统被配置为执行:
建立并周期性地更新及广播所述节点设备的本地路由表,所述本地路由表指示所述节点设备的各邻居节点的上行带宽、以及所述节点设备与各邻居节点之间的网络延迟;
响应于所述节点设备被选举为主节点:
根据所述联盟链网络中各链节点的本地路由表建立并在所述联盟链网络中广播以各链节点为树节点的组播分发树,所述组播分发树包括一个根节点、一层或多层树干节点、以及一层叶子节点,其中根节点为所述主节点;以及
根据所述组播分发树,将包括共识周期内的交易集合的数据包组播给所述一层或多层树干节点中的第一层树干节点;
响应于所述节点设备未被选举为主节点:
接收主节点广播的组播分发树;以及
根据所述组播分发树,将接收到的包括共识周期内的交易集合的数据包组播给所述节点设备的子节点。
34.一种用于区块链网络的节点设备,包括一个或多个处理器和一个或多个存储器,所述一个或多个存储器被配置为存储一系列计算机可执行指令,其中,所述一系列计算机可执行指令在由所述一个或多个处理器执行时,使所述一个或多个处理器执行:
建立并周期性地更新及广播所述节点设备的本地路由表,所述本地路由表指示所述节点设备的各邻居节点的上行带宽、以及所述节点设备与各邻居节点之间的网络延迟;
响应于所述节点设备被选举为主节点:
根据所述联盟链网络中各链节点的本地路由表建立并在所述联盟链网络中广播以各链节点为树节点的组播分发树,所述组播分发树包括一个根节点、一层或多层树干节点、以及一层叶子节点,其中根节点为所述主节点;以及
根据所述组播分发树,将包括共识周期内的交易集合的数据包组播给所述一层或多层树干节点中的第一层树干节点;
响应于所述节点设备未被选举为主节点:
接收主节点广播的组播分发树;以及
根据所述组播分发树,将接收到的包括共识周期内的交易集合的数据包组播给所述节点设备的子节点。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210616509.3A CN115022340B (zh) | 2022-06-01 | 2022-06-01 | 一种运行联盟链网络的方法和用于区块链网络的节点设备 |
PCT/CN2022/135443 WO2023231344A1 (zh) | 2022-06-01 | 2022-11-30 | 一种运行联盟链网络的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210616509.3A CN115022340B (zh) | 2022-06-01 | 2022-06-01 | 一种运行联盟链网络的方法和用于区块链网络的节点设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115022340A true CN115022340A (zh) | 2022-09-06 |
CN115022340B CN115022340B (zh) | 2024-05-28 |
Family
ID=83070891
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210616509.3A Active CN115022340B (zh) | 2022-06-01 | 2022-06-01 | 一种运行联盟链网络的方法和用于区块链网络的节点设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115022340B (zh) |
WO (1) | WO2023231344A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023231344A1 (zh) * | 2022-06-01 | 2023-12-07 | 蚂蚁区块链科技(上海)有限公司 | 一种运行联盟链网络的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10616324B1 (en) * | 2017-07-20 | 2020-04-07 | Architecture Technology Corporation | Decentralized ledger system and method for enterprises |
CN112104558A (zh) * | 2020-10-30 | 2020-12-18 | 上海交通大学 | 区块链分发网络的实现方法、系统、终端及介质 |
CN112769580A (zh) * | 2020-12-31 | 2021-05-07 | 阳江市链点创新科技发展有限公司 | 一种区块链分层激励共识算法 |
CN113365229A (zh) * | 2021-05-28 | 2021-09-07 | 电子科技大学 | 一种多联盟链共识算法的网络时延优化方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9467365B2 (en) * | 2013-02-14 | 2016-10-11 | Cisco Technology, Inc. | Mechanism and framework for finding optimal multicast tree roots without the knowledge of traffic sources and receivers for fabricpath and TRILL |
CN108010298A (zh) * | 2017-12-19 | 2018-05-08 | 青岛海信移动通信技术股份有限公司 | 设备控制方法及装置 |
CN112565389B (zh) * | 2020-11-30 | 2021-09-24 | 网易(杭州)网络有限公司 | 基于区块链的消息广播方法、装置、电子设备及存储介质 |
CN115022340B (zh) * | 2022-06-01 | 2024-05-28 | 蚂蚁区块链科技(上海)有限公司 | 一种运行联盟链网络的方法和用于区块链网络的节点设备 |
-
2022
- 2022-06-01 CN CN202210616509.3A patent/CN115022340B/zh active Active
- 2022-11-30 WO PCT/CN2022/135443 patent/WO2023231344A1/zh unknown
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10616324B1 (en) * | 2017-07-20 | 2020-04-07 | Architecture Technology Corporation | Decentralized ledger system and method for enterprises |
CN112104558A (zh) * | 2020-10-30 | 2020-12-18 | 上海交通大学 | 区块链分发网络的实现方法、系统、终端及介质 |
CN112769580A (zh) * | 2020-12-31 | 2021-05-07 | 阳江市链点创新科技发展有限公司 | 一种区块链分层激励共识算法 |
CN113365229A (zh) * | 2021-05-28 | 2021-09-07 | 电子科技大学 | 一种多联盟链共识算法的网络时延优化方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023231344A1 (zh) * | 2022-06-01 | 2023-12-07 | 蚂蚁区块链科技(上海)有限公司 | 一种运行联盟链网络的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115022340B (zh) | 2024-05-28 |
WO2023231344A1 (zh) | 2023-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11924044B2 (en) | Organizing execution of distributed operating systems for network devices | |
US11265216B2 (en) | Communicating state information in distributed operating systems | |
Oktian et al. | Distributed SDN controller system: A survey on design choice | |
Liao et al. | Density cluster based approach for controller placement problem in large-scale software defined networkings | |
US11316775B2 (en) | Maintaining coherency in distributed operating systems for network devices | |
CN112738820B (zh) | 一种服务功能链的动态部署方法、装置及计算机设备 | |
Jimenez et al. | On the controller placement for designing a distributed SDN control layer | |
CN106161610A (zh) | 一种分布式存储的方法和系统 | |
JP2020507866A (ja) | データ処理方法およびデバイス | |
Behnel et al. | On quality-of-service and publish-subscribe | |
CN110798517B (zh) | 去中心化集群负载均衡方法、系统、移动终端及存储介质 | |
CN110226159B (zh) | 在网络交换机上执行数据库功能的方法 | |
CN109412963B (zh) | 一种基于流拆分的服务功能链部署方法 | |
EP3560148B1 (en) | Database functions-defined network switch | |
CN115022340A (zh) | 一种运行联盟链网络的方法 | |
CN103297542A (zh) | 一种支持构件在线伸缩的云操作系统总线及均衡方法 | |
CN110460482B (zh) | 流量获取方法、装置、服务器及介质 | |
Ambalavanan et al. | DICer: Distributed coordination for in-network computations | |
CN113468182B (zh) | 一种数据存储方法及系统 | |
JP4818379B2 (ja) | フェイルオーバ機能を持つ分散システムおよび同システムにおけるフェイルオーバ方法 | |
Wang et al. | Reaching byzantine agreement underlying vanet | |
CN115002111B (zh) | 一种基于群组树架构的区块链共识方法 | |
CN114285755B (zh) | 一种跨子网交互方法、装置、电子设备和存储介质 | |
WO2023124915A1 (zh) | 数据筛选拓扑结构的生成方法和装置 | |
US20200252336A1 (en) | Switching fabric configuration and management system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |