一种并行化事务执行器的使用方法转让专利

申请号 : CN201811486612.0

文献号 : CN109684050B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王学东陈永滔

申请人 : 成都佰纳瑞信息技术有限公司

摘要 :

本发明提供一种并行化事务执行器的使用方法,其能够将待执行或事务池按照一定策略进行分配,交由并行化执行器进行并行执行,以达到提升执行效率,提高区块链TPS的目的,其使用方法如下:S1:事务分组,事务池根据预置策略进行事务分组;S2:创建事务执行器,启动监视器进程和事务收集器,根据预置策略创建多个事务执行器,事务执行器抽取与事务执行器对应的事务组;S3:并行执行事务,多个事务执行器同时执行事务,并且接受监视器进程的巡检;S4:收集运行结果,事务收集器收集事务执行器的结果集,并且根据原始事务列表对结果集进行对应排序;S5:事务提取,当区块链需要对事务进行验证或者计算时,调用事务池中完成的结果。

权利要求 :

1.一种并行化事务执行器的使用方法,其特征在于,所述事务执行器将事务池安装预置策略进行分配,并将分配的事务组交由并行的事务执行器执行,所述使用方法包括如下步骤:S1:事务分组,所有新增事务由事务池进行统一管理,所述事务池根据预置策略进行事务分组,所述预置策略由配置指定或者二次开发接口指定;

S2:创建事务执行器,启动监视器进程和事务收集器,根据所述预置策略创建多个事务执行器,所述事务执行器抽取与所述事务执行器对应的事务组,然后由所述事务执行器执行对应事务;

S3:并行执行事务,多个所述事务执行器同时执行事务,并且所述事务执行器接受所述监视器进程的巡检,所述事务执行器中断或失败时,监视器重新启动一个新的执行器并继续执行未完成的工作;

S4:收集运行结果,所述事务收集器收集所述事务执行器的结果集,并且所述事务收集器根据原始事务列表对所述结果集进行对应排序;

S5:事务提取,当区块链需要对所述事务进行验证或者计算时,调用所述事务池中完成的结果,所述结果包括事务和结果集;

所述S3的具体操作步骤如下:

S31:所述事务执行器对所述事务组中的事务按顺序执行;

S32:所有所述事务执行器每隔一段时间T向所述监视器进程发送心跳包,所述心跳包包括当前资源使用情况和执行进度;

S33:所述监视器进程记录每一个心跳包;若下一个时刻T未收到所述事务执行器E1传来的心跳包,则所述监视器进行再次等待所述时间T,若2T时刻后依然未收到所述事务执行器E1的心跳包,则判定事务执行器E1接收失败,发送“重新发送”命令立即启动一个相同ID的新事务执行器E2,并向所述事务执行器E2发送E1最后一次心跳包内容继续执行;

所述S33的操作方法还包括:

S331:所述事务执行器E2启动后,若所述事务执行器E1恢复工作,所述监视器进程接收到所述事务执行器E1的心跳包时,所述监视器进程根据版本号的判定,向所述事务执行器E1发出“拒绝”命令,所述事务执行器在收到所述“拒绝”命令后清除所有工作并退出;

S332:若监视器进程失败,所述监视器进程每个时间T向主进程发送心跳包,由主进程代替或者读取、记录所述监视器进程工作;

若监视器进程失败,所述S332包括两种处理方式:①所述主进程代替所述监视器进程工作,并广播通知对应事务执行器的所述监视器进程变更,直至下一次人工恢复所述监视器进程或者系统重启;②所述主进程记录所述监视器进程工作,将所述监视器进每次收到的心跳包记录在缓存中,所述监视器进程向所述主进程报告在线状态,主进程直接读取或者使用所述缓存中的数据量;

所述②中的主进程在广播时,所述监视器进程恢复工作,其具体处理方法如下:所述事务执行器向所述监视器进程发送多个心跳包,构建多条心跳线。

2.根据权利要求1所述的并行化事务执行器的使用方法,其特征在于,所述S2的具体操作步骤如下:所有新增事务进入到自管理事务池中进行统一管理,事务池根据所述预置策略进行事务分组,所述事务池准备将所述事务提供给所述事务执行器,所述事务池包括原始事务池和自管理事务池。

3.根据权利要求2所述的并行化事务执行器的使用方法,其特征在于,所述自管理事务池作为所述原始事务池的镜像事务池,所述自管理事务池只负责并发执行时的事务管理工作。

4.根据权利要求1所述的并行化事务执行器的使用方法,其特征在于,所述S2的具体操作步骤如下:S21:同时启动一个所述监视器进程和一个事务收集器,所述监视器进程负责对所有所述事务执行器进行监控和健康检查,所述监视器进程的自身健康状况由主进程负责检查,所述事务收集器用于对所有事务组在执行完成后的收集工作,所述事务收集器包括原始事务的顺序索引;

S22:所述监视器进程根据所述事务池的分组情况,并发一定数量的事务执行器,并将所述事务执行器的ID和至少一个事务分组的ID绑定;

S23:所述事务执行器根据绑定的所述ID从所述事务池中抽取属于所述事务执行器的事务组,然后所述事务执行器准备执行所述事务组中的事务。

5.根据权利要求1所述的并行化事务执行器的使用方法,其特征在于,所述S4的具体操作步骤如下:S41:所述事务执行器在执行完自身所述事务组中的所有事务后向所述监视器进程和所述事务收集器发送完成信息,并将执行后的结果集发送至所述事务收集器;

S42:所述事务收集器收到所述结果集后根据原始数据的索引对所述结果集进行重排序,生成一个与原始事务集相同顺序的新结果集,所述新结果集发送给所述事务池;

S43:所述事务池接收到所述事务收集器发送的所述新结果集后,向所述监视器进程和所述事务收集器发送“结束”命令,关闭和销毁所述监视器进程和所述事务收集器,同时所述监视器进程关闭进程中的所有执行器。

6.根据权利要求1所述的并行化事务执行器的使用方法,其特征在于,所述S5中的区块链对所述事务进行验证或者计算时,所述事务接收区块链中的其他功能模块的调用,传递事务和执行后的结果集,与后续过程解耦。

说明书 :

一种并行化事务执行器的使用方法

技术领域

[0001] 本发明涉及区块链事务执行领域,具体而言,涉及一种并行化事务执行器的使用方法。

背景技术

[0002] 目前的区块链平台大部分采用的是单实例事务执行机制,即在给出的一个待执行事务列表或事务池中,由一个执行器依次对列表中的事务进行执行,得到一个最终的执行结果集合,该事务列表或事务池按照一定的规则生成,列表有序或列表无序,。
[0003] 但是在现有技术方案中,由于区块链平台的执行机制是单实例,所有事务为串行执行,在很大程度上会降低区块链的每秒事务处理量(以下简称TPS)。尤其是在公共区块链上更加明显,例如以太坊,比特币等,因为需要公共区块链网络的每个节点都执行,该事务列表已获得最终的确认。

发明内容

[0004] 本发明的目的在于提供一种并行化事务执行器的使用方法,其能够将待执行事务池按照一定策略进行分配,交由多实例执行器进行并行执行,以达到提升执行效率,提高区块链TPS的目的。
[0005] 本发明的实施例是这样实现的:
[0006] 一种并行化事务执行器的使用方法,事务执行器将事务池安装预置策略进行分配,并将分配的事务组交由并行的事务执行器执行,其使用方法包括如下步骤:
[0007] S1:事务分组,所有新增事务由事务池进行统一管理,事务池根据预置策略进行事务分组,预置策略由配置指定或者二次开发接口指定;
[0008] S2:创建事务执行器,启动监视器进程和事务收集器,根据预置策略创建多个事务执行器,事务执行器抽取与事务执行器对应的事务组,然后由事务执行器执行对应事务;
[0009] S3:并行执行事务,多个事务执行器同时执行事务,并且事务执行器接受监视器进程的巡检;
[0010] S4:收集运行结果,事务收集器收集事务执行器的结果集,并且事务收集器根据原始事务列表对结果集进行对应排序;
[0011] S5:事务提取,当区块链需要对事务进行验证或者计算时,调用事务池中完成的结果,结果包括事务和结果集。
[0012] 在本发明的较佳实施例中,上述S2的具体操作步骤如下:所有新增事务进入到自管理事务池中进行统一管理,事务池根据预置策略进行事务分组,事务池准备将事务提供给事务执行器,事务池包括原始事务池和自管理事务池。
[0013] 在本发明的较佳实施例中,上述自管理事务池作为原始事务池的镜像事务池,自管理事务池只负责并发执行时的事务管理工作。
[0014] 在本发明的较佳实施例中,上述S2的具体操作步骤如下:
[0015] S21:同时启动一个监视器进程和一个事务收集器,监视器进程负责对所有事务执行器进行监控和健康检查,监视器进程的自身健康状况由主进程负责检查,事务收集器用于对所有事务组在执行完成后的收集工作,事务收集器包括原始事务的顺序索引;
[0016] S22:监视器进程根据事务池的分组情况,并发一定数量的事务执行器,并将事务执行器的ID和至少一个事务分组的ID绑定;
[0017] S23:事务执行器根据绑定的ID从事务池中抽取属于事务执行器的事务组,然后事务执行器准备执行事务组中的事务。
[0018] 在本发明的较佳实施例中,上述S3的具体操作步骤如下:
[0019] S31:事务执行器对事务组中的事务按顺序执行;
[0020] S32:所有事务执行器每隔一段时间T向监视器进程发送心跳包,心跳包包括当前资源使用情况和执行进度;
[0021] S33:监视器进程记录每一个心跳包;若下一个时刻T未收到事务执行器E1传来的心跳包,则监视器进行再次等待时间T,若2T时刻后依然未收到事务执行器E1的心跳包,则判定事务执行器E1接收失败,发送“重新发送”命令立即启动一个相同ID的新事务执行器E2,并向事务执行器E2发送E1最后一次心跳包内容继续执行。
[0022] 在本发明的较佳实施例中,上述S33的操作方法还包括:
[0023] S331:事务执行器E2启动后,若事务执行器E1恢复工作,监视器进程接收到事务执行器E1的心跳包时,监视器进程根据版本号的判定,向事务执行器E1发出“拒绝”命令,事务执行器在收到“拒绝”命令后清除所有工作并退出;
[0024] S332:若监视器进程失败,监视器进程每个时间T向主进程发送心跳包,由主进程代替或者读取、记录监视器进程工作。
[0025] 在本发明的较佳实施例中,上述若监视器进程失败,S332包括两种处理方式:①主进程代替监视器进程工作,并广播通知对应事务执行器的监视器进程变更,直至下一次人工恢复监视器进程或者系统重启;②主进程记录监视器进程工作,将监视器进每次收到的心跳包记录在缓存中,监视器进程向主进程报告在线状态,主进程直接读取或者使用缓存中的数据量。
[0026] 在本发明的较佳实施例中,上述②中的主进程在广播时,监视器进程恢复工作,其具体处理方法如下:事务执行器向监视器进程发送多个心跳包,构建多条心跳线。
[0027] 在本发明的较佳实施例中,上述S4的具体操作步骤如下:
[0028] S41:事务执行器在执行完自身事务组中的所有事务后向监视器进程和事务收集器发送完成信息,并将执行后的结果集发送至事务收集器;
[0029] S42:事务收集器收到结果集后根据原始数据的索引对结果集进行重排序,生成一个与原始事务集相同顺序的新结果集,新结果集发送给事务池;
[0030] S43:事务池接收到事务收集器发送的新结果集后,向监视器进程和事务收集器发送“结束”命令,关闭和销毁监视器进程和事务收集器,同时监视器进程关闭进程中的所有执行器。
[0031] 在本发明的较佳实施例中,上述S5中的区块链对事务进行验证或者计算时,事务接收区块链中的其他功能模块的调用,传递事务和执行后的结果集,与后续过程解耦。
[0032] 本发明实施例的有益效果是:本发明中的预置策略可以根据业务需求自定义,满足不断复杂的业务需求;采用并行执行事务,在事务执行器中断或失败时,监视器可以重新启动一个新的执行器并继续执行未完成的工作;在收集运行结果时,在事务收集器中进行的重排序确保与原始事务列表执行结果的一致性;本发明将执行过程分离开来,并不影响区块链后续的操作和计算,这样既保证了后续过程和计算的正确性,又在最大程度减小了对原有区块链体系的改造成本。

附图说明

[0033] 为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
[0034] 图1为本发明实施例的事务池状态机示意图;
[0035] 图2为本发明实施例在执行阶段的示意图;
[0036] 图3为本发明实施例在事务收集阶段的示意图。

具体实施方式

[0037] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
[0038] 因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0039] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
[0040] 第一实施例
[0041] 本发明的目的在于实现一种并行化事务执行器的使用方法,将待执行事务列表或事务池按照一定策略进行分配,交由多实例执行器进行并行执行,以达到提升执行效率,提高区块链TPS的目的。
[0042] 系统内部自维护一套状态机,通过转换函数,对系统运行中的事务进行处理,当一个条件被满足时,将会触发一个动作,动作执行完毕后,可以迁移到新的状态,可以保持原有的状态,但动作并不是必须的,当条件满足后,也可以不执行动作,直接迁移到新状态。事务池的状态机示意图见图1。
[0043] 本实施例可作为当前主流的区块链平台,如比特币、以太坊、超级账本等的插件或依赖形式存在,同时提供二次开发接口,可进行事务池分组的自定义配置。主要分为5个阶段来实现:
[0044] S1:自管理事务池事务分组(以下简称Tx Pool):
[0045] S11:所有新增的事务都会进入该池进行统一的管理,事务池将会根据预置策略进行事务分组,预置策略由配置指定或二次开发接口指定,准备提供给事务执行器。在某些场景下,可以同时存在原始的事务池和自管理事务池。自管理事务池可以作为原始事务池的镜像存在,即自管理事务池只负责并发执行时的事务管理工作,之后仍交由原始事务池处理,这样做可以大幅度减少存量系统的改造成本。在分组工作完成后,事务池状态跃迁为“GROUPED”。
[0046] S2:创建事务执行器,从事务池中提取事务组(以下简称Tx Group):
[0047] S21:启动一个监视器进程(以下简称TE Watcher),负责对所有的事务执行器进行监控和健康检查,监视器自身的健康状况由主进程负责检查。同时启动一个事务收集器(以下简称Tx Collector)用于对所有事务组在执行完成后的收集工作,该事务收集器持有事务池中原始事务(即未分组前)的顺序索引。
[0048] S22:TE Watcher根据事务池的分组情况,启动、并发一定数量的事务执行器(以下简称Tx Executor),并将执行器ID与事务分组ID绑定。值得注意的是,事务执行器的数量可以和事务分组的数量不相等,即一个事务执行器可以执行多个事务分组,但一个事务分组只能被一个事务执行器执行。在TE Watcher和Tx Executor准备完成后,事务池状态跃迁为“SCHEDULED”;
[0049] S23:每个执行器根据绑定的ID从事务池中抽取属于该执行器的事务组,准备执行事务组中的事务。当抽取工作准备完成后,事务池状态跃迁为“READY”;
[0050] S3:并发执行事务组,参与监控与健康检查,执行阶段示意图见图2:
[0051] S31:步骤2中创建的执行器,对从事务池中获得的事务组所包含的事务进行顺序执行。
[0052] S32:所有执行器每隔一段时间T,该时间T由可配置策略制定,并向TE Watcher发送心跳包,心跳包中主要包含当前资源使用情况和执行进度等信息。
[0053] S33:TE Watcher记录每一个心跳包,如果在下一个时刻T未收到执行器E1传来的心跳包,则尝试再次等待时间T。如果在2T时刻后仍然未收到E1的心跳包,则判定E1失败,并发送RENEW命令立即启动一个相同ID的新执行器E2(E1和E2由版本号区分),并向E2发送E1最后一次心跳包内容继续执行。
[0054] S331:在E2启动后,E1可能恢复工作,例如线程或进程被操作系统恢复。当E1再次向TE Watcher发送心跳包时,TE Watcher根据版本号的判定,向E1发送DEPRECATED命令,E1收到该命令后清除所有工作并退出。
[0055] S332:由于TE Watcher自身也有可能失败,因此TE Watcher每隔时间T1向主进程发送心跳包,该心跳包包含所有执行器当前最新的心跳记录。当TE Watcher失败时,则由主进程代替其工作并广播WT_CHANGE事件通知执行器TE Watcher变更,该状态直至下一次人工恢复TE Watcher或系统重启。注意,此处提供另一种方式——心跳包缓存模式,将TE Watcher每次收到的心跳包记录在缓存中,这样TE Watcher只需要每次向主进程报告在线状态即可。当TE Watcher失败时,主进程只需要直接读取或使用缓存中的最新心跳记录即可。这种方式可以有效的缩小每次传输的数据量(进程间通信)。所有事务执行完成后系事务池态跃迁为“TX_COMPLATED”。在这样的场景下,由于网络延迟等原因,TE Watcher可能恢复工作,且WT_CHANGE可能传播不及时,会导致一部分Tx Executor并未接收到WT_CHANGE事件,从而继续向原来的TE Watcher发送心跳包,此时系统就很可能会产生混乱,这种现象我们称之为“脑裂”。为了降低“脑裂”的发生该概率,我们的方案是使用多条心跳线的方式。一条心跳线断开,其他的仍然能够接收心跳报告,能保证集群服务正常运行。所有心跳线路同时断开的可能性比1条心跳线路断开的小得多。再有,心跳线路之间也可以HA(高可用性集群,High Available),这些条心跳线路之间也可以互相检测,若一条断开,则另一条马上起作用。正常情况下可以处于休眠模式,节约资源。
[0056] S4:收集运行结果,事务收集阶段示意图见图3:
[0057] S41:事务执行器在执行完自身事务组中所有事务后发送COMPLATED消息至TE Watcher和Tx Collector,并将执行后的结果集发送给Tx Collector。
[0058] S42:Tx Collector在接收到所有事务组的结果集后根据持有的原始数据索引对结果集进行重排序,最终生成一个与原始事务集相同顺序的结果集,并将结果集通过COLL_ORDERED消息发送给事务池。
[0059] S43:事务池接收到Tx Colletor发送的结果集后向TE Watcher和Tx Collector发送TERMINATE命令对其进行关闭和销毁,同时由TE Watcher关闭所有执行器。收集工作完成后,事务池状态跃迁为“COLLECTED”。
[0060] S5:事务提取:当区块链需要对事务进行验证或计算、挖矿的时候,将从事务池中获取执行完成的事务和结果集等信息。
[0061] 综上所述,本发明与现有技术和模式相比,最主要有如下优点1、可配置策略:支持对分组策略的自定义配置。对于高级用户,可以通过自定义代码对最终的分组状况进行深度定制,以满足不断复杂的业务需求;
[0062] 2、容错性:当事务执行器中断或失败时,监视器可以重新启动一个新的执行器并继续执行未完成的工作。同理,监视器本身与主进程间互为备份;
[0063] 3、最终一致性:为了不影响区块链原始结果,虽然在事务执行时的顺序与原始顺序不同,但是在收集器中进行的重排序确保了与原始事务列表执行结果的一致性,虽然重排序会带来额外的时间开销,但是与最终的TPS收益对比,该开销是值得的;
[0064] 4、后续过程无关性:本发明只是将执行过程分离开来,并不影响区块链后续的操作和计算,因为最终一致性,这样既保证了后续过程和计算的正确性,又在最大程度减小了对原有区块链体系的改造成本,即仅对执行阶段进行插件式改造。
[0065] 本说明书描述了本发明的实施例的示例,并不意味着这些实施例说明并描述了本发明的所有可能形式。应理解,说明书中的实施例可以多种替代形式实施。附图无需按比例绘制;可放大或缩小一些特征以显示特定部件的细节。公开的具体结构和功能细节不应当作限定解释,仅仅是教导本领域技术人员以多种形式实施本发明的代表性基础。本领域内的技术人员应理解,参考任一附图说明和描述的多个特征可以与一个或多个其它附图中说明的特征组合以形成未明确说明或描述的实施例。说明的组合特征提供用于典型应用的代表实施例。然而,与本发明的教导一致的特征的多种组合和变型可以根据需要用于特定应用或实施。
[0066] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。