首页> 中国专利> 一种系统批量任务分段并行及动态调度方法及存储介质

一种系统批量任务分段并行及动态调度方法及存储介质

摘要

本发明公开了一种系统批量任务分段并行及动态调度方法及存储介质,本系统批量任务分段并行及动态调度方法基于oracle存储过程实施,本发明方法包括在批量任务调度系统发起批量处理指令后,自动根据所有需要处理的批量任务,分析每一个批量任务的数据量以及任务之间的依赖关系,自动根据每一个批量任务的分段配置将每一个批量任务分为多段,并且按照依赖关系对批量任务做排序,根据每一分段创建oracle的异步处理job,由异步处理job去处理每一个分段的批量任务。同时,批量性能监控程序实时监控批处理中,系统资源的使用情况,根据当前资源的使用率(例如CPU,内存,IO等),动态调整后续批处理任务的分段数量。从而提高银行业务系统批量任务效率,减少批量任务执行时间。

著录项

  • 公开/公告号CN113807710A

    专利类型发明专利

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

    原文格式PDF

  • 申请/专利权人 四川新网银行股份有限公司;

    申请/专利号CN202111107163.6

  • 发明设计人 刘强;钱思先;杨强;倪振心;

    申请日2021-09-22

  • 分类号G06Q10/06(20120101);G06Q40/02(20120101);G06F16/242(20190101);G06F16/23(20190101);

  • 代理机构51214 成都九鼎天元知识产权代理有限公司;

  • 代理人陈法君

  • 地址 641400 四川省成都市高新区吉泰三路8号

  • 入库时间 2023-06-19 13:45:04

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-01-04

    实质审查的生效 IPC(主分类):G06Q10/06 专利申请号:2021111071636 申请日:20210922

    实质审查的生效

说明书

技术领域

本发明属于基于oracle存储过程开发的银行系统领域中,尤其涉及一种系统批量任务分段并行及动态调度方法及存储介质。

背景技术

随着互联网金融发展,传统的基于存储过程实现的银行业务系统的数据量越来越大,大部分基于存储过程技术栈开发的银行业务系统目前都是单一的处理线程处理批量任务,单一线程的方式造成已经无法满足现在大数据量的处理,效率极低。

而目前未发现有基于存储过程去实现批量任务分段并行、动态调度相关的技术。为了解决该技术痛点,亟需一种系统批量任务分段并行及动态调度方法,能够将批量任务并行处理,动态调度,实现批量处理任务间多任务并行处理,批量处理任务内多段并行处理,提高银行业务系统批量任务效率。

发明内容

本发明的目的在于,为克服现有技术缺陷,提供了一种系统批量任务分段并行及动态调度方法,实现银行业务系统批量任务分段并行,根据可用资源量动态调整分段,从而提高银行业务系统批量任务效率,减少批量任务执行时间。

本发明目的通过下述技术方案来实现:

一种系统批量任务分段并行及动态调度方法,本系统批量任务分段并行及动态调度方法基于oracle存储过程实施,所示系统批量任务分段并行及动态调度方法包括:S1:发起批量处理指令至系统的批量调度器;S2:所述批量调度器基于批量处理指令筛选准备本次待处理的批量任务,并启动系统的批量监控器实时检测批量任务执行处理期间,系统资源的使用情况;S3:批量调度器调起分段器,分段器基于待处理的批量任务所需处理的数据以及各个任务的分段参数将各个任务进行分段;S4:批量调度器查询已经分段好的未处理的分段任务,并基于任务间的逻辑关系,将当前可执行的分段任务筛选出来,逐一创建异步工作任务处理每一个分段任务;S5:批量调度器轮询到当前是否存在待处理或者处理异常的批量任务,若存在未处理或者处理失败的批量任务,则新发起异步工作任务处理每一个分段任务;S6:待处理的各批量分段任务均已成功处理完成后,批量任务完成。

根据一个优选的实施方式,所示系统批量任务分段并行及动态调度方法还包括:批量监控器实时检测系统资源步骤;

根据检测结果,判断当前系统资源使用率是否超过上限阈值,以完成对后续批量任务的分段任务数的调节。

根据一个优选的实施方式,批量监控器实时检测系统资源步骤中,批量监控器判断当前系统资源使用率超过上限阈值时,则将后续批量任务的分段任务数调低。

根据一个优选的实施方式,批量监控器实时检测系统资源步骤中,批量监控器判断当前系统资源使用率未到达最优阈值,则将后续批量任务的分段任务数调高。

根据一个优选的实施方式,步骤S3具体包括:S31:分段器扫描需要处理的批量任务,根据每一个批量任务,查找分段配置,确认分段依据字段以及初始化分段参数;S32:分段器根据分段依据,统计每个批量任务需处理的数据总量,再基于初始化分段参数配置,确认每段处理的数据量;S33:分段器根据批量任务每段处理的数据量以及数据总量,确认批量任务分段依据字段每个分段的起始值以及终止值,记录分段任务表中。

根据一个优选的实施方式,步骤S5中,批量调度器轮询终止条件为需要处理的所有批量分段任务均已成功处理完成。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前述的系统批量任务分段并行及动态调度方法。

前述本发明主方案及其各进一步选择方案可以自由组合以形成多个方案,均为本发明可采用并要求保护的方案。本领域技术人员在了解本发明方案后根据现有技术和公知常识可明了有多种组合,均为本发明所要保护的技术方案,在此不做穷举。

本发明的有益效果:

本发明主要用于基于Oracle存储过程开发的银行业务系统,用于解决银行业务系统批量处理任务效率问题,实现批量处理任务间多任务并行处理,批量处理任务内多段并行处理。

在批量任务调度系统发起批量处理指令后,自动根据所有需要处理的批量任务,分析每一个批量任务的数据量以及任务之间的依赖关系,自动根据每一个批量任务的分段配置将每一个批量任务分为多段,并且按照依赖关系对批量任务做排序,根据每一分段创建oracle的异步处理job,由异步处理job去处理每一个分段的批量任务。

同时,批量性能监控程序实时监控批处理中,系统资源的使用情况,根据当前资源的使用率(例如CPU,内存,IO等),动态调整后续批处理任务的分段数量。

从而,通过本发明的系统批量任务分段并行及动态调度方法,实现了银行业务系统批量任务分段并行,根据可用资源量动态调整分段,从而提高银行业务系统批量任务效率,减少批量任务执行时间。

附图说明

图1是本发明方法的流程示意图;

图2是本发明方法中分段任务示意图;

图3是本发明方法中批处理依赖关系示意图。

具体实施方式

以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。

需要说明的是,为使本发明实施例的目的、技术方案和优点更加清楚,下面对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。

本发明公开了一种系统批量任务分段并行及动态调度方法,本系统批量任务分段并行及动态调度方法基于oracle存储过程实施。

本发明中多任务并行是利用oracle创建异步任务机制,即基于已将批处理任务分段完成的基础上,扫描分段任务表,使用dbms_job.submit方法给每一个分段任务过程的数据处理创建异步处理Job,异步处理job在此主创建流程中只做创建动作,异步job的执行是另起进程(类似于Java的新开启线程),并不占用主创建流程的时间,从而可以实现快速将所有分段任务调起,异步执行,达到多任务并行的目的。

参考图1所示,本发明所述系统批量任务分段并行及动态调度方法包括:

步骤S1:批量任务调度系统发起批量处理指令至银行业务系统批量调度器dispatcher。

步骤S2:dispatcher根据指令筛选准备本次批量任务需要处理的批量任务(任务1,任务2,任务3……),同时启动业务系统批量监控器monitor,实时检测批量任务执行期间,系统资源使用情况。

步骤S3:dispatcher调起分段器segmenter,segmenter根据需要处理的批量任务以及各个任务的分段参数将各个任务进行分段,详细分段过程如分段任务示意图2所示。

步骤S3具体包括:

S3.1:segmenter扫描所有需要处理的批量任务,逐个根据每一个批量任务查找分段配置表batch_split_config,确认每一个批量任务的分段依据字段split_key、初始化分段参数split_number以及分段总量查询SQL。

S3.2:segmenter根据分段配置,执行分段总量查询SQL统计每个批量任务需处理的数据总量sum,再根据初始化分段参数配置split_number,确认每个分段处理的数据量split_count,即split_count等于sum/split_number取进一法的值。

S3.3:segmenter根据批量任务每段处理的数据量split_count、数据总量sum以及分段依据字段split_key,确认批量任务分段依据字段每个分段的起始值以及终止值(例如账户表sum为100,split_key为account_no,初始化分段参数split_number为30,那么,该批量过程分为4段子任务,第1段account_no起始以及终止值为1~30,第2段account_no起始以及终止值为31~60,第3段account_no起始以及终止值为61~90,第4段account_no起始以及终止值为91~100),记录分段子任务表中。

步骤S4:dispatcher全量扫描分段子任务表(子任务1.1,子任务1.2,子任务2.1,子任务2.2……),并综合任务间的依赖关系(例如如图3所示,任务1依赖于任务2、任务3,所以任务1必须晚于任务2、任务3执行,任务2依赖于任务4、任务5,所以任务2必须晚于任务4、任务5执行),查找无依赖父任务或依赖任务已经处理成功的批量任务的分段子任务,逐一创建异步job任务处理每一个分段任务,异步job执行结果更新到分段子任务表中。

步骤S5:dispatcher轮询到当前是否存在待处理或者处理异常的批量任务,轮询终止条件为需要处理的所有批量分段任务均已成功处理完成,如果存在未处理或者处理失败的批量分段子任务,则新发起异步job任务理每一个分段子任务。

步骤S6:待处理的各批量分段任务均已成功处理完成后,批量任务完成。

以及,批量监控器实时检测系统资源步骤。monitor存在于批量任务整个周期中,实时检测系统资源,根据检测结果,判断当前系统资源使用率是否超过上限阈值,如果超过上限阈值(例如:cpu使用率80%),则根据分段配置中的分段调整步数adjust_step(即每次调整调增或者调减的分段数)将后续批量任务的分段任务数调低。如果未到达最优阈值(例如:cpu使用率70%),则锁定分段子任务表(防止dispatcher误判为无待处理任务),根据分段配置中的分段调整步数将后续批量任务的分段任务数调高,以提高批处理效率。

本发明主要用于基于Oracle存储过程开发的银行业务系统,用于解决银行业务系统每天日终批量处理任务效率问题,实现批量处理任务间多任务并行处理,批量处理任务内多段并行处理。

在批量任务调度系统发起批量处理指令后,自动根据所有需要处理的批量任务,分析每一个批量任务的数据量以及任务之间的依赖关系,自动根据每一个批量任务的分段配置将每一个批量任务分为多段,并且按照依赖关系对批量任务做排序,根据每一分段创建oracle的异步处理job,由异步处理job去处理每一个分段的批量任务。

同时,批量性能监控程序实时监控批处理中,系统资源的使用情况,根据当前资源的使用率(例如CPU,内存,IO等),动态调整后续批处理任务的分段数量。

从而,通过本发明的系统批量任务分段并行及动态调度方法,实现了银行业务系统日终批量任务分段并行,根据可用资源量动态调整分段,从而提高银行业务系统批量任务效率,减少批量任务执行时间。

在本发明中还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的系统批量任务分段并行及动态调度方法。

实施例1

场景:某银行业务银行系统日终批量处理包含3个批处理任务:

任务1:账户余额更新。对应分段配置为:分段依据字段为账号(account_no),初始化分段参数4,分段调整步数(adjust_step)为2,分段总量查询SQL为select count(account_no)from account_list。

任务2:客户余额更新。分段依据字段为客户号(customer_no),初始化分段参数3,分段调整步数(adjust_step)为2,分段总量查询SQL为select count(customer_no)fromcustomer_list。

任务3:账务流水核算。分段依据字段为交易序号(tran_no),初始化分段参数5,分段调整步数(adjust_step)为2,分段总量查询SQL为select count(customer_no)fromcustomer_list。

其中,任务2依赖于任务1的余额更新完成,任务3对其他任务无依赖关系。

该银行账户数量有1万户,账号(account_no)从AC000001到AC100000依次增加。客户数量为5万户,客户号(customer_no)从CN00001到CN50000依次增加,账务流水数量为35万笔,交易序号(tran_no)从TN000001到TN350000依次增加。

批量处理步骤:

S1:批量任务调度系统发起批量处理指令startBatch_20210901至业务系统批量调度器dispatcher。

S2:dispatcher根据指令筛选准备本次批量任务需要处理的批量任务,任务1,任务2以及任务3,同时启动业务系统批量监控器monitor,实时检测批量任务执行期间,系统资源使用情况。

S3:dispatcher调起分段器segmenter给每一个批量任务进行分段处理,根据每一个批量任务的分段参数配置,最终确认分段如下:

任务1:根据分段总量查询SQL查询出账户余额更新批量任务的待处理数据量sum为1万,初始化分段参数为4,那么依据分段初始化参数,需要将该批量任务分为4段,批量任务每段需处理数据量为100000/4=2500,即:

子任务1.1:负责账号从AC00001到AC25000之间账户的余额更新。

子任务1.2:负责账号从AC25001到AC50000之间账户的余额更新。

子任务1.3:负责账号从AC50001到AC75000之间账户的余额更新。

子任务1.4:负责账号从AC75001到AC10000之间账户的余额更新。

任务2:根据分段总量查询SQL查询出客户余额更新批量任务的待处理数据量sum为5万,初始化分段参数为3,那么依据分段初始化参数,需要将该批量任务分为3段,批量任务每段需处理数据量为50000/4=16666.67,即16667,即:

子任务2.1:负责客户号从CN00001到CN16667之间客户的余额更新。

子任务2.2:负责客户号从CN16668到CN33335之间客户的余额更新。

子任务2.3:负责客户号从CN33336到CN50000之间客户的余额更新。

任务3:根据分段总量查询SQL查询出账务流水核算批量任务的待处理数据量sum为35万,初始化分段参数为5,那么依据分段初始化参数,需要将该批量任务分为5段,批量任务每段需处理数据量为350000/5=70000,即:

子任务3.1:负责交易序号从TN00001到TN70000之间账务流水核算。

子任务3.2:负责交易序号从TN70001到TN140000之间账务流水核算。

子任务3.3:负责交易序号从TN140001到TN210000之间账务流水核算。

子任务3.4:负责交易序号从TN210001到TN280000之间账务流水核算。

子任务3.5:负责交易序号从TN280001到TN350000之间账务流水核算。

将以上分段完成的子任务信息记录在分段子任务表中。

S4:dispatcher全量扫描分段子任务表,扫描待处理且其依赖的父任务已经处理完成的子任务,创建异步job。dispatcher扫描时,发现子任务1的4个子任务1.1–1.4未处理且无依赖,则直接给子任务1.1–1.4分别创建4个异步处理job。子任务2.1–2.3未处理,但是依赖任务1的执行完成,发现目前任务1未执行完成,则此次扫描不处理任务2。继续向下扫描至任务3,发现任务3的子任务3.1–3.5未执行且无依赖,则直接给子任务3.1–3.5分别创建4个异步处理job。此时,给任务1以及任务3的子任务创建的异步处理job创建完成后,异步处理job已经在处理各自分段的数据了,处理完成后,更新分段子任务表中子任务的状态。

S6:dispatcher全量扫描分段子任务表发现已无待处理的任务以及失败的任务了,那么,整个批量就处理完成了。

以及批量监控器实时检测系统资源步骤。mointor一直在监控批量处理的资源使用情况,如果此时发现,系统资源的使用情况未达到最优阈值(cpu使用率达到70%,内存使用率达到70%),扫描分段子任务表中未处理的任务,将任务提出来,根据该任务分段配置中的分段调整步数adjust_step,做一次分段数调整,重新分段。在执行任务1以及任务3的异步过程时,Monitor发现此时系统资源使用率如下:cpu 50%,内存:60%,并未达到最优阈值。此时,Monitor扫描分段子任务表发现任务2的所有子任务均为处理,此时,Monitor则锁定分段子任务表(防止dispatcher误判为无待处理任务),然后重新按照步骤S3做分段,此时分段参数调整为5,分为5个子任务处理分段数据。步骤S3分段完成后,交由S4创建异步处理过程处理分段数据。

前述本发明基本例及其各进一步选择例可以自由组合以形成多个实施例,均为本发明可采用并要求保护的实施例。本发明方案中,各选择例,与其他任何基本例和选择例都可以进行任意组合。本领域技术人员可知有众多组合。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号