CN114363336A - 一种启动/关闭区块链节点服务的方法和装置 - Google Patents

一种启动/关闭区块链节点服务的方法和装置 Download PDF

Info

Publication number
CN114363336A
CN114363336A CN202111669762.7A CN202111669762A CN114363336A CN 114363336 A CN114363336 A CN 114363336A CN 202111669762 A CN202111669762 A CN 202111669762A CN 114363336 A CN114363336 A CN 114363336A
Authority
CN
China
Prior art keywords
node
plug
closing
task
subnet
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.)
Pending
Application number
CN202111669762.7A
Other languages
English (en)
Inventor
陶友贤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alipay Hangzhou Information Technology Co Ltd
Original Assignee
Alipay Hangzhou Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alipay Hangzhou Information Technology Co Ltd filed Critical Alipay Hangzhou Information Technology Co Ltd
Priority to CN202111669762.7A priority Critical patent/CN114363336A/zh
Publication of CN114363336A publication Critical patent/CN114363336A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本说明书提供一种启动/关闭区块链节点服务的方法和装置,应用于第一节点设备,其中,启动区块链节点服务的方法包括:获取区块链节点服务的启动控制信息;在确定本地部署的区块链主网中的第一主网节点启动完成且本地部署有所述区块链主网管理的区块链子网中的多个子网节点的情况下,响应于所述启动控制信息创建至少两个节点启动线程;将所述多个子网节点分别对应的节点启动任务分配至所述至少两个节点启动线程中,以基于所述至少两个节点启动线程并行启动所述多个子网节点。

Description

一种启动/关闭区块链节点服务的方法和装置
技术领域
本说明书实施例属于区块链技术领域,尤其涉及一种启动/关闭区块链节点服务的方法和装置。
背景技术
区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。由于区块链具有去中心化、信息不可篡改、自治性等特性,区块链也受到人们越来越多的重视和应用。在一些区块链网络中,部分节点有时存在实现小范围交易的需求,以避免其他节点获得这些交易及其相关数据。因此可以在区块链主网的基础上进一步建立区块链子网。
在基于区块链主网组建区块链子网的场景下,同一个节点设备上往往会部署并运行多个区块链节点,当用户希望启动或关闭节点设备时,将涉及到对多个区块链节点的启动或关闭,因此,如何高效地对节点设备上的区块链节点进行高效的启动和关闭,是在该场景下亟待解决的问题。
发明内容
本发明的目的在于提供一种启动/关闭区块链节点服务的方法和装置。
根据本说明书一个或多个实施例的第一方面,提出了一种启动区块链节点服务的方法,应用于第一节点设备,包括:
获取区块链节点服务的启动控制信息;
在确定本地部署的区块链主网中的第一主网节点启动完成且本地部署有所述区块链主网管理的区块链子网中的多个子网节点的情况下,响应于所述启动控制信息创建至少两个节点启动线程;
将所述多个子网节点分别对应的节点启动任务分配至所述至少两个节点启动线程中,以基于所述至少两个节点启动线程并行启动所述多个子网节点。
根据本说明书一个或多个实施例的第二方面,提出了一种关闭区块链节点服务的方法,应用于第一节点设备,包括:
获取区块链节点服务的关闭控制信息;
在确定本地部署有所述区块链主网管理的区块链子网中的多个子网节点的情况下,响应于所述关闭控制信息创建至少两个节点关闭线程;
将所述多个子网节点分别对应的节点关闭任务分配至所述至少两个节点关闭线程中,以基于所述至少两个节点关闭线程并行关闭所述多个子网节点。
根据本说明书一个或多个实施例的第三方面,提出了一种启动区块链节点服务的装置,应用于第一节点设备,包括:
启动控制信息获取模块,用于获取区块链节点服务的启动控制信息;
启动线程创建模块,用于在确定本地部署的区块链主网中的第一主网节点启动完成且本地部署有所述区块链主网管理的区块链子网中的多个子网节点的情况下,响应于所述启动控制信息创建至少两个节点启动线程;
子网节点启动模块,用于将所述多个子网节点分别对应的节点启动任务分配至所述至少两个节点启动线程中,以基于所述至少两个节点启动线程并行启动所述多个子网节点。
根据本说明书一个或多个实施例的第四方面,提出了一种关闭区块链节点服务的装置,应用于第一节点设备,包括:
关闭控制信息获取模块,用于获取区块链节点服务的关闭控制信息;
关闭线程创建模块,用于在确定本地部署有所述区块链主网管理的区块链子网中的多个子网节点的情况下,响应于所述关闭控制信息创建至少两个节点关闭线程;
子网节点关闭模块,用于将所述多个子网节点分别对应的节点关闭任务分配至所述至少两个节点关闭线程中,以基于所述至少两个节点关闭线程并行关闭所述多个子网节点。
根据本说明书一个或多个实施例的第五方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如第一方面或第二方面中任一项所述的方法。
根据本说明书一个或多个实施例的第六方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面或第二方面中任一项所述方法的步骤。
本说明书提供了一种启动/关闭区块链节点服务的控制方法,可使在区块链主网组建并管理有区块链子网的情况下,控制节点设备创建多个线程并对本地部署的多个子网节点进行并行启动或关闭,实现区块链节点服务的高效启停。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是一示例性实施例提供的一种基于区块链主网组建区块链子网的示意图。
图2是一示例性实施例提供的一种启动区块链节点服务的方法的流程图。
图3是一示例性实施例提供的一种关闭区块链节点服务的方法的流程图。
图4是一示例性实施例提供的一种设备的结构示意图。
图5是一示例性实施例提供的一种启动区块链节点服务的装置的框图。
图6是一示例性实施例提供的一种关闭区块链节点服务的装置的框图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
由于区块链网络的去中心化特性,使得区块链网络中的所有区块链节点均会维护相同的区块数据,无法满足部分节点的特殊需求。以联盟链为例,所有联盟成员(即联盟内的节点成员)可以组成一区块链网络,所有联盟成员在该区块链网络中分别存在对应的区块链节点,并可以通过对应的区块链节点获得该区块链网络上发生的所有交易和相关数据。但在一些情况下,可能存在部分联盟成员希望完成一些具有保密需求的交易,这些联盟成员既希望这些交易能够在区块链上存证或借助于区块链技术的其他优势,又能够避免其他联盟成员查看到这些交易和相关数据。虽然这些联盟成员可以额外组建一新的区块链网络,其建立方式与上述包含所有联盟成员的区块链网络类似,但是从头开始建立一条新的区块链网络需要消耗大量的资源,且无论是该区块链网络的建立过程或是建成后的配置过程都非常耗时。联盟成员之间的需求往往是临时的或者具有一定的时效性,使得新建的区块链网络很快就会由于需求消失而失去存在的意义,从而进一步增加了上述区块链网络的建链成本。而联盟成员之间的需求经常会变化,而每一需求所对应的联盟成员也往往不同,因而每当联盟成员发生变化时就可能需要组建一新的区块链网络,从而造成资源和时间的大量浪费。
为此,可以将已组建的区块链网络作为区块链主网,并在该区块链主网的基础上组建区块链子网。那么,在诸如上述的联盟链场景下,联盟成员可以在已经参与区块链主网的情况下,基于自身需求而在区块链主网的基础上组建所需的区块链子网。由于区块链子网是在区块链主网的基础上所建立,使得区块链子网的组建过程相比于完全独立地组建一条区块链网络,所消耗的资源和所需的耗时等都极大地降低,灵活性极高。
基于区块链主网快捷组建区块链子网的过程如下:区块链主网中的各区块链节点分别获取组建区块链子网的交易,所述交易包含所述区块链子网的配置信息,所述配置信息包括参与组建所述区块链子网的节点成员的身份信息,所述区块链主网中的各区块链节点分别执行所述交易以透出所述配置信息,当所述配置信息包含第一区块链节点对应的节点成员的身份信息时,部署第一区块链节点的节点设备基于所述包含所述配置信息的创世块启动属于所述区块链子网的第二区块链节点。
以图1所示为例,区块链主网为subnet0,该subnet0包含的区块链节点为nodeA、nodeB、nodeC、nodeD和nodeE等。假定nodeA、nodeB、nodeC和nodeD希望组建一区块链子网:如果nodeA为管理员且仅允许管理员发起组建区块链子网的交易,那么可由nodeA向subnet0发起上述组建区块链子网的交易;如果nodeE为管理员且仅允许管理员发起组建区块链子网的交易,那么nodeA~nodeD需要向nodeE进行请求,使得nodeE向subnet0发起上述组建区块链子网的交易;如果nodeE为管理员但允许普通用户发起组建区块链子网的交易,那么nodeA~nodeE均可以向subnet0发起上述组建区块链子网的交易。当然,不论是管理员或者普通用户,发起组建区块链子网的交易的区块链节点并不一定参与所组建的区块链子网,比如虽然最终由nodeA、nodeB、nodeC和nodeD组建区块链子网,但可由nodeE向subnet0发起上述组建区块链子网的交易,而并不一定由nodeA~nodeD来发起该组建区块链子网的交易。
在区块链主网的基础上组建区块链子网时,容易理解的是,会使得该区块链子网与区块链主网之间存在逻辑上的层次关系。比如在图1所示的subnet0上组建区块链子网subnet1时,可以认为subnet0处于第一层、subnet1处于第二层。一种情况下,本说明书中的区块链主网可以为底层区块链网络,即区块链主网并非在其他区块链网络的基础上组建的区块链子网,比如图1中的subnet0可以认为属于底层区块链网络类型的区块链主网。另一种情况下,本说明书中的区块链主网也可以为其他区块链网络的子网,比如可以在图1中subnet1的基础上进一步组建另一区块链子网,此时可以认为subnet1为该区块链子网对应的区块链主网,而这并不影响该subnet1同时属于subnet0上创建的区块链子网。可见,区块链主网与区块链子网实际上是相对概念,同一区块链网络在一些情况下可以为区块链主网、另一些情况下可以为区块链子网。
上述组建区块链子网的交易在被发送至区块链主网后,由区块链主网内的共识节点进行共识,并在通过共识后由各主网节点执行该交易,以完成区块链子网的组建。共识过程取决于所采用的共识机制,本说明书并不对此进行限制。
通过在上述组建区块链子网的交易中包含配置信息,该配置信息可以用于对所组建的区块链子网进行配置,使得组建的区块链子网符合组网需求。例如,通过在配置信息中包含节点成员的身份信息,可以指定组建的区块链子网包含哪些区块链节点。
节点成员的身份信息可以包括节点的公钥,或者采用节点ID等其他能够表征节点身份的信息,本说明书并不对此进行限制。以公钥为例,每个区块链节点都存在对应的一组或多组公私钥对,由区块链节点持有私钥而公钥被公开且唯一对应于该私钥,因而可以通过公钥来表征相应区块链节点的身份。因此,对于希望作为区块链子网的节点成员的区块链节点,可以将这些区块链节点的公钥添加至上述组建区块链子网的交易中,以作为上述节点成员的身份信息。上述的公私钥对可以用于签名验证的过程。例如,在采用有签名的共识算法中,譬如subnet1上述的nodeA1采用自身维护的私钥对消息进行签名后,将经过签名的消息在subnet1中广播,而nodeB1、nodeC1和nodeD1可以用nodeA1的公钥对收到的消息进行签名验证,以确认自身收到的消息确实来自nodeA1且没有经过篡改。
第一主网节点可以为区块链主网上属于配置信息所指示的节点成员的区块链节点。在组建区块链子网时,并非由第一主网节点直接参与组建区块链子网、成为其节点成员,而是需要由用于部署该第一主网节点的节点设备生成第一子网节点,并由第一子网节点成为区块链子网中的节点成员。第一主网节点和第一子网节点对应于同一个区块链成员,比如在联盟链场景下对应于同一联盟链成员,但第一主网节点属于区块链主网、第一子网节点属于区块链子网,使得该区块链成员可以分别参与到区块链主网和区块链子网的交易中;并且,由于区块链主网和区块链子网属于相互独立的两个区块链网络,使得第一主网节点生成的区块与第一子网节点生成的区块分别存入所述节点设备上的不同存储(采用的存储譬如可以为数据库),实现了第一主网节点与第一子网节点分别使用的存储之间的相互隔离,因而区块链子网所产生的数据仅会在区块链子网的节点成员之间同步,使得仅参与了区块链主网的区块链成员无法获得区块链子网上产生的数据,实现了区块链主网与区块链子网之间的数据隔离,满足了部分区块链成员(即参与区块链子网的区块链成员)之间的交易需求。
可见,第一主网节点和第一子网节点是在逻辑上划分出来的区块链节点,而从物理设备的角度来说,相当于上述部署了第一主网节点和第一子网节点的节点设备同时参与了区块链主网和区块链子网。由于区块链主网与区块链子网之间相互独立,使得这两个区块链网络的身份体系也相互独立,因而即便第一主网节点和第一子网节点可以采用完全相同的公钥,仍然应当将两者视为不同的区块链节点。譬如在图1中,subnet0中的nodeA相当于第一主网节点,而部署该nodeA的节点设备生成了属于subnet1的nodeA1,该nodeA1相当于第一子网节点。可见,由于身份体系相互独立,所以即便第一子网节点所采用的公钥区别于第一主网节点,也不影响本说明书方案的实施。
当然,区块链子网的节点成员并不一定只是区块链主网的部分节点成员。在一些情况下,区块链子网的节点成员可以与区块链主网的节点成员完全一致,此时所有的区块链成员都可以获得区块链主网和区块链子网上的数据,但是区块链主网与区块链子网所产生的数据依然可以相互隔离,比如可以通过在区块链主网上实现一类业务、在区块链子网上实现另一类业务,从而可以使得这两类业务分别产生的业务数据之间相互隔离。
除了上述的节点成员的身份信息之外,配置信息还可以包括下述至少之一:所述区块链子网的网络标识、所述区块链子网的管理员的身份信息、针对区块链平台代码的属性配置等,本说明书并不对此进行限制。网络标识用于唯一表征该区块链子网,因而该区块链子网的网络标识应当区别于区块链主网和该区块链主网上组建的其他区块链子网。区块链子网的管理员的身份信息,譬如可以为作为管理员的节点成员的公钥;其中,区块链主网与区块链子网的管理员可以相同,也可以不同。
通过区块链主网来组建区块链子网的优势之一,就是由于生成第一子网节点的节点设备上已经部署了第一主网节点,因而可以将第一主网节点所使用的区块链平台代码复用在第一子网节点上,免去了区块链平台代码的重复部署,极大地提高了区块链子网的组建效率。那么,如果配置信息中未包含针对区块链平台代码的属性配置,第一子网节点可以复用第一主网节点上采用的属性配置;如果配置信息中包含了针对区块链平台代码的属性配置,第一子网节点可以采用该属性配置,使得第一子网节点所采用的属性配置不受限于第一主网节点的属性配置、与第一主网节点无关。针对区块链平台代码的属性配置可以包括下述至少之一:代码版本号、是否需要共识、共识算法类型、区块大小等,本说明书并不对此进行限制。
组建区块链子网的交易包括调用合约的交易。该交易中可以指明被调用的智能合约的地址、调用的方法和传入的参数。例如,调用的合约可以为前述的创世合约或系统合约,调用的方法可以为组建区块链子网的方法,传入的参数可以包括上述的配置信息。在一实施例中,该交易可以包含如下信息:
from:Administrator
to:Subnet
method:AddSubnet(string)
string:genesis
其中,from字段为该交易的发起方的信息,譬如Administrator表明该发起方为管理员;to字段为被调用的智能合约的地址,譬如该智能合约可以为Subnet合约,则to字段具体为该Subnet合约的地址;method字段为调用的方法,譬如在Subnet合约中用于组建区块链子网的方法可以为AddSubnet(string),而string为AddSubnet()方法中的参数,上述示例中通过genesis表征该参数的取值,该genesis具体为前述的配置信息。
以Subnet0上的节点nodeA~nodeE执行调用Subnet合约中AddSubnet()方法的交易为例。在交易通过共识后,nodeA~nodeE分别执行AddSubnet()方法并传入配置信息,得到相应的执行结果。
区块链网络中的节点在执行调用智能合约的交易后,会生成相应的收据(receipt),以用于记录与执行该智能合约相关的信息。这样,可以通过查询交易的收据来获得合约执行结果的相关信息。合约执行结果可以表现为收据中的事件(event)。消息机制可以通过收据中的事件实现消息传递,以触发区块链节点执行相应的处理。事件的结构譬如可以为:
Event:
[topic][data]
[topic][data]
......
在上述示例中,事件的数量可以为一个或多个;其中,每个事件分别包括主题(topic)和数据(data)等字段。区块链节点可以通过监听事件的topic,从而在监听到预定义的topic的情况下,执行预设处理,或者从相应事件的data字段读取相关内容,以及可以基于读取的内容执行预设处理。
上述的事件机制中,相当于在监听方(比如存在监听需求的用户)处存在具有监听功能的客户端,譬如该客户端上运行了用于实现监听功能的SDK等,由该客户端对区块链节点产生的事件进行监听,而区块链节点只需要正常生成收据即可。除了上述的事件机制之外,还可以通过其他方式实现交易信息的透出。例如,可以通过在区块链节点运行的区块链平台代码中嵌入监听代码,使得该监听代码可以监听区块链交易的交易内容、智能合约的合约状态、合约产生的收据等其中的一种或多种数据,并将监听到的数据发送至预定义的监听方。由于监听代码部署于区块链平台代码中,而非监听方的客户端处,因而相比于事件机制而言,这种基于监听代码的实现方式相对更加的主动。其中,上述的监听代码可以由区块链平台的开发人员在开发过程中加入区块链平台代码,也可以由监听方基于自身的需求而嵌入,本说明书并不对此进行限制。
可见,上述Subnet合约的执行结果可以包括所述配置信息,该执行结果可以处于前文所述的收据中,该收据中可以包含与执行AddSubnet()方法相关的event,即组网事件。组网事件的topic可以包含预定义的组网事件标识,以区别于其他的事件。譬如在与执行AddSubnet()方法相关的event中,topic的内容为关键词subnet,且该关键词区别于其他方法所产生event中的topic。那么,nodeA~nodeE通过监听生成的收据中各个event所含的topic,可以在监听到包含关键词subnet的topic的情况下,确定监听到与执行AddSubnet()方法相关的event,即组网事件。例如,收据中的event如下:
Event:
[topic:other][data]
[topic:subnet][data]
......
那么,nodeA~nodeE在监听到第1条event时,由于所含topic的内容为other,确定该event与AddSubnet()方法无关;以及,nodeA~nodeE在监听到第2条event时,由于所含topic的内容为subnet,确定该event与AddSubnet()方法相关,并进而读取该event对应的data字段,该data字段包含上述的配置信息。以配置信息包括区块链子网的节点成员的公钥为例,data字段的内容例如可以包括:
{subnet1;
nodeA的公钥,nodeA的IP、nodeA的端口号…;
nodeB的公钥,nodeB的IP、nodeB的端口号…;
nodeC的公钥,nodeC的IP、nodeC的端口号…;
nodeD的公钥,nodeD的IP、nodeD的端口号…;
}
其中,subnet1为希望创建的区块链子网的网络标识。区块链主网中的各个区块链节点可以记录该区块链主网上已创建的所有区块链子网的网络标识,或者与这些区块链子网相关的其他信息,这些信息譬如可以维护在上述的Subnet合约中,具体可以对应于该Subnet合约所含的一个或多个合约状态的取值。那么,nodeA~nodeE可以根据记录的已创建的所有区块链子网的网络标识,确定上述的subnet1是否已经存在;如果不存在,说明subnet1是当前需要创建的新区块链子网,如果存在则说明subnet1已经存在。
除了采用希望创建的新的区块链子网的网络标识之外,还可以采用预定义的新建网络标识,该新建网络标识表明相应的组网事件用于组建新的区块链子网。例如,可以将上述的subnet1替换为newsubnet,该newsubnet为预定义的新建网络标识,nodeA~nodeE在识别到data字段包含newsubnet时,即可确定包含该newsubnet的event为组网事件,需要创建新的区块链子网。
除了网络标识subnet1之外,上述data字段中还包含各个节点成员的身份信息等内容。部署第一主网节点的节点设备可以监听生成的收据,并在监听到所述组网事件且所述组网事件的内容表明第一主网节点属于所述节点成员的情况下,由部署第一主网节点的节点设备获取所述组网事件包含的配置信息或创世块。或者,第一区块链节点可以监听生成的收据,并在监听到所述组网事件且所述组网事件的内容表明第一区块链节点属于所述节点成员的情况下,触发部署第一区块链节点的节点设备获取所述组网事件包含的所述配置信息或所述创世块。
如前所述,节点设备可以直接监听收据。假定nodeA~nodeE分别部署在节点设备1~5上,节点设备1~5可以监听nodeA~nodeE分别生成的收据,那么在监听到subnet1是需要新组建的区块链子网的情况下,节点设备1~5会进一步识别data字段中包含的节点成员的身份信息,以确定自身的处理方式。以nodeA和节点设备1为例:如果节点设备1发现data字段包含nodeA的公钥、IP地址和端口号等身份信息,那么节点设备1在基于上述的消息机制从data字段获得配置信息的情况下,生成包含该配置信息的创世块,且节点设备1会在本地部署nodeA1,进而由nodeA1加载生成的创世块,从而成为subnet1的子网节点;类似地,节点设备2可以生成nodeB1、节点设备3可以生成nodeC1、节点设备4可以生成nodeD1。以及,节点设备5会发现data字段包含的身份信息与自身均不匹配,则该节点设备5不会根据data字段中的配置信息生成创世块,也不会生成subnet1中的区块链节点。
如前所述,区块链主网中的区块链节点可以监听收据,并根据监听结果触发节点设备执行相关处理。例如,nodeA~nodeE在确定subnet1是需要新组建的区块链子网的情况下,会进一步识别data字段中包含的节点成员的身份信息,以确定自身的处理方式。比如,nodeA~nodeD会发现在data字段包含自身的公钥、IP地址和端口号等身份信息,假定nodeA~nodeD分别部署在节点设备1~4上,以nodeA和节点设备1为例:nodeA会触发节点设备1,使得节点设备1基于上述的消息机制从data字段获得配置信息并生成包含该配置信息的创世块,且节点设备1会在本地部署nodeA1,该nodeA1加载生成的创世块,从而成为subnet1中的1个子网节点;类似地,nodeB会触发节点设备2生成nodeB1、nodeC会触发节点设备3生成nodeC1、nodeD会触发节点设备4生成nodeD1。以及,nodeE会发现data字段包含的身份信息与自身均不匹配,假定nodeE部署在节点设备5上,那么该节点设备5不会根据data字段中的配置信息生成创世块,也不会生成subnet1中的节点。
如前所述,第一主网节点与第一子网节点并不一定采用相同的身份信息。因此,在上述实施例中,data字段中可以包含预先为nodeA1~nodeD1生成的身份信息,且区别于nodeA~nodeD的身份信息。仍以nodeA和节点设备1为例:节点设备1如果在data字段中发现了nodeA1的身份信息,可以生成创世块、部署nodeA1,并由nodeA1加载该创世块;或者,nodeA如果在data字段中发现了nodeA1的身份信息,那么nodeA会触发节点设备1生成创世块、部署nodeA1,并由nodeA1加载该创世块。其他区块链节点或节点设备的处理方式类似,此处不再一一赘述。
除了配置信息之外,合约的执行结果可以包括创世块。换言之,除了可以在data字段中包含配置信息,还可以直接在执行合约调用的过程中生成包含配置信息的创世块,从而将创世块包含于data字段中,那么对于上述的nodeA~nodeD而言,相应的节点设备1~4可以通过消息机制直接从data字段获得创世块,而无需自行生成,可以提升对nodeA1~nodeD1的部署效率。
节点设备通过在该进程中创建一个运行区块链平台代码的实例,实现在该节点设备上部署一区块链节点。对于第一主网节点而言,由节点设备在上述进程中创建第一实例,并由该第一实例运行区块链平台代码而形成。类似地,对于第一子网节点而言,由节点设备在上述进程中创建区别于第一实例的第二实例,并由该第二实例运行区块链平台代码而形成。例如,节点设备可以首先在进程中创建第一实例,以形成区块链主网中的第一区块链节点;而当该节点设备对应的节点成员希望参与组建区块链子网时,可以在上述进程中创建第二实例,该第二实例区别于上述的第一实例,并由该第二实例形成区块链子网中的第二区块链节点。当第一实例与第二实例位于同一进程时,由于不涉及跨进程交互,可以降低对第一子网节点的部署难度、提高部署效率;当然,第二实例也可能与第一实例分别处于节点设备上的不同进程中,本说明书并不对此进行限制;例如,节点设备可以在第一进程中创建第一实例,以形成区块链主网中的第一区块链节点;而当该节点设备对应的节点成员希望参与组建区块链子网时,可以启动区别于第一进程的第二进程,并在该第二进程中创建第二实例,该第二实例区别于上述的第一实例,进而由该第二实例形成区块链子网中的第二区块链节点。事实上,本说明书实施例中涉及的任一节点设备上部署的各区块链节点均为运行在所述任一节点设备上的不同的区块链实例,任一节点设备上部署的各区块链节点生成的区块分别存入所述任一节点设备上的不同存储(例如数据库),且任一节点设备部署的各区块链节点分别使用的存储之间相互隔离。
通过上述方式,可以在区块链主网上创建出区块链子网。以图1为例,subnet0原本包含nodeA~nodeE,而在subnet0的基础上可以组建出subnet1,该subnet1包含nodeA1~nodeD1,且nodeA与nodeA1、nodeB与nodeB1、nodeC与nodeC1、nodeD与nodeD1分别部署在同一节点设备上。类似地,还可以在subnet0上组建出subnet2或更多的区块链子网,其中subnet2包含nodeA2、nodeB2、nodeC2和nodeE2,且nodeA与nodeA1、nodeA2,nodeB与nodeB1、nodeB2,nodeC、nodeC1与nodeC2,nodeD与nodeD1,nodeE与nodeE2分别部署在同一节点设备上。以及,可以将subnet1、subnet2等作为新的区块链主网,并在此基础上进一步组建出区块链子网,其过程与subnet1或subnet2的组建相似,此处不再赘述。可见,上述在区块链主网上发起交易选取节点成员以创建区块链子网的方式,可以使得新创建的区块链子网的子网节点均部署在区块链主网的主网节点所在的节点设备上,也就是从节点设备的角度上来说,区块链子网的子网节点所在的节点设备属于主网节点所在节点设备的子集,换言之,部署有区块链子网的子网节点所处的节点设备上部署有区块链主网中的主网节点。
除了通过上述在区块链主网上发起交易选取节点成员以创建区块链子网的方式,还可以通过其他手段创建区块链子网,并使得其受到区块链主网的管理。例如,可以通过注册方式在区块链主网上组建区块链子网(后续简称注册组网方式),将现有区块链网络直接注册至区块链主网,使新注册的区块链网络受到区块链主网的管理,从而使得新注册的区块链网络成为区块链主网的区块链子网。通过注册组网方式,待组建区块链子网的子网信息被直接注册至区块链主网,使得区块链主网获取待组建区块链子网的相关信息(通过接收并执行待组建区块链网络发出的、用于将其身份信息与分配至该待组建区块链网络的子网标识进行关联存证的交易),例如待组建区块链子网的子网标识和运行状态,其中各节点成员的公钥和插件配置信息、各节点设备的IP地址和端口信息等,这些信息会被写入区块链主网对应的系统合约的合约状态中,由此区块链主网将获取该待组建区块链子网的管理权,在完成注册后,便意味着区块链子网组建完成。由于注册组网方式并不需要通过交易在区块链主网上指定节点成员构成区块链子网,因此通过注册组网方式组建的区块链子网中的子网节点可以与部署在区块链主网中各节点的节点设备完全不同或部分不同,例如图1中subnet0以注册组网方式创建了一个subnet4(图1中未示出),假设subnet0自身所包含的主网节点nodeA~nodeE分别部署于节点设备1~5,那么subnet4对应的子网节点可以部署于除节点设备1~5外的其他任意节点设备上,或者,subnet4中的其中一个或多个子网节点分别部署于节点设备1~5内的任意节点设备(但仍需要保证一个节点设备上仅部署subnet4中的一个子网节点),而subnet4中的其他的子网节点部署于除节点设备1~5外的其他任意节点设备上,当然,subnet4中的子网节点也可以均部署于节点设备1~5之中。
通过上述方式来组建区块链子网,该区块链子网中包含的节点成员由前文所述的配置信息所确定。因此,在上述基于区块链主网组建区块链子网的场景下,同一节点设备上往往部署有多个区块链节点,例如图1中nodeA、nodeA1和nodeA2就部署在同一节点设备1上,那么当用户如管理员希望启动或关闭节点设备1的区块链节点服务时,就会涉及对节点设备1中部署的各区块链节点进行启动或关闭,具体而言,是需要控制节点设备1部署的nodeA、nodeA1和nodeA2进行启动或关闭。为此,本说明书提供了一种启动/关闭区块链节点服务的控制方法,以实现节点设备上部署的多个区块链节点的高效启动。
图2是一示例性实施例提供的一种启动区块链节点服务的方法的流程图。如图5所示,该方法应用于第一节点设备,包括:
S202:获取区块链节点服务的启动控制信息。
第一节点设备可以部署有区块链主网或区块链子网对应的主网节点或子网节点,也可以部署有除区块链主网或区块链子网以外的其他区块链网络对应的其他区块链节点,这种情况下,第一节点设备可以通过监听节点服务启动交易的收据的方式获取区块链节点服务的启动控制信息。需要指出的是,本说明书实施例中的区块链节点服务包括预先确定的区块链主网和/或区块链子网所对应的区块链节点服务,因此第一节点设备可以在已经启动主网节点的情况下,通过监听主网节点上自习的节点服务启动交易的收据从而获取区块链节点服务的启动控制信息;或者,虽然第一节点设备在开启区块链节点服务之前未启动相关的区块链主网或区块链子网对应的区块链节点,但第一节点设备可能部署有除区块链主网或区块链子网以外的其他区块链网络对应的其他区块链节点,且所述其他区块链节点处于开启状态,因此理论上第一节点设备在未启动区块链节点服务的情况下,也可以通过监听其他区块链节点上执行的节点服务启动交易的收据,从而获取区块链节点服务的启动控制信息。在一实施例中,部署有主网节点的节点设备均部署有所述其他区块链网络对应的其他区块链节点,因此,可以通过在所述其他区块链网络上发起节点服务启动交易,以使各节点设备均可以通过监听该交易的收据获取区块链节点服务的启动控制信息并控制主网节点和子网节点的启动,从而实现区块链主网和区块链子网构成的区块链系统整体的启动过程。
第一节点设备还可以通过多种途径获取区块链节点服务的启动控制信息,例如,可以直接通过接收区块链主网的管理员发送的节点服务启动消息从而获取区块链节点服务的启动控制信息,也可以通过接收区块链主网的普通用户发送的节点服务启动消息获取,本说明书实施例对此并不做任何限制。
在所述启动控制信息中可以包含第一节点设备对应的身份信息,例如第一节点设备的IP地址、端口号或者所持有的主网公钥。如前所述,启动节点交易的收据或者节点服务启动消息中可以包含身份信息,使得第一节点设备获取的区块链节点服务的启动控制信息中包含该身份信息,当第一节点设备通过检测所述启动控制信息中包含第一节点设备自身的身份信息时,才会进一步执行后续启动区块链节点服务的过程,从而使得在区块链主网或其他区块链网络上发起的节点服务启动交易,或者对各节点设备进行广播的节点服务启动消息能够控制特定的节点设备启动区块链节点服务。
S204:在确定本地部署的区块链主网中的第一主网节点启动完成且本地部署有所述区块链主网管理的区块链子网中的多个子网节点的情况下,响应于所述启动控制信息创建至少两个节点启动线程。
第一节点设备在获取启动控制信息后,会检测本地部署的区块链主网中的第一主网节点是否已经启动,在确定第一主网节点以及启动完成并处于开启状态的情况下,会进一步开始启动本地部署的所述区块链主网管理的区块链子网中的子网节点,而如果检测到第一主网节点处于正在启动的状态,则会等待第一主网节点启动完成后再执行后续的过程。
在一实施例中,如果第一节点设备检测到第一主网节点处于未启动的状态,则会首先响应于所述启动控制信息对第一主网节点进行启动。具体而言,第一节点设备会首先创建一个专用于启动第一主网节点的节点启动线程,并将第一主网节点对应的节点启动任务分配至该节点启动线程,再通过运行该节点启动线程启动第一主网节点。第一主网节点启动后,会自动与其他区块链主网中的其他节点建立网络连接,当区块链主网中的所有主网节点均启动完成后,可以认为区块链主网启动完成,此时可以在区块链主网上发起交易,使得交易能够正常被共识和执行,但对于第一节点设备而言,当第一主网节点启动后,由于第一主网节点理论上已经携带有所有区块链主网的信息,因此第一节点设备可以通过发起本地交易的方式获取区块链主网中的各类信息。
以图1为例,假设第一节点设备为节点设备1,而节点设备1部署的nodeA、nodeA1和nodeA2分别对应的subnet0、subnet1和subnet2具有一定的层级关系,体现为高层级的区块链网络受到相邻的低层级的区块链网络的管理,例如subnet1和subnet2受到subnet0的管理,subnet0可以控制启动或关闭subnet1和subnet2,因此如果不按照一定的流程顺序对各区块链节点进行启动或关闭,可能会导致部分区块链节点无法正常启动或关闭,甚至导致节点设备崩溃。在本说明书实施例中,由于是在确定第一主网节点启动完成的情况下才会开始启动子网节点,因此可使在区块链主网组建并管理有区块链子网的场景下,控制节点设备按照其所部署的各区块链节点所属区块链网络的管理顺序,依次开启/关闭各区块链节点,实现安全、无损地启动/关闭节点设备的区块链节点服务。
S206:将所述多个子网节点分别对应的节点启动任务分配至所述至少两个节点启动线程中,以基于所述至少两个节点启动线程并行启动所述多个子网节点。
在本说明书实施例中,第一节点设备除了部署有第一主网节点之外,还部署有分别属于不同区块链子网的多个子网节点,在确定第一主网节点启动完成后,需要进一步对所述多个子网节点进行启动,而本说明书在对所述多个子网节点进行启动时采用了多线程启动的方式,即首先创建至少两个(该数量不超过第一节点设备上部署的子网节点的总数)节点启动线程,然后再将第一节点设备上部署的所述多个子网节点分配至创建的至少两个节点启动线程中,并最终基于所述至少两个节点启动线程并行启动所述多个子网节点。以图1为例,假设第一节点设备为节点设备1,则第一主网节点为nodeA,在节点设备1获取到启动控制信息并确定nodeA启动完成后,会进一步创建节点启动线程1和节点启动线程2共两个节点启动线程,然后将本地部署的子网节点nodeA1和nodeA2对应的节点启动任务分别分配至节点启动线程1和节点启动线程2,使得最终节点启动线程1分配有nodeA1对应的节点启动任务,而节点启动线程2分配有nodeA2对应的节点启动任务。最后,节点设备1会同时运行节点启动线程1和节点启动线程2,从而使得nodeA1和nodeA2分别对应的节点启动任务被并行执行,实现对nodeA1和nodeA2的并行启动。
本说明书提供了一种启动/关闭区块链节点服务的控制方法,可使在区块链主网组建并管理有区块链子网的情况下,控制节点设备创建多个线程并对本地部署的多个子网节点进行并行启动或关闭,实现区块链节点服务的高效启停。
在本说明书实施例中,第一节点设备上部署的各区块链节点实质是运行在第一节点设备上且由各自插件模块构成的不同区块链实例,同时,第一节点设备部署有任一区块链节点对应的插件管理器,用于管理第一节点设备上部署的所述任一区块链节点(主网节点或子网节点)在运行时所依赖的插件模块,也即用于构成所述任一区块链节点的插件模块。因此,本说明书实施例涉及的第一节点设备启动或关闭任一区块链节点,是指第一节点设备可以通过控制所述任一区块链节点对应的插件管理器启动或关闭用于构成所述任一区块链节点的插件模块。本说明书实施例涉及的第一节点设备通过插件管理器启动或关闭区块链节点的操作,均是第一节点设备上运行的节点启动线程在执行节点启动任务的结果。
本说明书实施例中,第一节点设备上部署的插件管理器维护有第一节点设备上部署的各区块链节点的运行状态,因此,在第一节点设备可以通过查看本地部署的第一主网节点对应的插件管理器获取第一主网节点的运行状态,从而确定第一主网节点是否已经启动完成。
第一节点设备维护有本地子网列表,该本地子网列表中记录有第一节点设备本地部署的各子网节点所属区块链子网的子网标识,如前所述,区块链子网由区块链主网所管理,因此该本地子网列表中记录的子网标识对应的区块链子网均由所述区块链主网所管理。当该本地子网列表中记录有某一区块链子网的子网标识时,则可以认为第一节点设备部署有该子网标识对应区块链子网中的子网节点,因此,第一节点设备可以通过查询自身维护的本地子网列表中是否包含子网标识,从而确定本地是否部署有所述区块链主网管理的区块链子网中的子网节点,而无需等待区块链主网完全启动完成。
第一节点设备维护的本地子网列表中还记录有第一节点设备本地部署的各子网节点所属区块链子网的运行状态,如果该本地子网列表中虽然记录有某一子网节点所属区块链子网对应的子网标识,但该区块链子网对应的运行状态为关闭状态,这说明在区块链主网的管理下,该子网节点所属的区块链子网被要求设置为关闭状态,因此可以不启动该子网节点,从而保证区块链节点的实际运行状态与区块链主网的管理记录相一致,而如果该子网节点所属区块链子网对应的运行状态为开启状态,则说明该子网节点所属的区块链子网被要求设置为开启状态,此时可以启动该子网节点。通过在所述区块链子网的运行状态为开启状态的情况下,启动所述子网节点,可以确保正确、符合要求地启动第一节点设备区块链节点服务。
以图4为例,假定subnet0上nodeA~nodeE分别部署在节点设备1~5上,因而节点设备1除了部署有主网节点nodeA,还部署有属于subnet1的子网节点nodeA1和subnet2的子网节点nodeA2,因此对于节点设备1而言,其本地维护的本地子网列表中记录有subnet1和subnet2的子网标识以及运行状态,若节点设备1获取到区块链节点服务的启动控制信息,则首先通过插件管理器检查自身是否部署有主网节点nodeA,在确定部署有nodeA的情况下,响应于所述启动控制信息而启动本地部署的nodeA,然后依然通过插件管理器检查nodeA是否启动完成,在nodeA启动完成的情况下,查找本地维护的本地子网列表,从而确定节点设备1本地已经部署有subnet1对应的nodeA1以及subnet2对应的nodeA2,且假设subnet1与subnet2的运行状态均处于开启状态,那么此时节点设备1可以响应于所述启动控制信息,控制nodeA1和nodeA2对应的插件管理器启动nodeA1和nodeA2;而对于节点设备5而言,其本地部署有属于subnet0的nodeE和属于subnet2的nodeE2,于是节点设备5维护的本地子网列表中记录有subnet2的子网标识和运行状态,若节点设备5获取到区块链节点服务的启动控制信息,则首先通过nodeE对应的插件管理器启动主网节点nodeE,在nodeA启动完成的情况下,查找本地维护的本地子网列表,发现子网标识subnet2包含于其所维护的本地子网列表中,由此节点设备5可以确定本地部署有subnet2对应的子网节点nodeE2,假设subnet2对应的运行状态处于关闭状态,那么此时节点设备5将不做任何操作,以维持subnet2所应该处于的关闭状态。类似的,节点设备2、3和4在获取到区块链节点服务的启动控制信息后也会执行上述流程以开启相应的主网节点和子网节点,使得节点设备完成开启区块链节点服务的过程。
本说明书实施例中,本地子网列表可以由第一节点设备通过查询第一主网节点上部署的子网管理合约而生成。例如,本地子网列表中包含的子网标识和运行状态可以通过第一节点设备监听子网信息查询事件得到,所述子网信息查询事件通过第一主网节点执行调用所述区块链主网上子网管理合约的子网信息查询交易生成,所述子网信息查询事件包含所述区块链主网管理下的各区块链子网的子网信息,所述子网信息包括子网标识、节点成员身份信息、运行状态和插件配置信息等。例如,节点设备1在获取区块链节点服务的启动控制信息并启动第一主网节点后,会向区块链主网上子网管理合约发起子网信息查询交易(本地交易,不会参与共识),并监听子网管理合约执行该交易后生成的子网信息查询事件,其topic关键词为ListSubnet,data字段包含区块链主网管理下的各区块链子网的子网信息,包括区块链主网以及各区块链子网的子网标识、节点成员身份信息、运行状态、插件配置信息等,子网信息查询事件可以表示为如下形式:
[topic:ListSubnet][data]
其被节点设备1监听到后,读取data字段中的内容(仅展示区块链子网的子网标识、节点成员身份信息和运行状态部分)为:
{subnet1:on;nodeA1,nodeB1,nodeC1,nodeD1;
subnet2:off;nodeA2,nodeB2,nodeC2,nodeE2;}
其中,前缀subnet1、subnet2代表区块链子网的子网标识,冒号后的“on”或“off”代表运行状态,后缀nodeA1等代表子网节点的节点身份信息,例如节点公钥。节点设备1将自身维护的各个节点身份信息与上述data字段中的内容进行对比,找到自身所部署的子网节点所属的区块链子网,例如节点设备1维护有nodeA1和nodeA2的身份信息,而data字段中相应子网节点对应的区块链子网的子网标识为subnet1和subnet2,因此节点设备1可以确定本地已经部署有subnet1和subnet2对应的子网节点,于是将subnet1与subnet2对应的子网标识和运行状态分别加入本地子网列表。在另一实施例中,节点设备1可以预先向该子网管理合约发起所述子网信息查询交易,从而已经维护有包含subnet1与subnet2的本地子网列表,当节点设备1在获取区块链节点服务的启动控制信息并启动第一主网节点后,便无需再向子网管理合约发起子网信息查询交易。子网管理合约的合约状态中维护有区块链主网管理的各区块链子网的子网合约状态,每一区块链子网对应的子网合约状态中记录有对应区块链子网的子网标识、运行状态、节点成员的公钥和共识类型信息、插件配置信息、创世块等,事实上,子网管理合约可以与前文所述的Subnet合约为同一合约。
或者,第一节点设备可以从第一主网节点对应的数据库中读取所述子网管理合约的合约状态,并从读取到的合约状态包含的子网信息生成本地子网列表,例如节点设备1可以直接从第一主网节点对应的区块链主网的数据库中,读取到部署于区块链主网的子网管理合约的合约状态,由于该合约状态中记载有区块链主网管理下的各区块链子网的子网信息,因此节点设备1可以根据子网管理合约的合约状态以及节点设备1维护的nodeA1和nodeA2的身份信息,从而将与nodeA1和nodeA2分别对应的subnet1与subnet2对应的子网标识和运行状态分别加入本地子网列表。上述子网管理合约也可以是前述的Subnet合约,也可以是部署于区块链主网上的其他智能合约。
如前所述,第一节点设备可以通过查询自身维护的本地子网列表,确定本地是否已经部署有区块链主网管理的区块链子网中的子网节点,以及区块链子网的运行状态,而在另一实施例中,当获取上述子网信息查询事件的data字段后,第一节点设备也可以直接根据data字段中的各区块链子网的子网信息确定本地是否部署有子网节点以及区块链子网的运行状态,而无需利用或整理出本地子网列表,例如,节点设备1在获取区块链节点服务的启动控制信息并启动第一主网节点后,节点设备1会直接在上述data字段中进行查询,得到subnet1所对应的子网节点的身份信息为nodeA1、nodeB1、nodeC1和nodeD1,运行状态为开启状态,subnet2所对应的子网节点的身份信息为nodeA2、nodeB2,nodeC2和nodeE2,运行状态为关闭状态,然后将自身维护的身份信息nodeA1和nodeA2与之比对,判断自身维护的身份信息既包含于subnet1对应的子网节点成员,又包含于subnet2对应的子网节点成员,因此节点设备1可以确定本地部署有subnet1和subnet2分别对应的nodeA1和nodeA2,以及subnet1的运行状态为开启状态,subnet2的运行状态为关闭状态。
如前所述,通过在区块链主网的基础上发出组建区块链子网的交易从而组建区块链子网,可以使得新组建的区块链子网受到组建该区块链子网的区块链主网的管理,然而,除了上述发出组建区块链子网交易的方式(后续简称为交易组网方式),还可以通过其他手段组建区块链子网,并使得其受到区块链主网的管理。例如,可以通过注册方式在区块链主网上组建区块链子网(后续简称注册组网方式),待组建区块链子网的子网信息被直接注册至区块链主网,使得区块链主网获取待组建区块链子网的相关信息,例如待组建区块链子网的子网标识和运行状态、其中各节点成员的公钥和插件配置信息、各节点设备的IP地址和端口信息等,这些信息会被写入区块链主网对应的子网管理合约的合约状态中,由此区块链主网将获取该待组建区块链子网的管理权,在完成注册后,便意味着区块链子网组建完成。由于注册方式并不需要通过交易在区块链主网的区块链节点之间传递信息,因此通过注册组网方式组建的区块链子网中的子网节点可以与部署在区块链主网中各主网节点的节点设备完全不同或部分不同,例如图4中subnet0以注册方式组建了一个subnet4,假设subnet0自身所包含的主网节点nodeA~nodeE分别部署于节点设备1~5,那么subnet4对应的子网节点可以部署于除节点设备1~5外的其他任意节点设备上,或者,subnet4中的子网节点nodeA4部署于节点设备1,而subnet4中的子网节点nodeF4部署于节点设备6,当然,subnet4中的子网节点也可以均部署于节点设备1~5之中。
在一实施例中,第一节点设备在确定第二节点设备部署有所述区块链子网中的子网节点且未部署所述区块链主网中的主网节点的情况下,向第二节点设备提供所述启动控制信息,以指示所述第二节点设备启动第二节点设备本地部署的所述区块链子网中的子网节点。如前所述,第一节点设备可以通过监听子网管理合约执行子网信息查询交易后生成的子网信息查询事件,获取其中data字段包含的区块链主网以及区块链主网管理下的所有区块链子网(而非本地部署的子网节点所属的区块链子网)的子网信息,因此第一节点设备通过该data字段中的内容从而确定任一区块链子网中的各子网节点所在节点设备的IP地址,通过将这些IP地址与区块链主网中的各主网节点所在节点设备的IP地址进行对比,从而确定特定区块链子网中的特定子网节点所在的节点设备不属于各主网节点所在的节点设备,即确定该特定节点设备(第二节点设备)部署有所述区块链子网中的子网节点且未部署所述区块链主网中的主网节点,并且,该特定区块链子网是通过注册组网方式组建或者该特定区块链子网是通过交易组网方式组建但其中包含以注册方式加入的部署于第二节点设备的子网节点,在这种情况下,第一节点设备可以进一步通过上述data字段中记录的第二节点设备的IP地址,向第二节点设备提供所述启动控制信息,以指示所述第二节点设备启动第二节点设备本地部署的所述区块链子网中的子网节点,从而同步启动以注册方式组网的区块链子网中的子网节点。
如前所述,第一节点设备可以通过控制任一区块链节点对应的插件管理器,以启动或关闭用于构成所述任一区块链节点的插件模块。在一种情况下,第一节点设备只会部署一个共享插件管理器,用于管理该节点设备下部署的所有区块链节点对应的插件模块,具体而言,共享插件管理器中维护有本地部署的各区块链节点的插件配置信息,而由于同一区块链网络中的不同区块链节点的插件模块往往相同,所以区块链节点的插件配置信息与该区块链节点所属的区块链网络的插件配置信息一般是一致的,当然同一区块链网络中的不同区块链节点的插件模块也可能不同。区块链节点的插件配置信息用于指示构成所述某一区块链节点的具体的插件模块,例如可以包括:业务网络插件、服务插件、P2P(peer-to-peer,点对点通讯)插件、区块链子网管理插件、Cache(高速缓存存储器)插件、验证插件、事件管理插件、共识插件、同步插件、执行插件、区块链插件、存储插件等,本说明书对此并不做任何限制。
在另一种情况下,第一节点设备会根据该节点设备部署的每个区块链节点均单独分配一个对应的独立插件管理器,使得独立插件管理器仅维护有对应区块链节点的插件配置信息,专门负责管理对应区块链节点的插件模块,例如开启、关闭、替换相应区块链节点的插件模块。
如前所述,子网状态查询事件中可以包含区块链主网以及各区块链子网的插件配置信息,而任一区块链网络的插件配置信息中包含有该区块链网络下的各区块链节点的插件配置信息,这使得第一节点设备可以根据自身身份信息确定本地部署的子网节点的插件配置信息,所以第一节点设备维护的本地子网列表中可以记录有本地部署的各子网节点所属区块链子网的插件配置信息,因此,第一节点设备中部署的插件管理器能够通过读取本地子网列表获取第一节点设备本地部署的各区块链节点的插件配置信息。
第一节点设备在响应于启动/关闭控制信息而启动本地部署的区块链主网中的第一主网节点时,会控制第一主网节点对应的插件管理器启动或关闭用于构成第一主网节点的插件模块。例如,当节点设备1响应于区块链节点服务的启动控制信息而启动第一主网节点时,在一种情况下,节点设备1可以控制subnet0对应的主网节点即nodeA的独立插件管理器,以使nodeA的独立插件管理器根据nodeA的插件配置信息,启动用于构成nodeA的插件模块;在另一种情况下,节点设备1可以控制共享插件管理器,以使共享插件管理器查找得到subnet0对应的主网节点即nodeA的插件配置信息,并根据nodeA的插件配置信息启动用于构成nodeA0的插件模块;类似的,当节点设备1响应于区块链节点服务的关闭控制信息而关闭第一主网节点时,与上述启动过程类似,仅是将上述过程中的启动换成关闭;或者,当节点设备1响应于区块链节点服务的启动控制信息而启动子网节点nodeA1时,也与上述启动过程类似,仅是将nodeA的插件管理器替换成nodeA1的插件管理器,nodeA的插件配置信息替换成nodeA1的插件配置信息。
第一节点设备上不同的区块链节点可能在运行时依赖于同一个插件模块,而这样的插件就处于共享状态。例如节点设备1上目前处于开启状态的区块链节点包括nodeA和nodeA1,用于构成nodeA的插件模块包括插件1.0、插件2.0、插件3.0和插件4.0,用于构成nodeA1的插件模块包括插件1.1、插件2.0、插件3.1、插件4.1和插件5.1,其中,插件1.0和插件1.1、插件3.0和插件3.1、插件4.0和插件4.1虽然属于同一类型的插件模块,具有相同的插件功能,但依然是两个不同的插件模块被分别嵌入不同的区块链节点,彼此不会共享信息,本质上属于不同的插件模块。而插件2.0则是同时被nodeA和nodeA1所依赖和使用,因此,像插件2.0这种同时被两个或两个以上的区块链节点共同使用的插件模块就处于共享状态,与之对应的,仅被一个区块链节点单独依赖的插件模块则处于独享状态,例如上述除插件2.0以外的插件均处于独享状态。
另一方面,第一节点设备上可能运行有运行模式为共享模式的特定插件模块的,这意味着,假如第一节点设备上待启动的新区块链节点的构成里包含该特定插件模块,且新区块链节点对应的插件配置信息中对应该特定插件模块的运行需求为共享运行的情况下,那么在启动新区块链节点的过程中,将不会启动该特定插件模块,而是直接将已经运行的该特定插件模块共享至新区块链节点,以供新区块链节点直接调用。而假设上述特定插件模块的运行模式为独享模式,那么在启动新区块链节点的过程中,由于该特定插件模块的运行模式为为独享模式,不支持共享运行,因此无法直接供新区块链节点直接调用,而需要重新启动一个具有相同的插件模块以分配至新区块链节点,以供新区块链节点调用。
第一节点设备上部署的插件管理器,会根据本地部署的各区块链节点的插件配置信息以及运行状态,维护有其所管理的各区块链节点对应的插件信息属性列表,用于标注所需使用的各插件模块的属性信息,包括运行状态是开启状态还是关闭状态,运行模式是共享模式还是独享模式,处于共享状态还是独享状态,与其他插件模块的依赖关系等。插件信息属性列表是实时更新的,例如,当插件管理器读取本地子网列表后,发现当前运行状态为开启状态的区块链子网只有subnet0和subnet1,那么就会进一步查找得到本地部署的subnet0和subnet1分别对应的nodeA与nodeA1的插件配置信息,进而比对可以得到nodeA与nodeA1所共同使用的插件模块为插件2.0,于是将插件信息属性列表中的插件2.0标注为共享状态,而当subnet1关闭后,插件管理器再次读取本地子网列表发现运行状态为开启状态的区块链子网只有subnet0,那么就只能查找得到nodeA的插件配置信息,由于插件2.0目前已经仅由nodeA所依赖,于是将插件信息属性列表中的插件2.0从共享状态更改为独享状态,同时将用于构成nodeA1除插件2.0以外的插件模块的运行状态从开启状态更改为关闭状态。除了通过本地子网列表中各区块链网络的子网信息获取本地部署的各区块链节点的插件配置信息、运行状态以外,插件管理器也可以单独维护本地部署的主网节点和各子网节点的插件配置信息与运行状态,而在完成对相应子网节点的运行状态的控制后,自行更新维护的运行状态等信息,从而可以更加及时、准确地更新插件信息属性列表中的各插件模块的属性信息。
由于存在处于共享状态的插件以及运行模式为共享模式的插件,所以第一节点设备在启动用于构成任一区块链节点的插件模块时,需要避免重复启动运行模式为共享模式的插件,从而保证任一区块链节点中各插件模块的共享需求被正确满足,进而确保任一区块链节点的正常运行;而在关闭用于构成任一区块链节点的插件模块时,需要避免关闭处于共享状态的插件模块,从而防止影响第一子网节点以外的其他区块链节点的正常运行。即第一节点设备在启动用于构成所述任一区块链节点的插件模块时,需要按照以下流程进行:
确定用于构成所述任一区块链节点的各插件模块的插件描述信息,以及各插件模块的运行需求。在本实施例中,可以通过查询任一区块链节点对应的插件信息属性列表,查找得到用于构成所述任一区块链节点的各插件模块的插件描述信息以及运行需求,其中,插件描述信息包括插件类型、插件名、插件功能中至少一项,用于指向具体的插件模块。
在任一插件模块的运行需求为共享运行的情况下,若存在匹配于所述任一插件模块的插件描述信息的已开启插件模块,且所述已开启插件模块的运行模式为共享模式,则将所述已开启插件模块共享至所述任一区块链节点。其中,所述各插件模块的运行需求被定义于所述任一区块链节点对应的插件配置信息中,若插件配置信息中任一插件模块的运行需求为共享运行时,说明需要使该任一插件模块以共享模式运行,并且,如果在启动该任一插件模块之前,第一节点设备就已经通过插件信息属性列表查找到该任一插件模块的插件描述信息对应的已开启插件模块,那么会进一步在确定该已开启插件模块的运行模式为共享模式的情况下将该已开启插件模块共享至该任一插件模块所属的区块链节点。
在所述任一插件模块的运行需求为共享运行的情况下,若不存在匹配于所述插件描述信息且运行模式为共享模式的已开启插件模块,则启动所述任一插件模块。若插件配置信息中任一插件模块的运行需求为共享运行时,说明需要使该任一插件模块以共享模式运行,并且,如果在启动该任一插件模块之前,第一节点设备就已经通过插件信息属性列表查找到不存在该任一插件模块的插件描述信息对应的已开启插件模块,或者虽然存在该已开启插件模块但其运行模式不为共享模式,那么此时认为不存在匹配于所述插件描述信息且运行模式为共享模式的已开启插件模块,因此需要启动该任一插件模块,同时,在启动所述插件描述信息对应的插件模块时,还会基于所述运行需求设置所启动的插件模块的运行模式,例如由于该任一插件模块的共享需求为共享运行,因此可以将启动后的任一插件模块的运行模式设置为共享模式,以使后续需要使用该任一插件模块的区块链节点在启动时可以将该任一插件模块共享至后续启动的区块链节点。
在所述任一插件模块的运行需求为独立运行的情况下,启动所述任一插件模块。若插件配置信息中任一插件模块的运行需求为独立运行时,说明需要使该任一插件模块以独享模式运行,因此可以直接启动该任一插件模块并将其运行模式设置为独享模式,以使后续需要使用该任一插件模块的区块链节点在启动时无法将该任一插件模块共享至后续启动的区块链节点,从而满足其独享模式的运行模式,确保插件配置信息中该任一插件模块独立运行的运行需求。
在上述情况下,各插件模块的运行需求被定义于所述任一区块链节点对应的插件配置信息中,而不同区块链节点对应的各个插件配置信息可以有所差异,因此对于不同的区块链节点可以分配不同的插件共享策略,这种对于不同的区块链节点的差异化管理能够灵活地满足用户的各类实际需求。在另一种情况下,各插件模块的运行需求为全局预定义信息,因此任一区块链节点对应的插件配置信息中可以无需记录各插件模块的运行需求,插件配置器根据不同的插件描述信息维护有各个插件模块的运行需求,那么在通过上述方式启动插件模块时,使得预设的插件模块总以共享模式运行,当需要启动用于构成任一区块链节点的插件模块时,如果该插件模块的插件描述信息表明该插件模块具有共享需求,则可以直接将对应该插件描述信息的已开启插件模块共享至该任一区块链节点,从而提供统一的共享策略。
具体而言,当节点设备1启动第一主网节点nodeA时,节点设备1可以通过插件管理器查看nodeA的插件配置信息,获取用于构成nodeA的插件模块的插件描述信息包括插件1、插件2、插件3和插件4,此时由于没有其他区块链节点,因此直接将上述插件描述信息对应的插件模块启动得到的插件1.0、插件2.0、插件3.0和插件4.0分配至nodeA从而启动nodeA,而在进一步通过插件配置信息确定插件1、插件3和插件4的运行需求为独立运行且插件2的运行需求为共享运行后,将插件1.0、插件3.0和插件4.0的运行模式设置为独享模式,以及将插件2.0的运行模式设置为共享模式。在nodeA启动完成后,假设节点设备1确定本地部署有nodeA1和nodeA2,且nodeA1所属的subnet1的运行状态为开启状态,而nodeA2所属的subnet2的运行状态为关闭状态,那么此时节点设备就会通过插件管理器查看nodeA1的插件配置信息,获取用于构成nodeA1的插件模块的插件描述信息包括插件1、插件2、插件3、插件4和插件5,此时节点设备1已经运行有相同插件描述信息的插件1.0、插件2.0、插件3.0和插件4.0,则需要进一步查看各插件模块的运行需求,通过nodeA1的插件配置信息可以得知插件1、插件3、插件4和插件5的共享需求均为独立运行,而插件2的共享需求为共享运行,因此根据共享需求直接启动插件1.1、插件3.1、插件4.1和插件5.1并分配至nodeA1,同时,由于插件2描述信息对应的已启动的插件2.0的运行模式为共享模式,因此无需重新启动插件2描述信息对应的新插件,而是将nodeA所使用的插件2.0直接共享至nodeA1,与其他的运行模式被设置为独立模式的插件1.1、插件3.1、插件4.1和插件5.1共同构成nodeA1。
插件管理器中维护有各插件模块之间的依赖关系。假如插件A的正常运行必须要求插件B已经运行,那么可以认为插件A与插件B之间具有依赖关系,并且插件A依赖于插件B,可以表示为“插件A→插件B”。插件管理器中涉及的各插件模块之间的依赖关系可以通过系统预制或用于预先定义,并记录在插件信息属性列表中,如表1所示,根据各插件之间的依赖关系,可以整理得到两条依赖关系:“插件A→插件B→插件D”、“插件C→插件D和插件E”。
插件名 依赖插件 其他
A B
B D
C D、E
D
表1
当第一节点设备根据所述控制信息启动或关闭用于构成任一区块链节点的插件模块时,可以按照构成任一区块链节点的各个插件模块之间的启停顺序,启动或关闭第一子网节点的插件模块;其中,所述启停顺序与各个插件模块之间的依赖关系相关。具体来说,假设构成任一区块链节点的插件模块为插件A、插件B和插件D,其依赖关系为“插件A→插件B→插件D”,那么在关闭用于构成第一子网节点的插件模块的情况下,关闭顺序与依赖顺序相同,也是“插件A→插件B→插件D”,这样通过先关闭有依赖的上层插件模块,后关闭无依赖的底层插件模块;而在启动用于构成第一子网节点的插件模块的情况下,启动顺序将与依赖顺序相反,也即“插件D→插件B→插件A”,这样通过先开启自身无依赖的上层插件模块,后开启有依赖的上层插件模块。在上述方案中,通过按照各个插件模块之间的依赖关系决定启停顺序,可以使在启停过程中不会出现插件模块因缺少依赖插件而运行出错的情况,避免导致数据丢失甚至节点崩溃,同时充分地使用和释放内存资源。
例如,当节点设备1获取区块链节点服务的关闭控制信息,节点设备1可以通过插件管理器,获取subnet1对应的子网节点nodeA1由插件1.1、插件2.0、插件3.1、插件4.1和插件5.1构成,以及相应的依赖关系为“插件1.1→插件3.1→插件2.0”、“插件4.1→插件5.1”,由于需要关闭nodeA1,因此根据前述规则确定得到“插件1.1→插件3.1→插件2.0”、“插件4.1→插件5.1”的关闭顺序,其中,按照“插件1.1→插件3.1→插件2.0”关闭插件1.1、插件3.1和插件2.0,与按照“插件4.1→插件5.1”关闭插件4.1和5.1之间相互独立,节点设备1按照上述关闭顺序关闭相应的插件模块,从而起到无损关闭的效果,当然,当插件2.0为共享插件时,可以将“插件1.1→插件3.1→插件2.0”的关闭顺序替换为“插件1.1→插件3.1”,即不关闭作为共享插件的插件2.0,从而不影响其他子网节点的正常运行。
可选的,第一节点设备维护有本地部署的所述多个子网节点对应的节点启动任务的任务耗时;所述将所述多个子网节点分别对应的节点启动任务分配至所述至少两个节点启动线程中,包括:依次选取当前未分配的各个节点启动任务,并将每次选取的目标子网节点对应的目标节点启动任务分配至所述至少两个节点启动线程中当前总耗时最少的目标节点启动线程,直至所述多个子网节点对应的节点启动任务分配完成,其中,任一节点启动线程的总耗时为所述任一节点启动线程当前包含的节点启动任务的任务耗时之和。
第一节点设备在将本地部署的多个子网节点对应的节点启动任务分配至所述至少两个节点启动线程时,会按照一定的分配策略进行分配。在本说明书实施例中,第一节点设备首先会维护有所述多个子网节点对应的节点启动任务的任务耗时,然后还会在将所述多个子网节点对应的节点启动任务分配至所述至少两个节点启动线程的过程中,动态地维护每一节点启动线程当前的总耗时,其中,所述每一节点启动线程的总耗时为所述每一节点启动线程当前包含的节点启动任务的任务耗时之和,以使第一节点设备每次需要对未分配的某一子网节点对应的节点启动任务进行分配时,会将该节点启动任务分配至当前总耗时最少的节点启动线程。在本说明书实施例中,通过上述方式可以使最终分配完成的所述至少两个节点启动线程的总耗时相差不大,从而实现各节点启动线程的负载均衡,同时提高启动区块链节点服务的整体处理效率,尽可能减少启动区块链节点服务程序的总耗时。
可选的,所述依次选取当前未分配的各个节点启动任务,包括:按照优先级从高至低的顺序依次选取当前未分配的节点启动任务;所述将每次选取的目标子网节点对应的目标节点启动任务分配至所述至少两个节点启动线程中当前总耗时最少的目标节点启动线程,包括:将所述目标节点启动任务添加至所述目标节点启动线程的任务执行序列的末端。
在本说明书实施例中,每个节点启动线程均对应于一个任务执行序列,以用于指示第一节点设备在运行该节点启动线程时,应该按照怎样的顺序执行该节点启动线程中分配的节点启动任务,具体的,对于越处于任务执行序列前端的节点启动任务将被更早执行,而对于越处于任务执行序列末端的节点启动任务则将会被更晚执行。需要指出的是,本说明书实施例中,不同节点启动线程在完成节点启动任务的分配后,将会被第一节点设备所同步运行,这里的同步运行是指在同一时刻同时开始运行。
例如,假设第一节点设备本地部署有四个子网节点node_a、node_b、node_c和node_d,其中优先级从高至低分别为node_d、node_c、node_b和node_a对应的节点启动任务,同时,node_a、node_b、node_c和node_d分别对应的节点启动任务的任务耗时分别为10ms(毫秒)、20ms、30ms和40ms,并且,第一节点设备创建了节点启动线程1和节点启动线程2共两个节点启动线程。那么,第一节点设备将按照优先级从高至低的顺序首先选取出node_d对应的节点启动任务作为目标节点启动任务,然后确定当前总耗时最少的目标节点启动线程,由于当前节点启动线程1和节点启动线程2的总耗时均为0ms,因此可以进行随机分配,例如第一节点设备将node_d对应的节点启动任务分配至被作为目标节点启动线程的节点启动线程1对应的任务执行序列的最前端,同时更新节点启动线程1对应的总耗时为40ms。此时node_d对应的节点启动任务已经被分配完成,因此第一节点设备会继续从当前未分配的节点任务中选取出优先级最高的node_c对应的节点启动任务,同时确定当前总耗时最少的目标节点启动线程为节点启动线程2,那么第一节点设备就会进一步将node_c对应的节点启动任务分配至节点启动线程2对应的任务执行序列的最前端,同时更新节点启动线程2的总耗时为30ms。同理,第一节点设备选取node_b对应的节点启动任务并分配至当前总耗时最少的节点启动线程2对应的任务执行序列的末端,同时更新节点启动线程2的总耗时为30+20=50ms。最后,节点设备选取node_a对应的节点启动任务并分配至当前总耗时最少的节点启动线程1对应的任务执行序列的末端,同时将节点启动线程1的总耗时更新为40+10=50ms。在节点启动任务分配完成后,最终得到的节点启动线程1对应的任务执行序列为“node_d→node_a”,用于在运行时指示第一节点设备先执行node_d对应的节点启动任务,后执行node_a对应的节点启动任务,而最终得到的节点启动线程2对应的任务执行序列为“node_c→node_b”,用于在运行时指示第一节点设备先执行node_c对应的节点启动任务,后执行node_b对应的节点启动任务。
在本说明书实施例中,除了考虑到各节点启动线程的负载均衡外,还对不同子网节点对应的节点启动任务的优先级进行区分,从而在多线程启动子网节点的场景下,使得优先级更高的节点启动任务优先被执行,实现了对不同子网节点的启停顺序的差异化管理。
可选的,所述多个子网节点对应的节点启动任务的优先级维护在第一节点设备或者包含于所述启动控制信息。在本说明书实施例中,第一节点设备可以在本地维护有所述多个子网节点对应的节点启动任务的优先级,例如第一节点设备通过第一主网节点读取到区块链主网部署的子网管理合约中包含的各区块链子网的优先级,然后将本地部署的任一子网节点赋予所述任一子网节点所属区块链子网的优先级;或者,所述多个子网节点对应的节点启动任务的优先级也可以携带在所述启动控制信息中,从而使得第一节点设备上部署的各子网节点的启动顺序由启动控制信息的发起方所控制。
可选的,任一区块链节点对应的节点启动任务的任务耗时由用于构成所述任一区块链节点的插件模块的启动时长所确定。如前所述,第一节点设备启动子网节点的本质在于启动对应子网节点所构成的插件模块,因此第一节点设备所维护的任一区块链节点对应的节点启动任务的任务耗时实际上是由构成所述任一区块链节点的插件模块的启动时长所确定的,具体而言,任一区块链节点对应的节点启动任务的任务耗时可以是构成所述任一区块链节点的各插件模块的启动时长之和。在本说明书实施例中,各插件模块的启动时长可以被维护在插件管理器中。例如,第一节点设备上部署的子网节点node_d由插件1、插件2和插件3构成,那么第一节点设备通过查询插件管理器获知插件1、插件2和插件3分别对应的启动时长为15ms、12ms和13ms,那么第一节点设备就可以确定得到node_d对应的节点启动任务的任务耗时为15+12+13=40ms。即任一区块链节点对应的节点启动任务本质上就是一系列构成所述任一区块链节点的插件模块的子启动任务序列。
可选的,还包括:在用于构成所述目标子网节点的插件模块中包括运行需求为共享运行的第一插件模块、且当前已分配的节点启动任务中已分配有第一插件模块对应的插件启动子任务的情况下,基于除第一插件模块之外的用于构成所述目标子网节点的插件模块的启动时长确定所述目标节点启动任务的任务耗时。
如前所述,由于第一节点设备上不同区块链节点可能会共享运行同一个插件模块(称为共享插件),在这种情况下,最先启动的插件配置信息中包含该共享插件的区块链节点在启动过程中需要启动该共享插件,而后启动的插件配置信息中包含该共享插件的区块链节点在启动过程中则无需重复启动该共享插件。在本说明实施例中,对于一个节点启动线程而言,先分配的节点启动任务会被先执行,而后分配的节点启动任务会被后执行。因此,在对插件配置信息中包含共享插件的目标子网节点对应的目标节点启动任务进行分配的过程中,如果当前已分配的节点启动任务中已分配有该共享插件对应的插件启动子任务,那么就不需要考虑当前分配的所述目标节点启动任务中包含的该共享插件的启动子任务的启动时长,即,将除该共享插件之外的用于构成该目标子网节点的插件模块的启动时长之和确定为所述目标节点启动任务的任务耗时。通过本说明书实施例,可以使已分配的共享插件不再被作为考虑进后续所需分配的节点分配任务的任务耗时,从而更加精确地对节点启动任务进行分配,确保节点启动线程实际运行过程与预先分配的过程相一致。
在一实施例中,在用于构成所述目标子网节点的插件模块中包括运行需求为共享运行的第一插件模块、且用于构成第一主网节点的插件模块中包括第一插件模块的情况下,基于除第一插件模块之外的用于构成所述目标子网节点的插件模块的启动时长确定所述目标节点启动任务的任务耗时。在本说明书实施例中,如果第一主网节点包含第一插件模块,则意味着后续子网节点在启动过程中都不需要启动第一插件模块,因此需要在分配节点启动任务时将第一插件模块对应的启动时长考虑在外。
可选的,所述当前已分配的节点启动任务中已分配有第一插件模块对应的插件启动子任务,包括:所述当前已分配的节点启动任务中已分配的第一插件模块对应的插件启动子任务在其所处节点启动线程中的第一完成时刻不大于所述目标节点启动任务中描述的第一插件模块对应的插件启动子任务在所述目标节点启动线程中的第一开始时刻。
在本说明书实施例中,由于所述至少两个节点启动线程在节点启动任务分配完成是从同一时刻开始同步运行的,因此不同节点启动线程在时间计量上是统一的。例如,在第一插件模块对应的插件启动子任务在其所处节点启动线程中的第一完成时刻为50ms,就是指第一插件模块对应的插件启动子任务在刚执行完毕时相对于其所处节点启动线程刚开始执行时之间间隔的时间为50ms,而所述目标节点启动任务中描述的第一插件模块对应的插件启动子任务在所述目标节点启动线程中的第一开始时刻为60ms,则是指如果将包含第一插件模块对应的插件启动子任务的目标节点启动任务分配到目标节点启动线程后,其中的第一插件模块对应的插件启动子任务在刚开始执行时相对于目标节点启动线程刚开始执行时之间间隔的时间为60ms。如果第一完成时刻不大于第一开始时刻,则意味着在目标节点启动任务需要执行到第一插件模块对应的插件启动子任务时,第一插件模块对应的插件启动子任务已经启动完毕了,因此此时就不需要考虑目标节点启动任务中包含的第一插件模块对应的插件启动子任务的启动时间了,同时第一插件模块对应的插件启动子任务也依然被分配在之前分配的节点启动任务中,而不会被包含在目标节点启动任务中,即最终分配至目标节点启动线程的目标节点启动任务中不会包含第一插件模块对应的插件启动子任务。
可选的,还包括:在用于构成所述目标子网节点对应的插件模块中包括运行需求为共享运行的第二插件模块、且当前已分配的节点启动任务中已分配有第二插件模块对应的插件启动子任务的情况下,确定所述当前已分配的节点启动任务中已分配的第二插件模块对应的插件启动子任务在其所处节点启动线程中的第二开始时刻,以及所述目标节点启动任务中描述的第二插件模块对应的插件启动子任务在所述目标节点启动线程中的第三开始时刻;在第三开始时刻小于第二开始时刻的情况下,将第二插件模块对应的插件启动子任务从所述当前已分配的节点启动任务转移分配至所述目标节点启动任务,以更新所述当前已分配的节点启动任务的任务耗时。
在本说明书实施例中,上述第二插件模块为共享插件。如果在分配包含有共享插件的插件启动子任务的节点启动任务时,当前已分配有该共享插件对应的插件启动子任务,那么第一节点设备则会检测已分配的该共享插件对应的插件启动子任务在其被分配至的节点启动线程中的第二开始时刻,以及如果将包含有该共享插件对应的插件启动子任务的目标节点启动任务分配至目标节点启动线程中,该共享插件对应的插件启动子任务目标节点启动线程中的第三开始时刻。如果第三开始时刻小于第二开始时刻,则说明后分配的目标节点启动任务在需要执行该共享插件对应的插件启动子任务时,之前分配的节点启动任务中对应的已分配的该共享插件对应的插件启动任务还没有开始执行,此时为了最大限度地节省全局等待时长,增加启动区块链节点服务的执行效率,可以将该共享模块对应的插件启动子任务从原先分配的节点启动任务中转移至所述目标节点启动任务,即最终分配至目标节点启动线程的目标节点启动任务中会包含该共享插件对应的插件启动子任务,同时,由于之前已分配的节点启动任务中包含的原本分配在其中的该共享插件对应的插件启动子任务被转移分配,因此需要对该已分配的节点启动任务的任务耗时进行更新,将其任务耗时减去原先确定的该已分配的节点启动任务的任务耗时减去该共享插件对应的插件启动子任务的启动时长。
图3是一示例性实施例提供的一种关闭区块链节点服务的方法的流程图。如图3所示,该方法应用于第一节点设备,包括:
S302:获取区块链节点服务的关闭控制信息;
S304:在确定本地部署有所述区块链主网管理的区块链子网中的多个子网节点的情况下,响应于所述关闭控制信息创建至少两个节点关闭线程;
S306:将所述多个子网节点分别对应的节点关闭任务分配至所述至少两个节点关闭线程中,以基于所述至少两个节点关闭线程并行关闭所述多个子网节点。
可选的,所述关闭控制信息中包含第一节点设备对应的身份信息。
可选的,所述关闭所述子网节点,包括:
在所述区块链子网的运行状态为开启状态的情况下,关闭所述子网节点。
可选的,还包括:
第一节点设备通过查询自身维护的本地子网列表,确定本地是否部署有所述区块链子网中的子网节点,以及所述区块链子网的运行状态;
其中,所述本地子网列表用于记录第一节点设备本地部署的各子网节点所属区块链子网的子网标识和运行状态。
可选的,所述本地子网列表由第一节点设备通过查询第一主网节点上部署的子网管理合约而生成。
可选的,还包括:
在确定第二节点设备部署有所述区块链子网中的子网节点且未部署所述区块链主网中的主网节点的情况下,向第二节点设备提供所述关闭控制信息,以指示所述第二节点设备关闭第二节点设备本地部署的所述区块链子网中的子网节点。
可选的,第一节点设备关闭任一区块链节点,包括:
关闭用于构成所述任一区块链节点的插件模块。
可选的,所述关闭用于构成所述任一区块链节点的插件模块,包括:通过所述任一区块链节点对应的插件管理器关闭用于构成所述任一区块链节点的插件模块。
可选的,
所述插件管理器为第一节点设备上部署的所有区块链节点对应的全局插件管理器;或者,
所述插件管理器为单独应用于所述任一区块链节点的独立插件管理器。
可选的,所述关闭用于构成所述任一区块链节点的插件模块,包括:
确定用于构成所述任一区块链节点的各插件模块的插件描述信息;
若匹配于所述任一插件模块的插件描述信息的已开启插件模块的运行模式为独立模式、或运行模式为共享模式但未被共享至所述任一区块链节点以外的其他区块链节点,则关闭所述已开启插件模块。如前所述,如果某一插件模块的运行模式为共享模式但未被共享至所述任一区块链节点以外的其他区块链节点,则说明该插件模块虽然运行模式为共享模式但并未处于共享状态,因此在关闭该插件时可以不用考虑对其他区块链节点的干扰从而直接关闭该插件模块,因为此时该插件模块并未被其他区块链节点所依赖,因此可以将其看做是一个独立模式运行的插件模块。
可选的,所述任一插件模块的运行模式由所述任一插件模块的运行需求所确定。
可选的,所述任一插件模块的运行需求被定义于所述任一区块链节点对应的插件配置信息中。
可选的,所述任一插件模块的运行需求为全局预定义信息。
可选的,所述关闭用于构成所述任一区块链节点的插件模块,包括:根据用于构成所述任一区块链节点的各插件模块之间的依赖关系,依次关闭用于构成所述任一区块链节点的各插件模块。
可选的,第一节点设备维护有本地部署的所述多个子网节点对应的节点关闭任务的任务耗时;所述将所述多个子网节点分别对应的节点关闭任务分配至所述至少两个节点关闭线程中,包括:
依次选取当前未分配的各个节点关闭任务,并将每次选取的目标子网节点对应的目标节点关闭任务分配至所述至少两个节点关闭线程中当前总耗时最少的目标节点关闭线程,直至所述多个子网节点对应的节点关闭任务分配完成,其中,任一节点关闭线程的总耗时为所述任一节点关闭线程当前包含的节点关闭任务的任务耗时之和。
可选的,所述依次选取当前未分配的各个节点关闭任务,包括:按照优先级从高至低的顺序依次选取当前未分配的节点关闭任务;
所述将每次选取的目标子网节点对应的目标节点关闭任务分配至所述至少两个节点关闭线程中当前总耗时最少的目标节点关闭线程,包括:将所述目标节点关闭任务添加至所述目标节点关闭线程的任务执行序列的末端。
需要指出的是,本说明书实施例中,不同节点关闭线程在完成节点关闭任务的分配后,将会被第一节点设备所同步运行,这里的同步运行是指在同一时刻同时开始运行。
可选的,所述多个子网节点的节点关闭任务的优先级维护在第一节点设备或者包含于所述关闭控制信息。
可选的,任一区块链节点对应的节点关闭任务的任务耗时由用于构成所述任一区块链节点的插件模块的关闭时长所确定。
可选的,还包括:
在用于构成所述目标子网节点的插件模块中包括运行需求为共享运行的第一插件模块、且除所述目标节点关闭任务之外的当前未分配的节点关闭任务中描述有第一插件模块对应的插件关闭子任务的情况下,基于除第一插件模块之外的用于构成所述目标子网节点的插件模块的关闭时长确定所述目标节点关闭任务的任务耗时。
在本说明书实施例中,第一插件模块为共享插件。在关闭区块链节点的共享插件时,需要确保当前所需关闭的共享插件没有被共享至当前所需关闭的区块链节点以外的其他区块链节点,因此在分配共享插件对应的插件关闭子任务时,需要确保未分配的节点关闭任务中没有描述该共享插件的插件关闭子任务。反之,如果在分配包含第一插件模块的目标节点关闭任务时,发现未分配的节点关闭任务中描述有第一插件模块对应的插件关闭子任务,则说明目标节点关闭任务对应的子网节点并非最后一个需要共享第一插件模块的子网节点,因此为了确保节点关闭的合法性,防止非法关闭导致节点数据丢失,需要确保当前分配的目标节点关闭任务中不包含第一插件模块对应的插件关闭子任务,而是将第一插件模块对应的插件关闭子任务放在最后一个需要共享第一插件模块的子网节点对应的某个未分配的节点关闭任务中执行。由于目标节点关闭任务不包含第一插件模块对应的插件关闭子任务,因此,所述目标节点关闭任务的任务耗时被确定为除第一插件模块之外的用于构成所述目标子网节点的插件模块的关闭时长之和。
可选的,还包括:
在用于构成所述目标子网节点的插件模块中包括运行需求为共享运行的第一插件模块、且当前已分配的节点关闭任务中已分配有第一插件模块对应的插件关闭子任务的情况下,基于除第一插件模块之外的用于构成所述目标子网节点的插件模块的关闭时长确定所述目标节点关闭任务的任务耗时;
或者,在用于构成所述目标子网节点的插件模块中包括运行需求为共享运行的第一插件模块、且用于构成本地部署的区块链主网中处于运行状态的第一主网节点的插件模块包括第一插件模块的情况下,基于除第一插件模块之外的用于构成所述目标子网节点的插件模块的关闭时长确定所述目标节点关闭任务的任务耗时。
可选的,所述当前已分配的节点关闭任务中已分配有第一插件模块对应的插件关闭子任务,包括:
所述当前已分配的节点关闭任务中已分配的第一插件模块对应的插件关闭子任务在其所处节点关闭线程中的第一开始时刻不小于所述目标节点关闭任务中描述的第一插件模块对应的插件关闭子任务在所述目标节点关闭线程中的第一完成时刻。
在本说明书实施例中,如果第一开始时刻不小于第一完成时刻,则说明假如在目标节点关闭任务需要执行到第一插件模块对应的插件关闭子任务且执行完毕时,第一插件模块对应的插件关闭子任务还没有开始执行,此时才能够不需要考虑目标节点关闭任务中包含的第一插件模块对应的插件关闭子任务的关闭时间了,因为除了目标节点关闭任务,当前已分配的其他节点关闭任务中就已经能够实现对第一插件模块的关闭,并且在第一插件模块的关闭过程中,目标节点关闭任务中描述的针对第一插件模块的关闭过程已经完全完成,因此目标节点关闭任务不需要进行额外的有关第一插件模块的关闭过程的等待。同时第一插件模块对应的插件关闭子任务也依然被分配在之前分配的节点关闭任务中,而不会被包含在目标节点关闭任务中,即最终分配至目标节点关闭线程的目标节点关闭任务中不会包含第一插件模块对应的插件关闭子任务。
可选的,还包括:
在用于构成所述目标子网节点的插件模块中包括运行需求为共享运行的第二插件模块、且当前已分配的节点关闭任务中分配有第二插件模块对应的插件关闭子任务的情况下,确定所述当前已分配的节点关闭任务中已分配的第二插件模块对应的插件关闭子任务在其所处节点关闭线程中的第二开始时刻,以及所述目标节点关闭任务中描述的第二插件模块对应的插件关闭子任务在所述目标节点关闭线程中的第三开始时刻;
在第三开始时刻大于第二开始时刻的情况下,将第二插件模块对应的插件关闭子任务从所述当前已分配的节点关闭任务转移分配至所述当前已分配的节点关闭任务,以更新所述当前已分配的节点关闭任务的任务耗时。
在本说明书实施例中,上述第二插件模块为共享插件。如果在分配包含有共享插件的插件关闭子任务的节点关闭任务时,当前已分配有该共享插件对应的插件关闭子任务,那么第一节点设备则会检测已分配的该共享插件对应的插件关闭子任务在其被分配至的节点关闭线程中的第二开始时刻,以及如果将包含有该共享插件对应的插件关闭子任务的目标节点关闭任务分配至目标节点关闭线程中,该共享插件对应的插件关闭子任务目标节点关闭线程中的第三开始时刻。如果第三开始时刻大于第二开始时刻,则说明后分配的目标节点关闭任务在还没有需要执行该共享插件对应的插件关闭子任务时,之前分配的节点关闭任务中对应的已分配的该共享插件对应的插件关闭任务就已经开始执行,此时为了确保目标节点关闭任务中有关该共享插件的正确关闭时间,防止提前关闭共享插件导致数据丢失,可以将该共享模块对应的插件关闭子任务从原先分配的节点关闭任务中转移至所述目标节点关闭任务,即最终分配至目标节点关闭线程的目标节点关闭任务中会包含该共享插件对应的插件关闭子任务,同时,由于之前已分配的节点关闭任务中包含的原本分配在其中的该共享插件对应的插件关闭子任务被转移分配,因此需要对该已分配的节点关闭任务的任务耗时进行更新,将其任务耗时减去原先确定的该已分配的节点关闭任务的任务耗时减去该共享插件对应的插件关闭子任务的关闭时长。
可选的,还包括:
在所述多个子网节点关闭完成的情况下,响应于所述关闭控制信息而关闭本地部署的区块链主网中的第一主网节点。在本说明书实施例中,第一节点设备可以通过创建专用于关闭第一主网节点的节点关闭线程,然后运行该节点关闭线程从而关闭第一主网节点。
图4是一示例性实施例提供的一种设备的示意结构图。请参考图4,在硬件层面,该设备包括处理器402、内部总线404、网络接口406、内存408以及非易失性存储器410,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器402从非易失性存储器410中读取对应的计算机程序到内存408中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
如图5所示,图5是一示例性实施例提供的一种启动区块链节点服务的装置的框图。该装置可以应用于如图4所示的设备中,以实现本说明书的技术方案;该装置应用于第一节点设备,包括:
启动控制信息获取模块501,用于获取区块链节点服务的启动控制信息;
启动线程创建模块502,用于在确定本地部署的区块链主网中的第一主网节点启动完成且本地部署有所述区块链主网管理的区块链子网中的多个子网节点的情况下,响应于所述启动控制信息创建至少两个节点启动线程;
子网节点启动模块503,用于将所述多个子网节点分别对应的节点启动任务分配至所述至少两个节点启动线程中,以基于所述至少两个节点启动线程并行启动所述多个子网节点。
可选的,第一节点设备维护有本地部署的所述多个子网节点对应的节点启动任务的任务耗时;所述子网节点启动模块503具体用于:
依次选取当前未分配的各个节点启动任务,并将每次选取的目标子网节点对应的目标节点启动任务分配至所述至少两个节点启动线程中当前总耗时最少的目标节点启动线程,直至所述多个子网节点对应的节点启动任务分配完成,其中,任一节点启动线程的总耗时为所述任一节点启动线程当前包含的节点启动任务的任务耗时之和。
可选的,所述子网节点启动模块503具体用于:按照优先级从高至低的顺序依次选取当前未分配的节点启动任务;
将所述目标节点启动任务添加至所述目标节点启动线程的任务执行序列的末端。
可选的,所述多个子网节点对应的节点启动任务的优先级维护在第一节点设备或者包含于所述启动控制信息。
可选的,任一区块链节点对应的节点启动任务的任务耗时由用于构成所述任一区块链节点的插件模块的启动时长所确定。
可选的,还包括:
启动任务耗时确定模块504,用于在用于构成所述目标子网节点的插件模块中包括运行需求为共享运行的第一插件模块、且当前已分配的节点启动任务中已分配有第一插件模块对应的插件启动子任务的情况下,基于除第一插件模块之外的用于构成所述目标子网节点的插件模块的启动时长确定所述目标节点启动任务的任务耗时。
可选的,所述当前已分配的节点启动任务中已分配有第一插件模块对应的插件启动子任务,包括:
所述当前已分配的节点启动任务中已分配的第一插件模块对应的插件启动子任务在其所处节点启动线程中的第一完成时刻不大于所述目标节点启动任务中描述的第一插件模块对应的插件启动子任务在所述目标节点启动线程中的第一开始时刻。
可选的,还包括:
第一开始时刻确定模块505,用于在用于构成所述目标子网节点对应的插件模块中包括运行需求为共享运行的第二插件模块、且当前已分配的节点启动任务中已分配有第二插件模块对应的插件启动子任务的情况下,确定所述当前已分配的节点启动任务中已分配的第二插件模块对应的插件启动子任务在其所处节点启动线程中的第二开始时刻,以及所述目标节点启动任务中描述的第二插件模块对应的插件启动子任务在所述目标节点启动线程中的第三开始时刻;
启动任务转移模块506,用于在第三开始时刻小于第二开始时刻的情况下,将第二插件模块对应的插件启动子任务从所述当前已分配的节点启动任务转移分配至所述目标节点启动任务,以更新所述当前已分配的节点启动任务的任务耗时。
可选的,第一节点设备启动任一区块链节点,包括:
启动用于构成所述任一区块链节点的插件模块。
可选的,所述启动用于构成所述任一区块链节点的插件模块,包括:通过所述任一区块链节点对应的插件管理器启动用于构成所述任一区块链节点的插件模块。
可选的,所述启动用于构成所述任一区块链节点的插件模块,包括:
确定用于构成所述任一区块链节点的各插件模块的插件描述信息,以及各插件模块的运行需求;
在任一插件模块的运行需求为共享运行的情况下,若存在匹配于所述任一插件模块的插件描述信息的已开启插件模块,且所述已开启插件模块的运行模式为共享模式,则将所述已开启插件模块共享至所述任一区块链节点;
在所述任一插件模块的运行需求为共享运行的情况下,若不存在匹配于所述插件描述信息且运行模式为共享模式的已开启插件模块,则启动所述任一插件模块;
在所述任一插件模块的运行需求为独立运行的情况下,启动所述任一插件模块。
可选的,还包括:
运行模式设置模块507,用于在启动所述插件描述信息对应的插件模块时,基于所述运行需求设置所启动的插件模块的运行模式。
可选的,所述启动用于构成所述任一区块链节点的插件模块,包括:根据用于构成所述任一区块链节点的各插件模块之间的依赖关系,依次启动用于构成所述任一区块链节点的各插件模块。
如图6所示,图6是一示例性实施例提供的一种关闭区块链节点服务的装置的框图。该装置可以应用于如图4所示的设备中,以实现本说明书的技术方案;该应用于第一节点设备,包括:
关闭控制信息获取模块601,用于获取区块链节点服务的关闭控制信息;
关闭线程创建模块602,用于在确定本地部署有所述区块链主网管理的区块链子网中的多个子网节点的情况下,响应于所述关闭控制信息创建至少两个节点关闭线程;
子网节点关闭模块603,用于将所述多个子网节点分别对应的节点关闭任务分配至所述至少两个节点关闭线程中,以基于所述至少两个节点关闭线程并行关闭所述多个子网节点。
可选的,第一节点设备维护有本地部署的所述多个子网节点对应的节点关闭任务的任务耗时;所述子网节点关闭模块603具体用于:
依次选取当前未分配的各个节点关闭任务,并将每次选取的目标子网节点对应的目标节点关闭任务分配至所述至少两个节点关闭线程中当前总耗时最少的目标节点关闭线程,直至所述多个子网节点对应的节点关闭任务分配完成,其中,任一节点关闭线程的总耗时为所述任一节点关闭线程当前包含的节点关闭任务的任务耗时之和。
可选的,所述子网节点启动模块503具体用于:按照优先级从高至低的顺序依次选取当前未分配的节点关闭任务;
将所述目标节点关闭任务添加至所述目标节点关闭线程的任务执行序列的末端。
可选的,所述多个子网节点的节点关闭任务的优先级维护在第一节点设备或者包含于所述关闭控制信息。
可选的,任一区块链节点对应的节点关闭任务的任务耗时由用于构成所述任一区块链节点的插件模块的关闭时长所确定。
可选的,还包括:
第一关闭任务耗时确定模块604,用于在用于构成所述目标子网节点的插件模块中包括运行需求为共享运行的第一插件模块、且除所述目标节点关闭任务之外的当前未分配的节点关闭任务中描述有第一插件模块对应的插件关闭子任务的情况下,基于除第一插件模块之外的用于构成所述目标子网节点的插件模块的关闭时长确定所述目标节点关闭任务的任务耗时。
可选的,还包括:
第二关闭任务耗时确定模块605,在用于构成所述目标子网节点的插件模块中包括运行需求为共享运行的第一插件模块、且当前已分配的节点关闭任务中已分配有第一插件模块对应的插件关闭子任务的情况下,基于除第一插件模块之外的用于构成所述目标子网节点的插件模块的关闭时长确定所述目标节点关闭任务的任务耗时。
可选的,所述当前已分配的节点关闭任务中已分配有第一插件模块对应的插件关闭子任务,包括:
所述当前已分配的节点关闭任务中已分配的第一插件模块对应的插件关闭子任务在其所处节点关闭线程中的第一开始时刻不小于所述目标节点关闭任务中描述的第一插件模块对应的插件关闭子任务在所述目标节点关闭线程中的第一完成时刻。
可选的,还包括:
第二开始时刻确定模块606,用于在用于构成所述目标子网节点的插件模块中包括运行需求为共享运行的第二插件模块、且当前已分配的节点关闭任务中分配有第二插件模块对应的插件关闭子任务的情况下,确定所述当前已分配的节点关闭任务中已分配的第二插件模块对应的插件关闭子任务在其所处节点关闭线程中的第二开始时刻,以及所述目标节点关闭任务中描述的第二插件模块对应的插件关闭子任务在所述目标节点关闭线程中的第三开始时刻;
关闭任务转移模块607,用于在第三开始时刻大于第二开始时刻的情况下,将第二插件模块对应的插件关闭子任务从所述当前已分配的节点关闭任务转移分配至所述当前已分配的节点关闭任务,以更新所述当前已分配的节点关闭任务的任务耗时。
可选的,第一节点设备关闭任一区块链节点,包括:
关闭用于构成所述任一区块链节点的插件模块。
可选的,所述关闭用于构成所述任一区块链节点的插件模块,包括:通过所述任一区块链节点对应的插件管理器关闭用于构成所述任一区块链节点的插件模块。
可选的,所述关闭用于构成所述任一区块链节点的插件模块,包括:
确定用于构成所述任一区块链节点的各插件模块的插件描述信息;
若匹配于所述任一插件模块的插件描述信息的已开启插件模块的运行模式为独立模式、或运行模式为共享模式但未被共享至所述任一区块链节点以外的其他区块链节点,则关闭所述已开启插件模块。
可选的,所述任一插件模块的运行模式由所述任一插件模块的运行需求所确定。
可选的,所述关闭用于构成所述任一区块链节点的插件模块,包括:根据用于构成所述任一区块链节点的各插件模块之间的依赖关系,依次关闭用于构成所述任一区块链节点的各插件模块。
可选的,还包括:
主网节点关闭模块608,用于在所述多个子网节点关闭完成的情况下,响应于所述关闭控制信息而关闭本地部署的区块链主网中的第一主网节点。
在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 (32)

1.一种启动区块链节点服务的方法,应用于第一节点设备,包括:
获取区块链节点服务的启动控制信息;
在确定本地部署的区块链主网中的第一主网节点启动完成且本地部署有所述区块链主网管理的区块链子网中的多个子网节点的情况下,响应于所述启动控制信息创建至少两个节点启动线程;
将所述多个子网节点分别对应的节点启动任务分配至所述至少两个节点启动线程中,以基于所述至少两个节点启动线程并行启动所述多个子网节点。
2.根据权利要求1所述的方法,第一节点设备维护有本地部署的所述多个子网节点对应的节点启动任务的任务耗时;所述将所述多个子网节点分别对应的节点启动任务分配至所述至少两个节点启动线程中,包括:
依次选取当前未分配的各个节点启动任务,并将每次选取的目标子网节点对应的目标节点启动任务分配至所述至少两个节点启动线程中当前总耗时最少的目标节点启动线程,直至所述多个子网节点对应的节点启动任务分配完成,其中,任一节点启动线程的总耗时为所述任一节点启动线程当前包含的节点启动任务的任务耗时之和。
3.根据权利要求2所述的方法,所述依次选取当前未分配的各个节点启动任务,包括:按照优先级从高至低的顺序依次选取当前未分配的节点启动任务;
所述将每次选取的目标子网节点对应的目标节点启动任务分配至所述至少两个节点启动线程中当前总耗时最少的目标节点启动线程,包括:将所述目标节点启动任务添加至所述目标节点启动线程的任务执行序列的末端。
4.根据权利要求3所述的方法,所述多个子网节点对应的节点启动任务的优先级维护在第一节点设备或者包含于所述启动控制信息。
5.根据权利要求2所述的方法,任一区块链节点对应的节点启动任务的任务耗时由用于构成所述任一区块链节点的插件模块的启动时长所确定。
6.根据权利要求2所述的方法,还包括:
在用于构成所述目标子网节点的插件模块中包括运行需求为共享运行的第一插件模块、且当前已分配的节点启动任务中已分配有第一插件模块对应的插件启动子任务的情况下,基于除第一插件模块之外的用于构成所述目标子网节点的插件模块的启动时长确定所述目标节点启动任务的任务耗时。
7.根据权利要求6所述的方法,所述当前已分配的节点启动任务中已分配有第一插件模块对应的插件启动子任务,包括:
所述当前已分配的节点启动任务中已分配的第一插件模块对应的插件启动子任务在其所处节点启动线程中的第一完成时刻不大于所述目标节点启动任务中描述的第一插件模块对应的插件启动子任务在所述目标节点启动线程中的第一开始时刻。
8.根据权利要求2所述的方法,还包括:
在用于构成所述目标子网节点对应的插件模块中包括运行需求为共享运行的第二插件模块、且当前已分配的节点启动任务中已分配有第二插件模块对应的插件启动子任务的情况下,确定所述当前已分配的节点启动任务中已分配的第二插件模块对应的插件启动子任务在其所处节点启动线程中的第二开始时刻,以及所述目标节点启动任务中描述的第二插件模块对应的插件启动子任务在所述目标节点启动线程中的第三开始时刻;
在第三开始时刻小于第二开始时刻的情况下,将第二插件模块对应的插件启动子任务从所述当前已分配的节点启动任务转移分配至所述目标节点启动任务,以更新所述当前已分配的节点启动任务的任务耗时。
9.根据权利要求1所述的方法,第一节点设备启动任一区块链节点,包括:
启动用于构成所述任一区块链节点的插件模块。
10.根据权利要求9所述的方法,所述启动用于构成所述任一区块链节点的插件模块,包括:通过所述任一区块链节点对应的插件管理器启动用于构成所述任一区块链节点的插件模块。
11.根据权利要求9所述的方法,所述启动用于构成所述任一区块链节点的插件模块,包括:
确定用于构成所述任一区块链节点的各插件模块的插件描述信息,以及各插件模块的运行需求;
在任一插件模块的运行需求为共享运行的情况下,若存在匹配于所述任一插件模块的插件描述信息的已开启插件模块,且所述已开启插件模块的运行模式为共享模式,则将所述已开启插件模块共享至所述任一区块链节点;
在所述任一插件模块的运行需求为共享运行的情况下,若不存在匹配于所述插件描述信息且运行模式为共享模式的已开启插件模块,则启动所述任一插件模块;
在所述任一插件模块的运行需求为独立运行的情况下,启动所述任一插件模块。
12.根据权利要求11所述的方法,还包括:在启动所述插件描述信息对应的插件模块时,基于所述运行需求设置所启动的插件模块的运行模式。
13.根据权利要求9所述的方法,所述启动用于构成所述任一区块链节点的插件模块,包括:根据用于构成所述任一区块链节点的各插件模块之间的依赖关系,依次启动用于构成所述任一区块链节点的各插件模块。
14.一种关闭区块链节点服务的方法,应用于第一节点设备,包括:
获取区块链节点服务的关闭控制信息;
在确定本地部署有所述区块链主网管理的区块链子网中的多个子网节点的情况下,响应于所述关闭控制信息创建至少两个节点关闭线程;
将所述多个子网节点分别对应的节点关闭任务分配至所述至少两个节点关闭线程中,以基于所述至少两个节点关闭线程并行关闭所述多个子网节点。
15.根据权利要求14所述的方法,第一节点设备维护有本地部署的所述多个子网节点对应的节点关闭任务的任务耗时;所述将所述多个子网节点分别对应的节点关闭任务分配至所述至少两个节点关闭线程中,包括:
依次选取当前未分配的各个节点关闭任务,并将每次选取的目标子网节点对应的目标节点关闭任务分配至所述至少两个节点关闭线程中当前总耗时最少的目标节点关闭线程,直至所述多个子网节点对应的节点关闭任务分配完成,其中,任一节点关闭线程的总耗时为所述任一节点关闭线程当前包含的节点关闭任务的任务耗时之和。
16.根据权利要求15所述的方法,所述依次选取当前未分配的各个节点关闭任务,包括:按照优先级从高至低的顺序依次选取当前未分配的节点关闭任务;
所述将每次选取的目标子网节点对应的目标节点关闭任务分配至所述至少两个节点关闭线程中当前总耗时最少的目标节点关闭线程,包括:将所述目标节点关闭任务添加至所述目标节点关闭线程的任务执行序列的末端。
17.根据权利要求16所述的方法,所述多个子网节点的节点关闭任务的优先级维护在第一节点设备或者包含于所述关闭控制信息。
18.根据权利要求15所述的方法,任一区块链节点对应的节点关闭任务的任务耗时由用于构成所述任一区块链节点的插件模块的关闭时长所确定。
19.根据权利要求15所述的方法,还包括:
在用于构成所述目标子网节点的插件模块中包括运行需求为共享运行的第一插件模块、且除所述目标节点关闭任务之外的当前未分配的节点关闭任务中描述有第一插件模块对应的插件关闭子任务的情况下,基于除第一插件模块之外的用于构成所述目标子网节点的插件模块的关闭时长确定所述目标节点关闭任务的任务耗时。
20.根据权利要求15所述的方法,还包括:
在用于构成所述目标子网节点的插件模块中包括运行需求为共享运行的第一插件模块、且当前已分配的节点关闭任务中已分配有第一插件模块对应的插件关闭子任务的情况下,基于除第一插件模块之外的用于构成所述目标子网节点的插件模块的关闭时长确定所述目标节点关闭任务的任务耗时。
21.根据权利要求20所述的方法,所述当前已分配的节点关闭任务中已分配有第一插件模块对应的插件关闭子任务,包括:
所述当前已分配的节点关闭任务中已分配的第一插件模块对应的插件关闭子任务在其所处节点关闭线程中的第一开始时刻不小于所述目标节点关闭任务中描述的第一插件模块对应的插件关闭子任务在所述目标节点关闭线程中的第一完成时刻。
22.根据权利要求15所述的方法,还包括:
在用于构成所述目标子网节点的插件模块中包括运行需求为共享运行的第二插件模块、且当前已分配的节点关闭任务中分配有第二插件模块对应的插件关闭子任务的情况下,确定所述当前已分配的节点关闭任务中已分配的第二插件模块对应的插件关闭子任务在其所处节点关闭线程中的第二开始时刻,以及所述目标节点关闭任务中描述的第二插件模块对应的插件关闭子任务在所述目标节点关闭线程中的第三开始时刻;
在第三开始时刻大于第二开始时刻的情况下,将第二插件模块对应的插件关闭子任务从所述当前已分配的节点关闭任务转移分配至所述当前已分配的节点关闭任务,以更新所述当前已分配的节点关闭任务的任务耗时。
23.根据权利要求14所述的方法,第一节点设备关闭任一区块链节点,包括:
关闭用于构成所述任一区块链节点的插件模块。
24.根据权利要求23所述的方法,所述关闭用于构成所述任一区块链节点的插件模块,包括:通过所述任一区块链节点对应的插件管理器关闭用于构成所述任一区块链节点的插件模块。
25.根据权利要求23所述的方法,所述关闭用于构成所述任一区块链节点的插件模块,包括:
确定用于构成所述任一区块链节点的各插件模块的插件描述信息;
若匹配于所述任一插件模块的插件描述信息的已开启插件模块的运行模式为独立模式、或运行模式为共享模式但未被共享至所述任一区块链节点以外的其他区块链节点,则关闭所述已开启插件模块。
26.根据权利要求25所述的方法,所述任一插件模块的运行模式由所述任一插件模块的运行需求所确定。
27.根据权利要求23所述的方法,所述关闭用于构成所述任一区块链节点的插件模块,包括:根据用于构成所述任一区块链节点的各插件模块之间的依赖关系,依次关闭用于构成所述任一区块链节点的各插件模块。
28.根据权利要求14所述的方法,还包括:
在所述多个子网节点关闭完成的情况下,响应于所述关闭控制信息而关闭本地部署的区块链主网中的第一主网节点。
29.一种启动区块链节点服务的装置,应用于第一节点设备,包括:
启动控制信息获取模块,用于获取区块链节点服务的启动控制信息;
启动线程创建模块,用于在确定本地部署的区块链主网中的第一主网节点启动完成且本地部署有所述区块链主网管理的区块链子网中的多个子网节点的情况下,响应于所述启动控制信息创建至少两个节点启动线程;
子网节点启动模块,用于将所述多个子网节点分别对应的节点启动任务分配至所述至少两个节点启动线程中,以基于所述至少两个节点启动线程并行启动所述多个子网节点。
30.一种关闭区块链节点服务的装置,应用于第一节点设备,包括:
关闭控制信息获取模块,用于获取区块链节点服务的关闭控制信息;
关闭线程创建模块,用于在确定本地部署有所述区块链主网管理的区块链子网中的多个子网节点的情况下,响应于所述关闭控制信息创建至少两个节点关闭线程;
子网节点关闭模块,用于将所述多个子网节点分别对应的节点关闭任务分配至所述至少两个节点关闭线程中,以基于所述至少两个节点关闭线程并行关闭所述多个子网节点。
31.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-28中任一项所述的方法。
32.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1-28中任一项所述方法的步骤。
CN202111669762.7A 2021-12-31 2021-12-31 一种启动/关闭区块链节点服务的方法和装置 Pending CN114363336A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111669762.7A CN114363336A (zh) 2021-12-31 2021-12-31 一种启动/关闭区块链节点服务的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111669762.7A CN114363336A (zh) 2021-12-31 2021-12-31 一种启动/关闭区块链节点服务的方法和装置

Publications (1)

Publication Number Publication Date
CN114363336A true CN114363336A (zh) 2022-04-15

Family

ID=81104819

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111669762.7A Pending CN114363336A (zh) 2021-12-31 2021-12-31 一种启动/关闭区块链节点服务的方法和装置

Country Status (1)

Country Link
CN (1) CN114363336A (zh)

Citations (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101996103A (zh) * 2009-08-20 2011-03-30 三星电子(中国)研发中心 多核云计算平台并行应用优化方法
CN107678865A (zh) * 2017-09-20 2018-02-09 中国银行股份有限公司 基于交易分组的区块链的验证方法以及系统
WO2018076762A1 (zh) * 2016-10-27 2018-05-03 上海亿账通区块链科技有限公司 基于区块链的交易验证方法、系统、电子装置及介质
CN109284190A (zh) * 2018-09-20 2019-01-29 中链科技有限公司 一种任务处理方法及装置
CN109359957A (zh) * 2018-09-17 2019-02-19 中国银联股份有限公司 一种安全多方计算的方法及相关装置
CN110430087A (zh) * 2019-09-16 2019-11-08 上海保险交易所股份有限公司 区块链热升级的架构设计与实现
CN110557416A (zh) * 2018-05-31 2019-12-10 厦门本能管家科技有限公司 一种多节点协同打块的方法及系统
WO2020035095A2 (en) * 2019-11-27 2020-02-20 Alipay (Hangzhou) Information Technology Co., Ltd. Asynchronous processing of blockchain blocks
WO2020224238A1 (zh) * 2019-05-06 2020-11-12 深圳壹账通智能科技有限公司 区块链节点的部署方法、装置、设备及存储介质
CN112200577A (zh) * 2020-09-15 2021-01-08 刘明明 结合云计算分析的区块链支付处理方法及大数据服务中心
WO2021047445A1 (zh) * 2019-09-12 2021-03-18 腾讯科技(深圳)有限公司 区块链网络中的数据处理方法、装置、存储介质和计算机设备
CN113067894A (zh) * 2021-06-02 2021-07-02 支付宝(杭州)信息技术有限公司 节点退出区块链子网的方法
CN113067899A (zh) * 2021-06-02 2021-07-02 支付宝(杭州)信息技术有限公司 一种启动/关闭区块链节点服务的方法和装置
CN113098983A (zh) * 2021-06-02 2021-07-09 支付宝(杭州)信息技术有限公司 基于智能合约的任务执行方法及装置
CN113259458A (zh) * 2021-06-02 2021-08-13 支付宝(杭州)信息技术有限公司 一种启动/关闭区块链节点服务的方法和装置
WO2021208956A1 (zh) * 2020-04-17 2021-10-21 支付宝(杭州)信息技术有限公司 智能合约的部署

Patent Citations (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101996103A (zh) * 2009-08-20 2011-03-30 三星电子(中国)研发中心 多核云计算平台并行应用优化方法
WO2018076762A1 (zh) * 2016-10-27 2018-05-03 上海亿账通区块链科技有限公司 基于区块链的交易验证方法、系统、电子装置及介质
CN107678865A (zh) * 2017-09-20 2018-02-09 中国银行股份有限公司 基于交易分组的区块链的验证方法以及系统
CN110557416A (zh) * 2018-05-31 2019-12-10 厦门本能管家科技有限公司 一种多节点协同打块的方法及系统
CN109359957A (zh) * 2018-09-17 2019-02-19 中国银联股份有限公司 一种安全多方计算的方法及相关装置
CN109284190A (zh) * 2018-09-20 2019-01-29 中链科技有限公司 一种任务处理方法及装置
WO2020224238A1 (zh) * 2019-05-06 2020-11-12 深圳壹账通智能科技有限公司 区块链节点的部署方法、装置、设备及存储介质
WO2021047445A1 (zh) * 2019-09-12 2021-03-18 腾讯科技(深圳)有限公司 区块链网络中的数据处理方法、装置、存储介质和计算机设备
CN110430087A (zh) * 2019-09-16 2019-11-08 上海保险交易所股份有限公司 区块链热升级的架构设计与实现
WO2020035095A2 (en) * 2019-11-27 2020-02-20 Alipay (Hangzhou) Information Technology Co., Ltd. Asynchronous processing of blockchain blocks
WO2021208956A1 (zh) * 2020-04-17 2021-10-21 支付宝(杭州)信息技术有限公司 智能合约的部署
CN112200577A (zh) * 2020-09-15 2021-01-08 刘明明 结合云计算分析的区块链支付处理方法及大数据服务中心
CN113067894A (zh) * 2021-06-02 2021-07-02 支付宝(杭州)信息技术有限公司 节点退出区块链子网的方法
CN113067899A (zh) * 2021-06-02 2021-07-02 支付宝(杭州)信息技术有限公司 一种启动/关闭区块链节点服务的方法和装置
CN113098983A (zh) * 2021-06-02 2021-07-09 支付宝(杭州)信息技术有限公司 基于智能合约的任务执行方法及装置
CN113259458A (zh) * 2021-06-02 2021-08-13 支付宝(杭州)信息技术有限公司 一种启动/关闭区块链节点服务的方法和装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
李?;: "基于区块链3.0架构的身份认证系统", 宿州学院学报, no. 11 *
王姝;晏敏;刘佳;周启惠;郭志斌;王雅哲;周园春;: "基于区块链的科学数据标识技术创新应用模式", 数据与计算发展前沿, no. 06 *

Similar Documents

Publication Publication Date Title
CN113067900B (zh) 智能合约的部署方法及装置
CN113098983B (zh) 基于智能合约的任务执行方法及装置
CN113067897B (zh) 跨链交互方法及装置
CN113067895B (zh) 组建区块链子网的方法和区块链系统
CN114301828A (zh) 一种跨子网交互方法、装置、电子设备和存储介质
CN113067899B (zh) 一种启动/关闭区块链节点服务的方法和装置
CN113259458B (zh) 一种启动/关闭区块链节点服务的方法和装置
CN114285755A (zh) 一种跨子网交互方法、装置、电子设备和存储介质
CN112422683A (zh) 一种k8s环境下的api网关服务高可用实现方法
CN115134075A (zh) 跨子网调用方法、装置、电子设备和存储介质
CN113067914B (zh) 一种分配子网标识的方法、装置、电子设备和存储介质
CN113259457B (zh) 区块链子网的信息同步方法及装置
CN114363162A (zh) 区块链日志的生成方法及装置、电子设备、存储介质
CN113259120B (zh) 同步节点信息列表的方法
CN114374699A (zh) 跨链交互方法和跨链交互的审计方法
CN113259117A (zh) 同步节点信息列表的方法
WO2023185043A1 (zh) 一种可调用资源的分配方法和装置
CN113259466B (zh) 区块链子网运行状态的控制方法和区块链系统
CN113259459B (zh) 区块链子网运行状态的控制方法和区块链系统
CN114866560B (zh) 区块链节点迁移的方法、装置、电子设备及可读存储介质
WO2023207076A1 (zh) 区块链子网的组建方法及装置
CN114363336A (zh) 一种启动/关闭区块链节点服务的方法和装置
CN113259462B (zh) 区块链消息的分发方法及装置
CN114338714A (zh) 一种区块同步方法、装置、电子设备和存储介质
CN114363335A (zh) 跨链交互方法及装置

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