掌桥专利:专业的专利平台
掌桥专利
首页

服务更新方法及装置

文献发布时间:2023-06-19 16:06:26



技术领域

本说明书实施例属于区块链技术领域,尤其涉及一种服务更新方法及装置。

背景技术

区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链系统中按照时间顺序将数据区块以顺序相连的方式组合成链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。

区块链网络产生的区块链任务可以由链下计算节点调用预先注册的服务组件进行处理。在相关技术中,链下计算节点通过配置文件记录自身可以调用的各个服务组件。在服务组件发生变更的情况下,链下计算节点需要重新加载更新后的配置文件,以便根据该配置文件调用变更后的服务组件。通常情况下,链下计算节点通过停机重启重新加载更新后的配置文件。

显然,若链下计算节点在重新加载所述配置文件时正在处理区块链任务,则停机重启将会强行中断正在处理的区块链任务,甚至造成该任务相关数据丢失。在该方式下,不仅区块链任务的执行效率较低,而且链下计算节点执行区块链任务的稳定性也有待提升。

发明内容

本发明的目的在于提供一种服务更新方法及装置。

根据本说明书一个或多个实施例的第一方面,提出了一种服务更新方法,应用于区块链节点对应的链下计算节点,所述链下计算节点包含调度引擎和由计算引擎框架及其所管理的计算单元构成的计算引擎,所述调度引擎用于将所述区块链节点生成的区块链任务调度至所述计算引擎执行,所述方法包括:

从服务中心获取服务变更消息,所述服务变更消息用于指示发生变更后的已注册服务,所述已注册服务包括已注册至所述服务中心的计算引擎框架和计算单元;

根据所述服务变更消息更新本地维护的可用服务信息,所述可用服务信息用于指示所述已注册服务中允许被所述调度引擎调用的可用服务。

根据本说明书一个或多个实施例的第二方面,提出了一种服务更新装置,应用于区块链节点对应的链下计算节点,所述链下计算节点包含调度引擎和由计算引擎框架及其所管理的计算单元构成的计算引擎,所述调度引擎用于将所述区块链节点生成的区块链任务调度至所述计算引擎执行,所述装置包括:

消息获取单元,用于从服务中心获取服务变更消息,所述服务变更消息用于指示发生变更后的已注册服务,所述已注册服务包括已注册至所述服务中心的计算引擎框架和计算单元;

信息更新单元,用于根据所述服务变更消息更新本地维护的可用服务信息,所述可用服务信息用于指示所述已注册服务中允许被所述调度引擎调用的可用服务。

根据本说明书一个或多个实施例的第三方面,提出了一种电子设备,包括:

处理器;

用于存储处理器可执行指令的存储器;

其中,所述处理器通过运行所述可执行指令以实现如第一方面中任一项所述的方法。

根据本说明书一个或多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面中任一项所述方法的步骤。

在本方案中,区块链节点所对应的链下计算节点包括调度引擎和由计算引擎框架及其所管理的计算单元构成的计算引擎,所述调度引擎用于将所述区块链节点生成的区块链任务调度至所述计算引擎执行。所述链下计算节点从服务中心获取用于指示发生变更后的已注册服务的服务变更消息,并根据该消息更新本地维护的可用服务信息,所述可用服务信息用于指示所述已注册服务中允许被所述调度引擎调用的可用服务。

可以理解的是,在上述更新完成后,更新后的可用服务信息所指示的可用服务也是发生变更后的可用服务。基于更新后的可用服务信息,调度引擎可以确定区块链任务对应的计算引擎,以用于执行该区块链任务。例如,在上述更新对应于新增计算单元的情况下,在上述更新完成后,新增的计算单元即可立即被用于执行区块链任务。显然,上述更新过程并不需要链下计算节点重新加载配置文件,更不需要链下计算节点停机重启,该方式能够实现可用服务的实时、在线更新。因此,该方式减少了对当前正在处理的区块链任务的不利影响,不仅有助于保证区块链任务的执行效率,也在一定程度上提升了链下计算节点处理区块链任务的稳定性。

附图说明

为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是一示例性实施例提供的一种链下计算节点的结构示意图。

图2是一示例性实施例提供的一种区块链任务的链下处理方法的流程图。

图3是一示例性实施例提供的一种设备的结构示意图。

图4是一示例性实施例提供的一种区块链任务的链下处理装置的框图。

具体实施方式

为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。

为解决相关技术中存在的上述问题,本说明书提出一种服务更新方法,通过获取服务变更消息的方式更新本地维护的可用服务信息,以实现对链下计算节点所对应可用服务的实时、在线更新。该方法应用于区块链节点对应的链下计算节点,所述链下计算节点包含调度引擎和由计算引擎框架及其所管理的计算单元构成的计算引擎,所述调度引擎用于将所述区块链节点生成的区块链任务调度至所述计算引擎执行。下面结合附图对该方案进行详细说明。

本说明书实施例所述的链下计算节点可以由多个功能模块构成,首先结合图1对本说明书实施例所述的链下计算节点的结构进行介绍。如图1所示,区块链网络由nodeA~E等多个区块链节点构成,任一区块链节点均可以对应于相应的链下计算节点。以nodeA为例,该节点对应的链下计算节点A可以包括调度引擎和至少一个计算引擎框架。例如,调度引擎连接有n个计算引擎框架,如计算引擎框架1~n。其中,任一计算引擎框架及其所管理的m个计算单元构成一个计算引擎。例如,计算引擎1包括计算引擎框架1和计算单元11~13(此时m=3)、计算引擎2包括计算引擎框架2和计算单元21~22(此时m=2)、…、计算引擎n包括计算引擎框架n和计算单元n1~nm等。可见,任一链下计算节点包含一个调度引擎、至少一个计算引擎框架和至少一个计算单元,该调度引擎可以调度各个计算单元分别执行相应的区块链任务。其中,上述n和m均为大于或等于1的整数。

任一区块链节点对应的链下计算节点均可以是由相应的调度引擎、计算引擎框架和计算单元在逻辑层面构成的计算主体,就实体设备来说,该链下计算节点的各个组成部分可以部署在相同或不同的实体设备中,本说明书实施例并不对此进行限制。例如,链下计算节点A可以被部署于相应区块链节点所属的节点设备中,即链下计算节点A和区块链节点A被部署于同一节点设备中。此时,该链下计算节点所包含的调度引擎、计算引擎框架和计算单元可以为运行于该节点设备中的相应功能模块。或者,上述调度引擎和各个计算引擎框架可以运行于该节点设备中的功能模块,而各个计算引擎框架所管理的计算单元可以运行于其他的计算设备中,从而由计算引擎框架实现对计算单元的远程调用。再例如,链下计算节点A也可以被部署于节点设备之外的计算设备中,而相应的计算引擎框架和计算单元则可以被部署于该节点设备或者其他节点设备中,不再赘述。

可以理解的是,链下计算节点中的调度引擎、各个计算引擎框架和各个计算单元均可以视为供区块链节点调用的功能模块。为实现对各个功能模块的高效管理,上述各个功能模块可以被预先注册至统一的服务中心。分别对应于区块链网络中各个区块链节点的链下计算节点所包含的功能模块,可以被分别注册至所述服务中心。其中,计算单元可以将自身的计算类型、访问地址等相关信息注册至服务中心,而服务中心可以为计算单元分配服务标识以便识别。在任一计算单元注册完成后,服务中心可以维护该计算单元的上述注册信息。类似的,各个链下计算节点中的调度引擎和计算引擎框架均可以注册至所述服务中心,称为由该服务中心所管理的已注册服务。任一链下计算节点包含的已经注册至所述服务中心的计算引擎框架和计算单元,即为调度引擎对应的可用服务,可以被调度引擎调度用于执行区块链任务。换言之,调度引擎可以将自身接收到的区块链任务调度至自身所对应任一计算引擎框架管理的任一计算单元执行。

下面结合图2所示的服务更新方法,对可用服务信息的更新过程进行说明。该方法用于区块链节点对应的链下计算节点,所述链下计算节点包含调度引擎和由计算引擎框架及其所管理的计算单元构成的计算引擎,所述调度引擎用于将所述区块链节点生成的区块链任务调度至所述计算引擎执行。如图2所示,该方法包括步骤202-204。

步骤202,从服务中心获取服务变更消息,所述服务变更消息用于指示发生变更后的已注册服务,所述已注册服务包括已注册至所述服务中心的计算引擎框架和计算单元。

如前所述,链下计算节点的已注册服务可以包括已注册至所述服务中心的计算引擎框架和计算单元。在上述已注册服务发生变更的情况下,服务中心可以根据发生变更后的已注册服务生成相应的服务变更消息,并将该消息提供至链下计算节点。

在链下计算节点中,除了计算引擎框架和计算单元已经被注册至服务中心之外,为了实现对各个功能模块的规范化管理,调度引擎也可以被注册至服务中心,换言之,调度引擎也可以为注册至所述服务中心的已注册服务。例如,在所述调度引擎启动完成的情况下,可以由该调度引擎向服务中心发起服务注册请求,以将所述调度引擎注册至所述服务注册中心。其中,服务中心可以响应于调度引擎发起的所述服务注册请求记录调度引擎的注册信息,并记录其所表征的链下计算节点的计算节点标识,以便与其他链下计算节点进行区分。或者,服务中心也可以仅记录调度引擎的注册信息,并将该调度引擎作为相应的链下计算节点进行管理。此时,本方案所述的链下计算节点仅为逻辑层面的概念,而服务中心实际上仅管理各个调度引擎——即对于任一链下计算节点,服务中心并不区分该链下计算节点和其所包含的调度引擎。基于此,链下计算节点可以在调度引擎已注册至服务中心的情况下,由该调度引擎从所述服务中心获取服务变更消息。

其中,任一已注册服务在注册完成后,服务中心记录的注册信息可以包括该服务的服务名称,服务类型(如计算单元的计算类型、计算引擎框架所管理的各个计算单元的计算类型等),服务状态(可用状态或者不可用状态)和/或服务接口信息(IP(InternetProtocol Address,互联网协议地址)、接口(Port)等)。基于上述注册信息,服务中心可以实现对各个已注册服务的管理,而在任一已注册服务发生变更的情况下,服务中心可以相应的其注册信息。

在一实施例中,服务中心在确定任一已注册服务发生变更的情况下,可以根据该已注册服务的上述注册信息生成所述服务变更消息。如可以将上述全部或部分注册信息记录在服务变更消息中,以便准确告知其他已注册服务(如调度引擎)发生变更的该已注册服务的具体情况。其中,考虑到上述变更通常会改变导致已注册服务的注册信息发生变化,因此服务中心可以在完成对上述注册信息的更新后,根据更新后的注册信息生成所述服务变更消息,具体过程不再赘述。

其中,本说明书实施例所述的任一已注册服务发生变更,可能包括下述至少之一的情形:例如,上述变更可以是新增所述任一已注册服务,即任一计算引擎框架或者任一计算单元新注册至所述服务中心。其中,若新增任一计算引擎框架,可以相应的新增该计算引擎框架管理的各个计算单元。再例如,上述变更也可以是删除所述任一已注册服务,即已注册至服务中心的任一已注册服务终止注册,被从服务中心中删除。其中,若删除任一计算引擎框架,则可以同时删除该计算引擎框架所管理的各个计算单元。再例如,上述变更也可以是任一已注册服务的服务状态发生变化,如在可用状态变与不可用状态之间切换等。可以理解的是,任一已注册服务只有处于可用状态的情况下,才能够被调度引擎所调用。又例如,上述变更还可以是任一已注册服务的调用信息发生变化,如其访问路径发生变化,或者服务名称、服务对象类型等发生变化,不再赘述。在至少一个已注册服务发生上述至少一种变更的情况下,服务中心可以根据该变更生成相应的服务变更消息。

在一实施例中,服务中心可以通过多种方式向链下计算节点发送所述服务变更消息。例如,服务中心可以响应于所述已注册服务发生变更将所述服务变更消息发送至链下计算节点。在该方式下,服务中心在所述已注册服务发生变更的情况下主动向调度引擎发送服务变更消息,使得调度引擎可以及时准确地获知上述变更的发生,从而有助于调度引擎及时更新可用服务信息,有效降低了服务变更后的响应延迟。

再例如,调度引擎也可以按照预设的查询周期向服务中心发起变更查询请求,而服务中心在无已注册服务发生变更的情况下,自然可以不必向调度引擎返回响应消息或仅返回空消息;而在有已注册服务发生变更的情况下,再向调度引擎返回服务变更消息。例如,服务中心可以在确定已注册服务发生变更的情况下,根据所述变更生成服务变更消息并返回至调度引擎,以作为对所述变更查询请求的响应,告知所述已注册服务发生的上述变更。

在一实施例中,服务中心可以维护有第一类型列表,该列表用于记录已注册至服务中心的各个调度引擎所关注服务的服务类型,所述服务变更消息可以由所述服务中心在第一类型列表记录有发生变更的计算引擎的服务类型的情况下发送至所述调度引擎。例如,调度引擎注册至服务中心时可以指定自身所关注的已注册服务的服务类型,如自身所关注计算单元的计算类型。其中,本说明书实施例所述的计算类型可以为转发类型、MFT(Managed File Transfer,大文件传输)类型、隐私计算类型、数据查询类型等,本说明书实施例并不对此进行限制。相应地,在调度引擎完成注册后,服务中心可以在其维护的所述第一类型列表中记录上述服务类型与调度引擎的服务名称或标识之间的对应关系。此后,在确定符合上述服务类型的已注册服务发生变更的情况下,服务中心可以生成所述服务变更消息,并主动发送至调度引擎或者响应于调度引擎发起的所述变更查询请求将该消息返回至调度引擎。

可以理解的是,对于某一类型的已注册服务,在任一已注册服务发生变更的情况下,服务中心可以针对性地通知关注类型的各个调度引擎,而不关注该类型的其他调度引擎则不会接收到所述服务变更消息。而对于任一调度引擎,服务中心可以在该调度引擎所关注的特定类型的已注册服务发生变更时针对性地通知该变更,而该调度引擎未关注的其他类型的服务变更消息即便发生变更,服务中心也不会通知该调度引擎。可见,该方式通过对特定类型的已注册服务的关注功能,能够对已注册服务的变更实现类型级别和用户级别的针对性提醒,有助于提升变更通知的准确度。

当然,调度引擎注册至服务中心时也可以指定自身所关注的已注册服务,如任一链下计算节点中的调度引擎可以将该链下计算节点中的各个计算引擎框架和计算单元均指定为自身所关注的已注册服务。此时,服务中心可以在上述各个已注册服务发生变更的情况下通知该调度引擎。可见,此时能够对已注册服务的变更实现服务级别的针对性提醒,通知和提醒更准确。

通常情况下,对于尚未注册至服务中心中的服务,调度引擎可能并不知晓其具体类型或者具体服务,导致调度引擎无法预先向服务中心指定其关注的这类服务或者这一服务。对此,在有特定服务类型的新增服务被注册至服务中心的情况下,服务中心可以生成相应的服务新增消息并发送至全部或部分已注册服务,以便已注册服务可以根据该消息调用该新增服务。

步骤S204,根据所述服务变更消息更新本地维护的可用服务信息,所述可用服务信息用于指示所述已注册服务中允许被所述调度引擎调用的可用服务。

在获取到所述服务变更消息的情况下,链下计算节点可以根据该消息更新本地维护的可用服务信息。具体的,在上述可用服务信息被链下计算节点中的调度引擎维护在本地的情况下,可以由该调度引擎实施上述更新操作。另外,由于链下计算节点本地通常会维护已注册服务中允许被所述调度引擎调用的全部可用服务的可用服务信息,因此可用服务信息在进行上述更新时,可以先确定服务变更消息对应的已注册服务,在针对性地更新该已注册服务的可用服务信息,不再赘述。

在说明书所述实施例中,任一所述可用服务的可用服务信息可以包括前述注册信息,还可以包括该服务的当前负载信息,如当前处理任务数量、可调用资源总量、当前可用资源量等。换言之,链下计算节点所维护的任一已注册服务的可用服务信息可以包括该服务的服务名称,服务类型,服务状态,服务接口信息和/或当前负载信息。根据可用服务信息,链下计算节点中的调度引擎可以确定自身可以调用的各个可用服务。

在本方案中,区块链节点所对应的链下计算节点包括调度引擎和由计算引擎框架及其所管理的计算单元构成的计算引擎,所述调度引擎用于将所述区块链节点生成的区块链任务调度至所述计算引擎执行。所述链下计算节点从服务中心获取用于指示发生变更后的已注册服务的服务变更消息,并根据该消息更新本地维护的可用服务信息,所述可用服务信息用于指示所述已注册服务中允许被所述调度引擎调用的可用服务。

可以理解的是,在上述更新完成后,更新后的可用服务信息所指示的可用服务也是发生变更后的可用服务。基于更新后的可用服务信息,调度引擎可以确定区块链任务对应的计算引擎,以用于执行该区块链任务。例如,在上述更新对应于新增计算单元的情况下,在上述更新完成后,新增的计算单元即可立即被用于执行区块链任务。显然,上述更新过程并不需要链下计算节点重新加载配置文件,更不需要链下计算节点停机重启,该方式能够实现可用服务的实时、在线更新。因此,该方式减少了对当前正在处理的区块链任务的不利影响,不仅有助于保证区块链任务的执行效率,也在一定程度上提升了链下计算节点处理区块链任务的稳定性。

如前所述,所述链下计算节点的可用服务包括可用计算引擎框架或可用计算单元,二者均有可能发生变更,因此链下计算节点获取到的服务变更消息可能对应于所述可用计算引擎框架或者可用计算单元。因为可用计算引擎框架管理有至少一个可用计算单元,所以在上述两种情况下,调度引擎都需要对所述变更涉及的可用计算引擎框架和可用计算单元的可用服务信息进行更新。例如,在服务变更消息表明发生变更的已注册服务为可用计算单元的情况下,调度引擎可以更新发生变更的所述可用计算单元的可用服务信息,并更新管理该可用计算单元的可用计算引擎框架的可用服务信息。此时可用计算单元(如任一链下计算节点中的任一计算单元)发生变更,不仅需要针对性地更新该计算单元的可用服务信息,还需要更新其对应的计算引擎框架的可用服务信息。再例如,在服务变更消息表明发生变更的已注册服务为可用计算引擎框架的情况下,调度引擎可以分别更新可用计算引擎框架及其所管理的各个可用计算单元的可用服务信息。此时可用计算引擎框架(如任一链下计算节点中的任一计算引擎框架)发生变更,不仅需要更新该计算引擎框架的可用服务信息,还需要相应的更新其所管理的各个计算单元的可用服务信息。

以图1为例,调度引擎维护有计算引擎1~n中各个计算引擎框架和各个计算单元的可用服务信息,其中各个计算引擎框架的可用服务信息构成可用框架信息集合,各个计算单元的可用服务信息构成可用单元信息集合。若计算引擎1中新增计算单元14,则调度引擎可以在计算引擎框架1的可用服务信息中新增计算单元14的计算单元标识,并在可用单元信息集合中新增计算单元14的可用服务信息。若链下计算节点中新增计算引擎框架n+1,该计算引擎框架管理有计算单元n1~n3,则调度引擎可以在可用框架信息集合中新增计算引擎框架n+1的可用服务信息(其中记录有计算单元n1~n3的计算单元标识),并在可用单元信息集合中新增计算单元n1~n3的可用服务信息。若链下计算节点中删除计算引擎框架2,则调度引擎可以在可用框架信息集合中删除计算引擎框架2的可用服务信息(其中记录有计算单元21-22的计算单元标识),并在可用单元信息集合中删除计算单元21-22的可用服务信息。

区块链网络中的区块链节点可以生成需要由链下计算节点进行链下处理的区块链任务,例如,区块链节点可以通过执行智能合约或区块链交易生成区块链任务。在对可用服务信息的上述更新完成后,链下计算节点可以获取区块链节点执行区块链交易生成的区块链任务,然后根据更新后的所述可用服务信息处理该区块链任务。下面结合多个实施例对其处理过程进行说明。

在一实施例中,调度引擎处理区块链任务的过程,可以包括将该区块链任务调度至相应的计算单元执行,并将其执行结果返回至区块链节点。其中,若任一区块链任务的执行结果尚未被成功返回至区块链节点(如该任务已经被调度引擎获取但尚未被调度至相应的计算单元、该任务已经被调度至相应的计算单元执行但尚未执行完成、上述计算单元已经将执行结果返回至调度引擎但尚未被调度引擎成功返回至区块链节点等),则可以认为该区块链任务尚未处理完成。

鉴于处理过程需要一定的时间,为了对尚未处理完成的区块链任务进行有效管理,调度引擎可以对获取到的区块链任务进行缓存,如可以将其缓存在计算设备的本地存储空间或者调度引擎允许访问的其他存储空间等。例如,调度引擎可以维护用于记录这类任务的任务列表,该任务列表及用于记录所述调度引擎获取到的且执行结果尚未被成功返回至所述区块链节点的区块链任务。在获取到任一区块链任务的情况下,调度引擎可以将该任务记录于上述任务列表中;而在(经过处理并)将该任务的执行结果返回至区块链节点完成的情况下,调度引擎可以将该任务从所述任务列表中删除。或者,也可以在任一区块链任务的执行结果成功返回至区块链节点之前,在上述任务列表中将该任务的任务状态设置为未完成状态;并在将所述执行结果成功返回至区块链节点的情况下,将其任务状态调整为完成状态,本说明书实施例对于记录区块链任务的具体形式并不进行限制。

在获取到上述区块链任务的情况下,调度引擎可能因为某些原因停机,如被用户正常关机或者因异常状况而宕机等。此后,调度引擎可以完成启动,相应地,调度引擎的本次启动可以为正常启动,或者也可以为异常停机(或称宕机)后的重启。其中,由于上述调度引擎本质上为运行于计算设备中的功能模块,所以上述调度引擎停机可以为该功能模块自身停止运行,或者也可以为所述计算设备整体停止运行,本说明书实施例并不对此进行限制。鉴于链下计算节点中仅包含一个调度引擎,该调度引擎停机后链下计算节点将无法正常处理区块链任务,因此调度引擎停机即可视为其所处的链下计算节点停机,特此说明。

在停机时刻,调度引擎可能尚未处理完成已经获取并缓存的上述区块链任务。例如,在停机时刻,上述任务列表中可能存在尚未处理完成的区块链任务,因此在启动完成后,调度引擎可以从该列表中获取这类任务,以便根据更新后的所述可用服务信息继续对其进行处理。

启动完成后的调度引擎除了获取并处理区块链节点在调度引擎停机之前生成的上述区块链任务之外,还可以获取并处理所述区块链节点在所述调度引擎停机后生成的区块链任务。其中,区块链节点在所述调度引擎停机后生成的区块链任务可以包括在调度引擎停机后至本次启动完成时刻生成的区块链任务,也可以包括在调度引擎本次启动完成后生成的区块链任务。为了对链下计算节点需要获取的区块链任务进行区分,本说明书实施例通过上述停机时刻,将在调度引擎停机之前生成的区块链任务称为历史区块链任务,并将区块链节点在调度引擎停机之后生成的区块链任务称为当前区块链任务。

其中,调度引擎可以通过监听任务分配事件的方式获取所述当前区块链任务。例如,区块链节点在执行区块链交易或者智能合约的过程中,可以生成包含所述当前区块链任务的任务分配事件,从而调度引擎可以在通过监听上述任务分配事件获取所述当前区块链任务。可以理解的是,调度引擎在停机之前获取所述历史区块链任务(获取历史区块链任务时该任务还并非历史区块链任务)的过程,与在启动完成之后获取所述当前区块链任务的过程并不存在本质区别,不再赘述。实际上,本说明书实施例所述的历史区块链任务和当前区块链任务仅在生成时机和获取方式上存在区别,对于获取到的历史区块链任务和当前区块链任务,调度引擎对其进行处理的过程并不存在本质区别。

另外,为了避免对区块链任务的无效执行,调度引擎在监听到包含任一区块链任务的任务分配事件的情况下,可以根据任务分配事件中记载的参与方信息确定自身是否需要处理区块链任务。以图1为例,在任务分配事件中包含参与方节点的公钥的情况下,若所述任务分配事件中包含nodeA的公钥,则调度引擎可以确定nodeA为该任务分配事件中所包含区块链任务的参与方,因此(区块链节点所对应链下计算节点中包含的)调度引擎自身需要处理该任务;从而调度引擎可以将该区块链任务记录至所述任务列表,以便后续根据更新后的所述可用服务信息对其进行处理。当然,若所述任务分配事件中不包含nodeA的公钥,则调度引擎可以确定nodeA并非该任务分配事件中所包含区块链任务的参与方,因此可以直接丢弃该任务,从而避免对该任务进行无效处理。

可以理解的是,对于在调度引擎停机前产生并缓存的历史区块链任务,调度引擎在启动完成后并不知晓该任务的当前状态,换言之,启动完成的调度引擎并不确定历史区块链任务是否仍然需要处理。对此,鉴于所述历史区块链任务由区块链节点生成并下发至链下计算节点处理,调度引擎可以向区块链节点请求获取该任务的当前状态,并根据区块链节点返回的查询结果确定是否需要执行历史区块链任务:响应于所述查询结果表明所述历史区块链任务处于未完成状态,处理所述历史区块链任务。通过该方式,调度引擎可以向作为任务生成方的区块链节点请求获取历史区块链任务的状态,并在后者指示需要处理该任务的情况下再处理该任务,不仅实现了对停机前尚未处理完成的任务的顺利恢复,而且避免了启动后直接处理历史区块链任务可能导致的无效处理,有助于提升调度引擎在启动完后的任务处理效率。

当然,上述查询结果也有可能表明所述历史区块链任务处于已完成状态,即区块链节点不再需要调度引擎处理所述历史区块链任务以获取执行结果,此时调度引擎无需处理该任务。因此,调度引擎可以响应于所述查询结果表明所述历史区块链任务处于已完成状态,避免处理所述历史区块链任务,从而不仅有效避免了对该任务的无效处理,而且能够节省处理当前区块链任务的时间成本和资源成本,从而提升链下计算节点的处理任务的整体效率。

在获取到上述历史区块链任务和当前区块链任务的情况下,调度引擎可以通过多种方式处理这些区块链任务。例如,调度引擎可以按照各个生成各个区块链任务的时间顺序依次处理各个区块链任务。如可以按照生成时间的先后顺序依次处理各个历史区块链任务,处理完全部历史区块链任务之后,在按照生成时间的先后顺序依次处理各个当前区块链任务。按照该方式,越早生成的区块链任务的处理顺序越靠前(即被处理的越早),从而能够尽量避免区块链任务的处理顺序与生成顺序不一致可能导致的处理出错。

再例如,为了避免后生成的当前区块链任务的等待时间过长,调度引擎也可以并行处理所述历史区块链任务和当前区块链任务。例如可以逐一交替获取历史区块链任务和当前区块链任务,并按照获取顺序依次执行各个区块链任务。通过该方式,能够缩短链下计算节点从获取到当前区块链任务到开始处理该任务的间隔时长,即缩短了当前区块链任务的等待时长。可见,该方案能够提升当前区块链任务的执行效率,有助于避免停机后生成的当前区块链任务因无法被及时处理而被大量堆积。

如前所述,链下计算节点中的调度引擎对应于至少一个计算引擎。基于此,对于历史区块链任务和当前区块链任务中的任一区块链任务(下称目标区块链任务),调度引擎可以将该任务调度(即分发)至相应的计算引擎执行。例如,调度引擎可以将所述任一区块链任务调度至匹配于所述目标区块链任务的目标计算引擎执行,并接收该计算引擎返回的执行结果。通过该方式,调度引擎可以控制由匹配于所述目标区块链任务的目标计算引擎执行该任务,从而有助于实现该任务的顺利、高效处理。

其中,链下计算节点包含调度引擎和至少一个计算单元,调度引擎可以从所述链下计算节点包含的各个计算单元中确定匹配于所述目标区块链任务的目标计算单元,管理该目标计算单元的计算引擎框架即为目标计算引擎框架,而目标计算引擎框架和目标计算单元均属于目标计算引擎。可见,在调度引擎确定出目标计算单元的情况下,相应的目标计算引擎框架和目标计算引擎也随即被确定。进而,调度引擎可以将所述目标区块链任务发送至所述目标计算引擎框架,并由所述目标计算引擎框架在确定所述目标计算单元处于可用状态的情况下,将所述目标区块链任务转发至目标计算单元,以由其执行该任务。

以图1为例,若调度引擎确定匹配于所述目标区块链任务的目标计算单元为图1所示的计算单元21,则目标计算引擎框架即为计算引擎框架2、目标计算引擎即为计算引擎2。此时,调度引擎可以将所述目标区块链任务下发至计算引擎框架2,并由计算引擎框架2将该任务转发至计算单元21执行。在上述过程中,调度引擎用于确定由哪个计算单元执行所述目标区块链任务(即确定目标计算单元),目标计算引擎框架用于将该任务转发至该目标计算单元,通过二者的配合,能够实现对该区块链任务的准确、高效调度。

任一计算单元具有相应的计算类型,该计算类型可以视为该计算单元能够执行的任务的类型。其中,在任一计算引擎中包含多个计算单元的情况下,这些计算单元的计算类型可能相同或不同。类似的,在所述链下计算节点中包含多个计算单元的情况下,这些计算单元的计算类型也可能相同或不同。为进一步确保目标计算单元顺利执行所述目标区块链任务,并提升该任务的执行效率,调度引擎可以根据计算类型确定所述目标计算单元。例如,与服务中心类似的,调度引擎可以维护有第二类型列表,该类型列表用于记录所述链下计算节点包含的各个计算单元的计算类型。基于此,调度引擎可以先确定所述目标区块链任务对应的目标计算类型,然后在所述第二类型列表中查询对应于所述目标计算类型的目标计算单元。

其中,若第二类型列表中仅存在一个对应于目标计算类型的计算单元,则可以将该计算单元作为目标计算单元。若第二类型列表中存在多个对应于目标计算类型的计算单元,则可以在这些计算单元(下称候选计算单元)中选取目标计算单元。例如,考虑到目标计算单元执行目标区块链任务需要消耗一定的资源,为尽量提升目标计算单元执行目标区块链任务的成功率,调度引擎可以根据计算单元的资源量选取所述目标计算单元。具体的,调度引擎可以分别确定各个候选计算单元的当前可用资源量,并从当前可用资源量满足所述区块链任务的执行条件的计算单元中选取目标计算单元。其中,所述执行条件可以包括:当前可用资源量不小于资源阈值,或者当前可用资源量不小于执行所述区块链任务所需的资源量等。通过该方式,可以在执行目标区块链任务之间即为其确定执行过程中的可用资源,从而有助于目标计算单元顺利、高效地执行该任务。

在一实施例中,还可以将所述目标区块链任务的执行结果返回至所述区块链节点。例如,所述目标计算单元可以通过目标计算引擎框架将所述区块链任务的执行结果转发至所述调度引擎,进而,调度引擎可以将该执行结果提交至所述区块链节点。其中,调度引擎可以通过向区块链节点发送无需共识的区块链消息,并在该消息中包含所述执行结果。

在一实施例中,对于所述目标区块链任务,调度引擎可以将其记录在自身维护的任务列表中,并确定目标计算单元和目标计算引擎框架,然后将该任务下发至目标计算引擎框架。而目标计算引擎框架在接收到调度引擎下发的所述目标区块链任务的情况下,可以将该任务记录在自身维护的任务列表中,并将该任务转发至目标计算单元执行。在目标计算单元执行所述目标区块链任务完成后,可以将其执行结果返回至目标计算引擎框架。目标计算引擎框架在接收到目标计算单元返回的该执行结果的情况下,可以将其记录在自身维护的结果列表中,并尝试将该执行结果返回至调度引擎。其中,目标计算引擎框架可以按照自身接收到各个执行结果的时间顺序依次向调度引擎返回各个执行结果,以避免结果返回耗时过长。直至将上述目标区块链任务的执行结果成功返回至调度引擎(调度引擎在成功接收到所述执行结果后可以向计算引擎框架返回确认消息)的情况下,目标计算引擎框架可以将自身维护的任务列表中记录的所述历史区块链任务删除,并将自身维护的结果列表中记录的该任务的执行结果删除。

类似的,调度引擎在接收到目标计算引擎框架返回的所述执行结果的情况下,可以将该执行结果记录在自身维护的结果列表中,并尝试将该执行结果上传至区块链节点。其中,调度引擎可以按照自身接收到各个执行结果的时间顺序依次向区块链节点上传各个执行结果,以避免结果返上传耗时过长。或者,在某些原因导致上传失败的情况下,调度引擎可以等待一段时间再次尝试上传,直至上传成功。在将所述目标区块链任务的执行结果成功上传至区块链节点(区块链节点在成功接收到所述执行结果后也可以向调度引擎返回确认消息)的情况下,调度引擎可以将自身维护的任务列表中记录的所述目标区块链任务删除,并将自身维护的结果列表中记录的该任务的执行结果删除。

在获取到所述目标区块链任务的执行结果的情况下,链下计算节点可以将其返回至区块链节点,以便区块链节点使用该结果。其中,在生成所述目标区块链任务的区块链交易用于指示所述区块链节点调用智能合约中定义的工作流的情况下,所述执行结果可以被区块链节点用于推动该工作流。例如,上述区块链交易对应的工作流包含多个任务结点,而且各个任务结点之间存在依赖关系,上述工作流可以根据所述依赖关系进行推进。上述目标区块链任务可以对应于其中任一任务结点,而在接收到目标区块链任务的执行结果后,区块链节点可以推进所述工作流,以便执行依赖于所述任一任务结点对应的另一区块链任务。通过上述方式,区块链节点可以按照工作流对应的预设步骤,依次执行各个任务结点对应的区块链任务,直至执行所述区块链交易完毕。

在一实施例中,本说明书所述的区块链节点可以属于由区块链主网所管理的区块链子网。如图1所示,若某一区块链网络(记为net1,图中未示出)中的部分区块链节点nodeA~E存在小范围交互的需求,则它们之间可以建立一个新的区块链网络(记为net2,即图1所示的区块链网络)。不妨假设net1中共包含12个节点nodeA~L,其中nodeA~E中的至少一个节点对应的用户或者net1的管理员可以在net1中发起子网生成交易,从而net1的各个节点nodeA~L可以分别执行该交易。在交易执行过程中,nodeA~E可以根据交易内容确定自身为net2的参与方,而其他节点nodeF~L则可以确定自身并非net2的参与方。基于此,nodeA~E之间可以借助net1的共识链路在三者之间建立net2,而nodeF~L则不会参与这一子网组建过程。对于通过上述方式建立的net2来说,其可以由net1所管理,此时net1即为区块链主网,而net2即为区块链子网。

在该场景下,区块链子网中的区块链节点A对应的链下计算节点,在获取到所述历史区块链任务和/或当前区块链任务的执行结果的情况下,可以将该执行结果提交至所述区块链主网,以将该执行结果存证于所述区块链主网。通过该方式,用于管理区块链子网的区块链主网还可以对区块链子网中的区块链节点对应的区块链任务的执行结果进行存证,从而依赖区块链主网的数据管理能力实现该执行结果的存证,有助于提升该数据的存储安全性。

图3是一示例性实施例提供的一种设备的示意结构图。请参考图3,在硬件层面,该设备包括处理器302、内部总线304、网络接口306、内存308以及非易失性存储器310,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器302从非易失性存储器310中读取对应的计算机程序到内存308中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。

如图4所示,图4是本说明书根据一示例性实施例提供的一种服务更新装置的框图,该装置应用于区块链节点对应的链下计算节点,所述链下计算节点包含调度引擎和由计算引擎框架及其所管理的计算单元构成的计算引擎,所述调度引擎用于将所述区块链节点生成的区块链任务调度至所述计算引擎执行。该装置包括:

消息获取单元401,用于从服务中心获取服务变更消息,所述服务变更消息用于指示发生变更后的已注册服务,所述已注册服务包括已注册至所述服务中心的计算引擎框架和计算单元;

信息更新单元402,用于根据所述服务变更消息更新本地维护的可用服务信息,所述可用服务信息用于指示所述已注册服务中允许被所述调度引擎调用的可用服务。

可选的,所述消息获取单元401还用于:

接收服务中心响应于所述已注册服务发生变更而发送的服务变更消息;或者,

按照预设的查询周期向服务中心发起变更查询请求,并接收所述服务中心在确定所述已注册服务发生变更的情况下返回的所述服务变更消息。

可选的,所述消息获取单元401还用于:

所述调度引擎从服务中心获取服务变更消息;

其中,所述服务中心维护的第一类型列表用于记录所述调度引擎所关注服务的服务类型,所述服务变更消息由所述服务中心在第一类型列表记录有发生变更的计算引擎的服务类型的情况下发送至所述调度引擎。

可选的,所述服务变更消息包括服务新增消息,所述服务新增消息所指示新增服务的特定服务类型未被记录于第一类型列表。

可选的,所述可用服务包括可用计算引擎框架或可用计算单元,所述信息更新单元402还用于:

在所述服务变更消息表明发生变更的已注册服务为可用计算单元的情况下,所述调度引擎分别更新发生变更的所述可用计算单元和管理该可用计算单元的可用计算引擎框架的可用服务信息;

在所述服务变更消息表明发生变更的已注册服务为可用计算引擎框架的情况下,所述调度引擎分别更新所述可用计算引擎框架及其所管理的各个可用计算单元的可用服务信息。

可选的,还包括:

任务获取单元403,用于获取所述区块链节点执行区块链交易生成的区块链任务;

任务处理单元404,用于根据更新后的所述可用服务信息处理所述区块链任务。

可选的,所述任务获取单元403还用于:

所述调度引擎在启动完成后获取缓存的历史区块链任务,所述历史区块链任务由所述区块链节点在所述调度引擎停机前生成;和/或,

所述调度引擎获取所述区块链节点生成的当前区块链任务,所述当前区块链任务由所述区块链节点在所述调度引擎停机后生成。

可选的,在所述调度引擎获取到所述历史区块链任务和所述当前区块链任务的情况下,所述任务处理单元404还用于:

并行处理所述历史区块链任务和所述当前区块链任务;或者,

在将所述历史区块链任务处理完毕后,处理所述当前区块链任务。

可选的,所述任务处理单元404还用于:

向所述区块链节点发起针对所述历史区块链任务的状态查询请求;

响应于所述区块链节点返回的查询结果表明所述历史任务处于未完成状态,处理所述历史区块链任务。

可选的,所述任务处理单元404还用于:

所述调度引擎从所述可用服务中确定匹配于所述任一区块链任务的目标计算单元及其所属的目标计算引擎框架;

所述目标计算引擎框架在确定所述目标计算单元处于空闲状态的情况下,将所述任一区块链任务转发至所述目标计算单元;

所述目标计算单元执行所述任一区块链任务。

可选的,所述调度引擎维护的第二类型列表记录有所述链下计算节点包含的各个计算单元的计算类型,所述任务处理单元404还用于:

所述调度引擎确定所述任一区块链任务对应的目标计算类型;

所述调度引擎在所述第二类型列表中查询对应于所述目标计算类型的目标计算单元。

可选的,所述链下计算节点的本次启动为正常启动或者异常停机后的重启。

可选的,处理所述区块链任务的目标计算单元由目标计算引擎框架所管理,所述装置还包括:

结果转发单元405,所述由目标计算单元通过所述目标计算引擎框架将所述区块链任务的执行结果转发至所述调度引擎;

结果提交单元406,用于由所述调度引擎将所述执行结果提交至所述区块链节点。

可选的,所述结果提交单元406还用于:

在接收到所述目标计算引擎框架转发的所述执行结果的情况下,所述调度引擎将所述计算结果保存在自身维护的第一结果列表中;以及,在确定所述执行结果被成功提交至所述区块链节点的情况下,所述调度引擎删除第一结果列表中保存的所述执行结果;和/或,

在接收到所述目标计算单元发送的所述执行结果的情况下,所述目标计算引擎框架将所述计算结果保存在自身维护的第二结果列表中;以及,在确定所述执行结果被成功转发至所述调度引擎的情况下,所述目标计算引擎框架删除第二结果列表中保存的所述执行结果。

可选的,所述区块链节点属于由区块链主网所管理的区块链子网,所述装置还包括:

结果存证单元407,用于将所述区块链任务的执行结果提交至所述区块链主网,以将该执行结果存证于所述区块链主网。

可选的,所述区块链交易用于指示所述区块链节点调用智能合约中定义的工作流,所述区块链任务的执行结果用于推进所述工作流。

可选的,

所述消息获取单元401还用于:在所述调度引擎已注册至所述服务中心的情况下,由所述调度引擎从所述服务中心获取服务变更消息;

所述装置还包括调度注册单元408,用于在所述调度引擎启动完成的情况下,由所述调度引擎向所述服务中心发起服务注册请求,以将所述调度引擎注册至所述服务注册中心。

可选的,任一已注册服务发生变更,包括下述至少之一:

新增所述任一已注册服务,删除所述任一已注册服务,所述任一已注册服务的服务状态发生变化,所述任一已注册服务的调用信息发生变化。

可选的,任一所述可用服务的可用服务信息包括下述至少之一:

服务名称,服务类型,服务状态,服务调用信息,当前负载信息。

在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、光学存储器等)上实施的计算机程序产品的形式。

本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。

相关技术
  • 服务器、更新管理方法、非临时存储介质、软件更新装置、带服务器及软件更新装置的系统
  • 客户端测试服务器更新的方法、更新装置和测试服务器
技术分类

06120114704019