首页> 中国专利> 一种基于联盟链的SDK的失效转移机制实现方法

一种基于联盟链的SDK的失效转移机制实现方法

摘要

本申请提供了一种基于联盟链的SDK的失效转移机制实现方法,所述方法,包括:对基于联盟链的SDK进行初始化,通过数据库获取相关配置数据;通过所述配置数据运行所述SDK,并监听来自业务系统的查询请求;接收所述查询请求,通过业务应用层调用所述SDK接口,进行接口查询,并激活失效转移的机制流程;记录调用所述SDK接口的时间,检测所述SDK接口链接稳定性的异常情况,具体包括:无异常情况,则对所述SDK接口进行正常的调用,获取所述SDK接口的调用结果;将所述调用结果返回至所述业务应用层,业务调用流程结束;有异常情况,则执行所述失效转移机制流程。

著录项

  • 公开/公告号CN113835922A

    专利类型发明专利

  • 公开/公告日2021-12-24

    原文格式PDF

  • 申请/专利权人 南京金宁汇科技有限公司;

    申请/专利号CN202111427229.X

  • 发明设计人 石宁;赖石辉;李达;

    申请日2021-11-29

  • 分类号G06F11/07(20060101);

  • 代理机构11363 北京弘权知识产权代理有限公司;

  • 代理人郭放;许伟群

  • 地址 210031 江苏省南京市江北新区研创园团结路99号孵鹰大厦1567室

  • 入库时间 2023-06-19 13:49:36

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-02-15

    授权

    发明专利权授予

说明书

技术领域

本申请涉及区块链技术领域,尤其涉及一种应用于联盟链的区块链系统的SDK层,针对应用层业务系统的接口调用过程中,实现失效转移的自动切换机制实现方法。

背景技术

联盟链区块链在当下发展非常迅速,基于底层的联盟链底层架构搭建的商业应用越来越多。因此,业务应用层需要在当前联盟中与其他的联盟节点进行业务数据交互需求时,在需要把数据接入到联盟链底层时,都需要使用联盟链区块链底层提供的SDK接口,业务应用层需要通过SDK提供的接口,调用这些接口实现应用层业务数据以实现各类业务数据的上链、查询等操作。

目前的SDK接口的提供,都是针对单个节点与应用绑定的唯一节点进行调用,并不支持在同个业务通道中的其他同权限的多个节点上进行切换。即:一个应用层业务系统需要使用一个SDK跟底层区块链系统进行交互时,只能通过与某一个固定的节点(IP节点)进行链接,该业务系统所有的链上操作都需要通过该节点完成。但是这样就会存在一定的缺陷,当这个节点出于某些原因宕机或者SDK接口调用超载的情况下,SDK就会出现异常无法正常使用,导致业务系统的异常,从而引发业务系统的业务被迫中断,对业务的正常开展造成不必要的损失。

为了提高SDK的稳定性,解决上述问题,基于区块链的SDK工具包需要一个失效转移机制,以解决因SDK接口出现问题时对业务系统造成影响的问题。

发明内容

本申请提供了一种基于联盟链的SDK的失效转移机制实现方法,以解决现有联盟链区块链网络中,业务系统调用的节点出于某些原因宕机、或者SDK接口调用超载的情况下,SDK就会出现异常接口无法正常使用,导致业务系统的异常,从而引发业务系统的业务被迫中断,对业务的正常开展造成不必要损失的问题。

第一方面,本申请提供了一种基于联盟链的SDK的失效转移机制实现方法,所述方法包括:

对基于联盟链的SDK进行初始化,通过数据库获取相关配置数据;

通过所述配置数据运行所述SDK,并监听来自业务系统的查询请求;

接收所述查询请求,通过业务应用层调用所述SDK接口,进行接口查询,并激活失效转移的机制流程;

记录调用所述SDK接口的时间,检测所述SDK接口链接稳定性的异常情况,具体包括:

无异常情况,则对所述SDK接口进行正常的调用,获取所述SDK接口的调用结果;

将所述调用结果返回至所述业务应用层,业务调用流程结束;

有异常情况,则执行所述失效转移机制流程。

在一种实现方式中,所述失效转移机制流程具体包括:

通过所述数据库的节点信息表,提取可用的失效转移节点;

对所有可用的失效转移节点逐个轮询,切换所述失效转移节点;

对切换后的所述失效转移节点与所述SDK接口进行实例化节点链接,具体包括:

实例化节点链接成功,则自动递归调用所述SDK接口函数,直至获取所述SDK接口调用的返回结果,业务调用流程结束;

实例化节点链接失败,则对所述可用的失效转移节点,再次逐个轮询,切换所述失效转移节点与所述SDK接口进行实例化节点链接;

对所述失效转移节点全部轮询,实例化链接失败,则标记所述SDK接口的调用结果失败,并返回所述失败结果至所述业务应用层,业务调用流程结束。

在一种实现方式中,所述SDK接口链接稳定性的异常情况具体包括:调用接口超时、创建接口链接超时、捕获到异常。

在一种实现方式中,所述调用接口超时,具体为:记录所述SDK接口中调用节点提供的超文本传输协议、超文本传输安全协议接口前后的时间,获取调用时间差,所述调用时间差超过设定值则判断所述调用接口超时。

在一种实现方式中,所述创建接口链接超时,具体为:将所述SDK接口与所述节点之间建立链接,获取链接时间,所述链接时间超过设定值则判断所述创建接口链接超时。

在一种实现方式中,所述捕获到异常,具体为:在调用所述节点的接口时,使用try{}catch{}捕获调用所述SDK接口的各类异常。

在一种实现方式中,所述对基于联盟链的SDK进行初始化,支持两种初始化方式具体包括:

在所述初始化中输入默认配置参数进行初始化,并将所述默认配置参数写入所述数据库中;

在所述初始化中通过所述数据库直接读取相关配置参数进行初始化,并将所述相关配置参数写入所述数据库中。

在一种实现方式中,所述SDK初始化通过配置参数中提取初始的所述失效转移配置节点信息并进行配置解析,所述配置解析失败则SDK运行失败。

在一种实现方式中,所述实例化节点链接成功还将查询当前链接所述失效转移节点所在应用通道的所有合法可用的所述失效转移节点信息。

在一种实现方式中,所述查询到的失效转移节点信息存储在所述数据库的失效转移的节点信息表中。

本申请提供的一种基于联盟链的SDK的失效转移机制实现方法,通过在基于区块链的SDK工具包设置了一个失效转移机制,以解决因SDK接口出现问题时对业务系统造成的影响的问题。通过设置的失效转移机制能够在接口失效的时候自动切换到同通道同权限的其他节点上,以实现业务系统的执行流程不中断。同时,该执行是SDK层自动切换,对业务系统而言是无感的。

附图说明

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

图1为本申请提供的一种基于联盟链的SDK的失效转移机制实现方法的流程示意图;

图2为本申请提供的失效转移机制的方法流程示意图;

图3为本申请提供的失效转移机制业务应用层调用SDK接口的激活流程示意图。

具体实施方式

下面将详细地对实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下实施例中描述的实施方式并不代表与本申请相一致的所有实施方式。仅是与权利要求书中所详述的、本申请的一些方面相一致的系统和方法的示例。

需要说明的是,本申请中对于术语的简要说明,仅是为了方便理解接下来描述的实施方式,而不是意图限定本申请的实施方式。除非另有说明,这些术语应当按照其普通和通常的含义理解。

本申请中说明书和权利要求书及上述附图的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖但不排他的包含,例如,包含了一系列组件的产品或设备不必限于清楚地列出所有组件,而是可包括没有清楚地列出的所有组件,而是可包括没有清楚地列出的或对于这些产品或设备固有的其他组件。

本申请公开了一种基于联盟链的SDK的失效转移机制实现方法,通过在基于区块链的SDK工具包设置了一个失效转移(fail-over)机制,以解决因SDK接口出现问题时对业务系统造成的影响的问题。通过设置的失效转移(fail-over)机制能够在接口失效的时候自动切换到同通道同权限的其他节点上,以实现业务系统的执行流程不中断。同时,该执行是SDK层自动切换,对业务系统而言是无感的。

本申请提供的一种基于联盟链的SDK的失效转移机制实现方法,参见图1,所述方法具体步骤包括:

S1,对基于联盟链的SDK进行初始化(init),通过数据库(sqlite)获取相关配置数据;S2,通过所述配置数据运行所述SDK,并监听来自业务系统的查询请求;S3,接收所述查询请求,通过业务应用层调用所述SDK接口,进行接口查询,并激活失效转移的机制流程;S4,记录调用所述SDK接口的时间,检测所述SDK接口链接稳定性的异常情况,具体包括:无异常情况,则对所述SDK接口进行正常的调用,获取所述SDK接口的调用结果;将所述调用结果返回至所述业务应用层,业务调用流程结束;有异常情况,则执行所述失效转移机制流程。

示例性的,联盟链区块链在当下发展非常迅速,基于底层的联盟链底层架构搭建的商业应用越来越多。因此,业务应用层需要在当前联盟中与其他的联盟节点进行业务数据交互需求时,在需要把数据接入到联盟链底层时,都需要使用到联盟链区块链底层提供的SDK接口,业务应用层需要通过SDK提供的接口,并调用这些接口实现应用层业务数据以实现各类业务数据的上链、查询等操作。

进一步地,基于联盟链的SDK(Software Development Kit,软件开发工具包)就是提供一系列API(Application Programming Interface,应用程序编程接口)服务的工具包,就是基于业务应用层与底层联盟链层之间的信息交互的接口工具,SDK提供给应用层业务系统调用底层联盟链区块链系统所需的接口。而这些接口一般由http(HyperTextTransfer Protocol,超文本传输协议)、https(Hypertext Transfer Protocol Secure,超文本传输安全协议)、RPC(Remote Procedure Call,远程过程调用协议)的形式提供。

特别地,本申请提供的一种基于联盟链的SDK的失效转移机制实现方法,是基于联盟链区块链底层架构,在SDK层实现的一个失效转移(fail-over)机制。由于区块链本身的分布式节点架构的特点,能够以经过组织授权后可以获取到该组织已授权通道中的其他节点的基础信息,然后利用组织授权的公私钥进行签名,进而为实现基于区块链的失效转移(fail-over)机制提供实现的技术基础。

示例性的,在基于联盟链区块链底层架构中,每个应用绑定一个SDK工具包,工具包将会在业务应用中以jar(程序包)包的方式进行引用,以提供给外部业务应用调用,其中SDK的fail-over所需的相关配置信息使用sqlite数据库引擎作为数据库存储设备。业务应用通过SDK提供的接口进行区块链信息查询,SDK通过https、http、RPC等方式与通道中的节点进行链接,并把业务应用发起的请求转发给节点,节点收到操作请求后,把处理好的数据通过SDK以json(JavaScript Object Notation,轻量级的数据交换格式)格式的响应方式进行数据返回。

需要说明的是,一个节点可以同时加入多个通道,所以本申请中的fail-over机制也支持不同通道中的节点自动切换,具体的节点数量不固定,依据各个通道中的节点数量而定。

在一些实施例中,参见图2,所述失效转移机制流程具体包括:

S11,通过所述数据库的节点信息表,提取可用的失效转移节点;S12,对所有可用的失效转移节点逐个轮询,切换所述失效转移节点;S13,对切换后的所述失效转移节点与所述SDK接口进行实例化节点链接,具体包括:实例化节点链接成功,则自动递归调用所述SDK接口函数,直至获取所述SDK接口调用的返回结果,业务调用流程结束;实例化节点链接失败,则对所述可用的失效转移节点,再次逐个轮询,切换所述失效转移节点与所述SDK接口进行实例化节点链接;S14,对所述失效转移节点全部轮询,实例化链接失败,则标记所述SDK接口的调用结果失败,并返回所述失败结果至所述业务应用层,业务调用流程结束。

示例性的,如图3所示,当业务应用层调用SDK接口时,如果发生调用接口超时、创建接口链接超时、捕获到异常中任意一个项目出现了异常,就会自动激活fail-over机制。具体的,从sqlite中的fail-over数据库节点信息表(peerinfo)中提取所有可用的fail-over节点,然后逐个轮询,切换fail-over节点。切换节点后,重新进行节点的链接初始化。如果链接成功,则递归调用当前SDK接口,重新从业务应用层调用SDK接口开始重新走流程。如果链接初始化失败,则从前述已经提取的fail-over节点列表中,轮询下一个节点,并重新进行链接初始化和递归调用的操作,直到所有fail-over节点列表调用完成为止。如果所有的fail-over节点列表都已经使用完,且没有链接成功的,则标记当前接口的调用结果为失败。返回失败的结果给业务应用层,接口调用结束。特别的,在本申请中,所有的SDK接口都会执行前述流程。

在一些实施例中,所述SDK接口链接稳定性的异常情况具体包括:调用接口超时、创建接口链接超时、捕获到异常。

在一些实施例中,所述调用接口超时,具体为:记录所述SDK接口中调用节点提供的h2、https接口前后的时间,获取调用时间差,所述调用时间差超过设定值则判断所述调用接口超时。

示例性的,在每个SDK接口中,调用节点提供的http、https等接口时,在调用前记录当前时间,在调用接口后记录时间,并用调用后的时间减去调用前的时间的时间差,以设定的间隔作为判断标准。在本申请中,超时时间限制为120000毫秒。

在一些实施例中,所述创建接口链接超时,具体为:将所述SDK接口与所述节点之间建立链接,获取链接时间,所述链接时间超过设定值则判断所述创建接口链接超时。

示例性的,SDK中与节点的链接本身会存在一个超时判断,这个是SDK层与节点之间建立链接时的超时时间,会在接口调用的时候返回。在本申请中,链接超时时间为20000毫秒。

在一些实施例中,所述捕获到异常,具体为:在调用所述节点的接口时,使用try{}catch{}捕获调用所述SDK接口的各类异常。

示例性的,在本申请中SDK会在调用节点的接口时,使用try{}catch{}捕获调用接口的各类异常。

需要说明的是,仅当上述调用接口超时、创建接口链接超时、捕获异常,所有条件都满足正常,无异常抛出时,才会进行正常的接口调用,并获取调用接口的结果。并返回所述结果,一个业务调用流程就结束了。进一步地,如果上述的任意一个项目出现了异常,就会自动激活fail-over机制。

在一些实施例中,所述对基于联盟链的SDK进行init初始化,支持两种初始化方式具体包括:在所述初始化init中输入默认配置参数进行初始化,并将所述默认配置参数写入所述sqlite数据库中;在所述初始化init中通过所述sqlite数据库直接读取相关配置参数进行初始化,并将所述相关配置参数写入所述sqlite数据库中。

示例性的,SDK在做init(初始化)时,支持两种初始化方式,第一种是在init中输入默认参数的方式进行初始化,此方式会把默认输入参数的设置写入sqlite(数据库)。第二种是init启动时不输入参数,而是从sqlite中直接读取相关的配置信息。需要说明的是,不管哪种方式启动,在运行过程中,最终都会把配置信息写入sqlite,并从sqlite中读取最新的配置信息。配置的信息主要是给一个默认的初始的联盟链节点信息,如IP、端口等基础信息,配置时支持至少配置一个或以上的节点信息。

进一步地,使用配置的参数运行成功后,SDK会进入监听状态,监听来自业务系统的查询请求。当有业务系统向SDK提出查询请求时,SDK首先会把请求数据入库归档。然后会调用内部接口跟peer(节点)进行查询。若能够正常执行查询操作,则把查询到的数据返回给业务系统。若出现链接超时、断链、等链接类型的异常时,会触发fail-over机制。fail-over机制被激活后,将暂停跟当前已出现异常的peer节点的链接查询操作。同时,fail-over机制被激活后,会主动把当前的异常peer节点链接断开,并从sqltie中读取当前通道下的其他有效节点,并依次进行链接尝试。当新的节点链接成功后,将业务请求历史记录数据库表中,提取最新的未完成的请求,并重新执行先前的查询操作。最后把查询到的内容返回给业务系统,并进行更新。

在一些实施例中,所述SDK初始化通过配置参数中提取初始的所述失效转移配置节点信息并进行配置解析,所述配置解析失败则SDK运行失败。

示例性的,初始化时,从配置文件中提取初始的fail-over配置节点信息,因为这个初始的节点信息同时也是SDK链接联盟链节点的信息,所以如果解析失败则SDK启动失败。否则,进入下一步。

进一步地,使用提取到的配置节点进行链接的初始化(本申请中主要指http协议链接),如果链接失败,则从sqlite数据库的peerinfo表中提取所有可用的节点,然后依次逐个轮询,轮询时使用新的peer节点信息进行实例初始化,如果还是失败,则继续提取下一个轮询的节点结果进行实例化链接,直到全部轮询为止。如果全部轮询结束了都没有成功实例化,则标记当前结果为失败。

在一些实施例中,所述实例化节点链接成功还将查询当前链接所述失效转移节点所在应用通道的所有合法可用的所述失效转移节点信息。

示例性的,如果实例化链接成功,则查询当前链接节点所在通道的所有合法可用的节点信息列表回来。如果当前节点同时加入了多个通道,那么查询到的节点会包含所有当前节点所在通道的所有节点

在一些实施例中,所述查询到的失效转移节点信息存储在所述数据库sqlite的失效转移的节点信息表中。

示例性的,在peerinfo表中,需要记录相关的组织公私钥数据源,以提供切换数据源时,用作签名、验签使用;一个节点可以同时加入不同的通道中,但是一个节点在一个通道中只能加入一个组织,因此在初始化节点的时候,需要设置默认的一个通道中的组织的公钥与私钥,否则将无法完成当前通道的签名(数据库中只能提取到组织的公钥和证书,没有私钥)。此外,如果还有其他的配置信息需要通过sqlite进行部署的,还需要额外补充其他的数据库表。结构详细解析如表1、表2所示:

表1

表2

进一步地,本申请提供的一种基于联盟链的SDK的失效转移机制实现方法,支持配置多个节点地址和信息,并且在与节点通信的时候,可以做到fail-over,即单个节点连接不成功的时候,可以自动切换至其他节点,并需要配套连接fail-over可做到提前探测。链接不成功包括:链接异常、链接超时、返回不可用、报错等情况。探测主要包括异常捕获处理、超时监控、返回结果分析,本申请中的fail-over机制在SDK初始化时,从默认的链接节点中去主动触发查询功能,即从默认的节点上查询节点当前所属的通道,并将位于该通道的所有有效节点,全部查询回来,存储备用;如果当前节点同时在多个通道中时,将会查询到多个通道中的所有合法可用的节点,并把这些节点信息存储到SDK的sqlite数据库中。本申请提供的fail-over机制可在SDK初始化时自动触发,并在使用过程中发生链接相关异常时自动激活、支持业务应用层主动调用触发。具体的,在SDK初始化时,使用默认的配置参数从通道中查询所有有效节点信息存储备用,同时建立默认的首条节点链接。当SDK执行某个查询接口时,如果发生断链、超时、异常等链接稳定性的异常时,SDK将自动断开当前节点链接,同时从sqlite的数据库表中peerinfo表中按照顺序逐个尝试切换到其他的节点进行链接,然后重复先前的查询,并把查询结果返回给业务应用层;同时,业务应用层在使用SDK过程中,支持业务应用层随时切换通道中的其他节点作为SDK链接点。而且这些操作对于业务应用层而言,是无感的,业务应用层并不需要关注SDK中的fail-over的执行过程,它只需要跟平时一样调用SDK提供的一个外部接口即可。

通过以上技术方案可以看出,本申请可以有效解决联盟链区块链网络中,业务系统调用某几个节点的SDK接口失效时,实现失效备援的效果。为了提高SDK的稳定性,解决当节点出于某些原因宕机或者SDK接口调用超载的情况下,SDK就会出现异常无法正常使用,导致业务系统的异常,从而引发业务系统的业务被迫中断,对业务的正常开展造成不必要损失的问题。基于区块链的SDK工具包需要一个fail-over机制,以解决因SDK接口出现问题时,对业务系统造成影响的问题。本申请提供的一种基于联盟链的SDK的fail-over机制实现方法,能够在接口失效时自动切换到其他节点上,以实现业务系统的执行流程不中断。同时,所述执行是SDK层自动切换,对业务系统而言是无感的,从而更加高效便捷。

本说明书中通篇提及的“多个实施例”、“一些实施例”、“一个实施例”或“实施例”等,意味着结合该实施例描述的具体特征,部件或特性包括在至少一个实施例中,因此,本说明书通篇出现的短语“在多个实施例中”、“在一些实施例中”、“在至少另一个实施例中”或“在实施例中”等,并不一定都指相同的实施例。此外,在一个或多个实施例中,具体特征、部件或特性可以任何合适的方式进行组合。因此,在无限制的情形下,结合一个实施例示出或描述的具体特征、部件或特性可全部或部分地与一个或多个其他实施例的特征、部件或特性进行组合。这种修改和变型旨在包括在本申请的范围之内。

本申请提供的实施例之间的相似部分相互参见即可,以上提供的具体实施方式只是本申请总的构思下的几个示例,并不构成本申请保护范围的限定。对于本领域的技术人员而言,在不付出创造性劳动的前提下依据本申请方案所扩展出的任何其他实施方式都属于本申请的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号