一种实时任务调度控制方法、系统、设备及可读存储介质与流程

文档序号:21361579发布日期:2020-07-04 04:35阅读:164来源:国知局
一种实时任务调度控制方法、系统、设备及可读存储介质与流程

本申请涉及金融科技技术领域,尤其涉及一种实时任务调度控制方法、系统、设备及可读存储介质。



背景技术:

本部分旨在为权利要求书中陈述的本申请实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。

随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,越来越多的技术应用于金融行业,但由于金融行业的安全性及实时性要求,也对技术提出的更高的要求。目前,采用多台计算机组成一个分布式服务系统可以为用户提供比传统的集中式系统更好的服务,特别是可以克服主机资源紧张和响应瓶颈的缺陷,更好地实现任务的分配与优化。可实现调用、监听服务、提供远程通信与信息交换的分布式系统很多,如阿里巴巴旗下开源的分布式服务框架dubbo、开源软件apachehadoop的分布式服务框架协调组件zookeeper等,采用的框架均是java版本的。

在多台相同的服务器需要执行一系列的任务方法时,这些方法往往作为生产者的身份而存在,这些生产者产生最新数据写入缓存服务器或消息队列,以供后续消费者进行消费。而往往在实际应用的过程中,由于生产者生产数据逻辑往往较为单一,导致这些生产者产生数据的速率往往会超过消费者消费的速率,为了使消费者端不至于过载,通常会使用限流方案。



技术实现要素:

本申请实施例提供一种实时任务调度控制方法、系统、设备及可读存储介质,旨在解决现有技术中动态调整每台服务器的执行频率时效率低,且网络开销大的问题,

第一方面,本申请实施例提供了一种实时任务调度控制方法,包括:

实时任务调度系统接收任务请求,所述任务请求携带key值;

根据所述key值判断是否需要配置限流阈值,若不需要,则将所述任务请求递交至该任务至实时任务执行控制器,以执行所述任务请求对应任务;若需要,则判断是否已经初始化key值;

若尚未初始化key值,则进行key值初始化后将所述任务请求递交至所述实时任务执行控制器;若已经初始化key值,则获取所述key值的当前限流数;

将限流数加一之后,判断是否达到限流阈值,若达到,限流数减一,将所述任务请求递交至实时任务等待队列中;若未达到,则将所述任务请求递交至所述实时任务执行控制器。

可选地,所述判断是否已经初始化key值,包括:

若所述任务请求是针对单服务器,则使用单例模式进行map属性设置,并判断是否已经初始化key值;

若所述任务请求是针对集群服务器,则使用分布式缓存中间件进行map属性设置,并判断是否已经初始化key值。

可选地,若所述任务请求是针对单服务器,key值为数据库编号。

可选地,若所述任务请求是针对集群服务器,key值为数据库编号或者数据库编号和篮子号的组合。

可选地,在将所述任务请求递交至该任务至实时任务执行控制器之后,所述方法还包括:

在所述实时任务执行控制器执行完所述任务之后,限流数减一。

可选地,将所述任务请求递交至该任务至实时任务执行控制器,包括:

根据所述任务请求生成任务实体,将所述任务实体递交至所述实时任务执行控制器。

可选地,所述根据所述任务请求生成任务实体,包括:

根据所述任务请求获取任务类属性、实时任务调度器的状态信息和调用接口信息;

根据所述任务请求、任务类属性、实时任务调度器的状态信息和调用接口信息生成任务实体。

可选地,将所述任务请求递交至实时任务等待队列中,包括:

所述实时任务等待队列中的任务均为等待处理的状态,直至实时任务触发控制器对所述实时任务对应的任务实体进行处理。

可选地,将所述任务请求递交至实时任务等待队列中之后,所述方法包括:

实时任务被触发时,所述实时任务触发控制器根据从所述任务实例中获取的模板作业控制流文件制作出实际作用控制流文件;

所述实时任务触发控制器根据所述实际作业控制流文件组装出起始控制作业,递交至所述实时任务执行器运行。

第二方面,本申请实施例还提供一种实时任务调度控制系统,所述系统包括:

消息接收模块,用于接收任务请求,所述任务请求携带key值;

限流阈值配置模块,用于根据所述key值判断是否需要配置限流阈值,若不需要,则将所述任务请求递交所述实时任务执行控制器,以执行所述任务请求对应任务;若需要,则使用初始化key值模块;

所述初始化key值模块,用于判断是否已经初始化key值;若尚未初始化key值,则进行key值初始化后将所述任务请求递交至所述实时任务执行控制器;若已经初始化key值,则获取所述key值的当前限流数,将限流数加一之后,使用限流阈值判断模块;

所述限流阈值判断模块,用于判断是否达到限流阈值,若达到,限流数减一,将所述任务请求递交至实时任务等待队列中;若未达到,则将所述任务请求递交至该任务至实时任务执行控制器。

可选地,所述初始化key值模块,具体用于:

若所述任务请求是针对单服务器,则使用单例模式进行map属性设置,并判断是否已经初始化key值;

若所述任务请求是针对集群服务器,则使用分布式缓存中间件进行map属性设置,并判断是否已经初始化key值。

可选地,若所述任务请求是针对单服务器,key值为数据库编号。

可选地,若所述任务请求是针对集群服务器,key值为数据库编号或者数据库编号和篮子号的组合。

可选地,在将所述任务请求递交至该任务至实时任务执行控制器之后,所述所述限流阈值判断模块还用于:

在所述实时任务执行控制器执行完所述任务之后,限流数减一。

可选地,将所述任务请求递交至该任务至实时任务执行控制器,包括:

根据所述任务请求生成任务实体,将所述任务实体递交至所述实时任务执行控制器。

可选地,所述根据所述任务请求生成任务实体,包括:

根据所述任务请求获取任务类属性、实时任务调度器的状态信息和调用接口信息;

根据所述任务请求、任务类属性、实时任务调度器的状态信息和调用接口信息生成任务实体。

可选地,将所述任务请求递交至实时任务等待队列中,包括:

所述实时任务等待队列中的任务均为等待处理的状态,直至实时任务触发控制器对所述实时任务对应的任务实体进行处理。

可选地,将所述任务请求递交至实时任务等待队列中之后,所述系统还用于:

实时任务被触发时,所述实时任务触发控制器根据从所述任务实例中获取的模板作业控制流文件制作出实际作用控制流文件;

所述实时任务触发控制器根据所述实际作业控制流文件组装出起始控制作业,递交至所述实时任务执行器运行。

第三方面,本申请实施例提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面中任一所述方法。

第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述第一方面中任一所述方法的计算机程序。

综上所述,本申请实施例中提供了一种实时任务调度控制方法、系统、设备及可读存储介质,通过实时任务调度系统接收任务请求,所述任务请求携带key值;根据所述key值判断是否需要配置限流阈值,若不需要,则将所述任务请求递交至该任务至实时任务执行控制器,以执行所述任务请求对应任务;若需要,则判断是否已经初始化key值;若尚未初始化key值,则进行key值初始化后将所述任务请求递交至所述实时任务执行控制器;若已经初始化key值,则获取所述key值的当前限流数;将限流数加一之后,判断是否达到限流阈值,若达到,限流数减一,将所述任务请求递交至实时任务等待队列中;若未达到,则将所述任务请求递交至所述实时任务执行控制器。通过简单配置实现数据限流,降低应用学习及使用成本,提高应用开发效率。

附图说明

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

图1为本申请实施例中提供的一种实时任务调度控制方法流程示意图;

图2为本申请实施例中提供的一种实时任务调度控制实施例示意图;

图3为本申请实施例中提供的一种实时任务调度控制系统框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

下面参考本申请的若干代表性实施方式,详细阐释本申请的原理和精神。

虽然本申请提供了如下述实施例或附图所示的方法操作步骤或装置结构,但基于常规或者无需创造性的劳动在所述方法或装置中可以包括更多或者更少的操作步骤或模块单元。在逻辑性上不存在必要因果关系的步骤或结构中,这些步骤的执行顺序或装置的模块结构不限于本申请实施例或附图所示的执行顺序或模块结构。所述的方法或模块结构的在实际中的装置或终端产品应用时,可以按照实施例或者附图所示的方法或模块结构进行顺序执行或者并行执行。

现有的限流方案可以分为两种,一种是针对每个应用服务单独配置限流额度,每个应用限流额度加总为整体应用的限额度;另一种是使用分布式缓存中间件如数据库redis,在数据库redis中设置一个基于总限流额度的令牌桶,每个应用服务器在执行受控方法时去数据库redis中获取一个或多个令牌,根据拿到的令牌数量来控制受控方法的执行次数。

然而,上述两种限流方式存在以下缺陷:

1、单机限流的方案存在静态配置的问题;相对于分布式的限流控制,纯单机的限流在配置上较为不灵活,往往都是做静态配置,也就是在项目部署时为每台应用服务器配置固定的额度,并且在应用运行过程中不易动态调整每台机器的限流额度。

2、基于数据库redis等分布式中间件的令牌桶算法限流方案虽然能够动态调整每台机器的执行频率,并且能够精准的控制多台机器的执行频率,但是往往效率比单机限流低,一是存在分布式锁的高频竞争,二是获得令牌的网络开销较大。

下面首先介绍本申请实施例中所涉及的技术术语。

限流:在任务大量并发执行时,防止数据库因为暴涨的访问而处于不可用等。

异步及批量任务:又称为自动任务,简称任务。数据字典中英文缩写为aschn_tsk,框架代码中一般称为task,是一批最小可调度单元作业的集合。根据调度时机可以分为周期任务(以一定周期重复执行)、实时任务(生成后需要立即被执行)、定时任务(将在某一指定时间被执行)。

作业:数据字典中英文缩写为job,代码中一般称为job。是自动任务中可以调度的最小单元,若干个作业以顺序、分支、合并的作业流形式组成一个任务,是能够完成某一具体操作的功能模块。典型的作业包括前处理、单条处理、后处理三个步骤。

处理:处理是作业中的步骤,典型的作业包括前处理、单条处理、后处理三个步骤。前处理负责准备数据,作业表中对应的字段是前处理服务组件名(psh_bfr_pcsg_svc_nm),对于大数据量的情况,前处理还提供了分页获取数据而不是一次性获取全部数据的功能。单条处理负责处理单条数据,作业表中对应的字段是单条处理服务组件名(svc_cmpt_nm),是操作前处理分发过来的每一条单条数据的具体逻辑。后处理负责汇总结果,作业表中对应的字段是后处理服务组件名(psh_af_pcsg_svc_nm),后处理会根据前处理分发的数据总数以及单条处理已经处理的数据量计算目前的处理进度,并在全部处理完成的时候更新表中状态。单条处理是必须定义的,前处理和后处理可不定义,框架会提供默认处理逻辑。

定义:数据字典中英文缩写为def,代码中一般称为def或definition。包含了有效时间段信息和周期信息,专用于周期任务,实时和定时任务没有定义。周期任务和其中包含的作业都有定义,分别称为任务定义和作业定义,保存在任务定义表(s08t1_aschn_tsk_def)和作业定义表(s08t1_job_def)中。框架会根据定义的周期信息和有效时间段信息不断生成实例。

实例:数据字典中的英文缩写为exmp,代码中一般称为exmp或instance。只包含一次具体执行时间的信息。实时和定时任务只有实例,没有定义;周期任务根据定义生成的每次具体执行,就形成了一个实例。实例也包括任务实例和作业实例,分别保存在任务实例表(s08t1_aschn_tsk_exmp)和作业实例表(s08t1_job_exmp)中。

扫描:代码中一般称为scan或scanner。是对自动任务表中的定义和实例进行过滤处理的过程。对于定义来说,扫描的过程就是实例化的过程(2.2节将重点介绍),在这个过程中,任务定义是主要的扫描维度,任务定义中包含的周期信息和有效时间段信息是主要的过滤条件;对于实例来说,扫描的过程就是执行的过程,在这个过程中,作业实例是主要的扫描维度,作业实例中包含的作业执行状态信息是主要的过滤条件。

由于使用自动任务的系统逐渐变多,限流的问题逐渐浮出水面,而由各个系统实现显然不现实,即使实现,往往质量也得不到保证。在任务大量并发执行时,防止数据库因为暴涨的访问而处于不可用等状态,此时采取的措施就是限流,拒绝后续任务继续执行。

本申请实施例提供了一种限流交换技术方案,能够防止数据库因为暴涨的访问而处于不可用等状态,通过内置分布式缓存中间件可以达到数据限流目标。内置在调度任务框架内部,配置简单、有利于提高开发效率,本地加全局限流、实现多方位的控制。

如图1所示,本申请实施例提供了一种实时任务调度控制方法,所述方法包括如下步骤:

步骤101:实时任务调度系统接收任务请求,所述任务请求携带key值。

步骤102:根据所述key值判断是否需要配置限流阈值,若不需要,则将所述任务请求递交至该任务至实时任务执行控制器,以执行所述任务请求对应任务;若需要,则判断是否已经初始化key值。

步骤103:若尚未初始化key值,则进行key值初始化后将所述任务请求递交至所述实时任务执行控制器;若已经初始化key值,则获取所述key值的当前限流数。

步骤104:将限流数加一之后,判断是否达到限流阈值,若达到,限流数减一,将所述任务请求递交至实时任务等待队列中;若未达到,则将所述任务请求递交至所述实时任务执行控制器。

在步骤103中,若所述任务请求是针对单服务器,则使用单例模式进行map属性设置,并判断是否已经初始化key值;若所述任务请求是针对集群服务器,则使用分布式缓存中间件进行map属性设置,并判断是否已经初始化key值。若所述任务请求是针对单服务器,key值为数据库编号。若所述任务请求是针对集群服务器,key值为数据库编号或者数据库编号和篮子号的组合。内置分布式缓存中间件、简单有效的实现分布式限流,简单配置,实现数据限流。降低应用学习及使用成本,提高应用开发效率。

在本步骤中,在某些实施例中中,需要设计并实现java对象实例装载机制,实现单个或者多个java对象实例的装载。该java对象实例装载机制可以装载需要编组的单个或多个java对象实例列表。该机制体现为含有map属性的类,可以往map属性中添加一个或者多个java对象实例。

在步骤104之后,在所述实时任务执行控制器执行完所述任务之后,限流数减一。

在上述步骤102-104中,将所述任务请求递交至该任务至实时任务执行控制器,包括:根据所述任务请求生成任务实体,将所述任务实体递交至所述实时任务执行控制器。其中根据所述任务请求生成任务实体,包括:根据所述任务请求获取任务类属性、实时任务调度器的状态信息和调用接口信息;根据所述任务请求、任务类属性、实时任务调度器的状态信息和调用接口信息生成任务实体。

在步骤104中,将所述任务请求递交至实时任务等待队列中,包括:所述实时任务等待队列中的任务均为等待处理的状态,直至实时任务触发控制器对所述实时任务对应的任务实体进行处理。在将所述任务请求递交至实时任务等待队列中之后,等待实时任务被触发时,所述实时任务触发控制器根据从所述任务实例中获取的模板作业控制流文件制作出实际作用控制流文件;进一步,所述实时任务触发控制器根据所述实际作业控制流文件组装出起始控制作业,递交至所述实时任务执行器运行。

为了使得本申请实施例提供的方法更加清楚明了,现结合图2中的控制流程进行解释说明,分为本地流量控制和全局流量控制。本地是控制当前一台服务器的访问,全局是控制分布式部署的所有机器的访问量。

本地限流,使用单例类作为本地限流缓存,针对java单例类中设置的全局变量设置map属性,其中,key为数据库编号,value为链接数,其中value为原子对象。在本地限流执行作业时,首先判断链接数是否达到预设值:若已达到预设值,则拒绝此次任务;若未达到预设值,则将链接数加一。待作业完成时,链接数减一。

分布式缓存中间件对多系统操作相同数据库进行分布式限流。所有的请求都会经过分布式缓存中间件,通过评估设置合理的阈值,当数据库访问的连接数到达阈值以后将会拒绝本次请求。分布式限流使用分布式缓存中间件,其中key为数据库编号或数据库编号+篮子号,value为链接数,作业执行时首先判断链接数是否达到预设值:若达到预设值,则拒绝此次任务;若未达到预设值,则将链接数加一。待作业完成时,链接数减一。

本申请实施例主要涉及到2个数据模型。下表中只列出了必要的关键字段,其它详细字段与本发明没有直接关系,没有列出。

任务实例表如下表(1)所示:

表(1)

作业实例表如下表(2)所示:

表(2)

在本申请实施例中,对限流开启与否、限流的阈值等进行配置时可以按照如下规则进行配置:

在application/constant下的常量配置文件中如下配置:

#分布式限流开关,on开启,off关闭

switchdistributedflag=on

#本地限流开关,on开启,off关闭

switchlocalflag=on

#分布式限流对应key的有效时间

validtime=7200

#对应key的分布式限流最大数,使用时将key换成对应数据库编号或者数据库编号_篮子号

distributed_maxcount_key=999

#对应key的本地限流最大数,使用时将key换成对应数据库编号或者数据库编号_篮子号

local_maxcount_key=999

综上所述,本申请实施例提供了一种实时任务调度控制方法,通过实时任务调度系统接收任务请求,所述任务请求携带key值;根据所述key值判断是否需要配置限流阈值,若不需要,则将所述任务请求递交至该任务至实时任务执行控制器,以执行所述任务请求对应任务;若需要,则判断是否已经初始化key值;若尚未初始化key值,则进行key值初始化后将所述任务请求递交至所述实时任务执行控制器;若已经初始化key值,则获取所述key值的当前限流数;将限流数加一之后,判断是否达到限流阈值,若达到,限流数减一,将所述任务请求递交至实时任务等待队列中;若未达到,则将所述任务请求递交至所述实时任务执行控制器。通过简单配置实现数据限流,降低应用学习及使用成本,提高应用开发效率。

基于相同的技术构思,本申请实施例还提供一种实时任务调度控制系统,如图3所示,所述系统包括:

消息接收模块301,用于接收任务请求,所述任务请求携带key值。

限流阈值配置模块302,用于根据所述key值判断是否需要配置限流阈值,若不需要,则将所述任务请求递交所述实时任务执行控制器,以执行所述任务请求对应任务;若需要,则使用初始化key值模块303。

所述初始化key值模块303,用于判断是否已经初始化key值;若尚未初始化key值,则进行key值初始化后将所述任务请求递交至所述实时任务执行控制器;若已经初始化key值,则获取所述key值的当前限流数,将限流数加一之后,使用限流阈值判断模块304。

所述限流阈值判断模块304,用于判断是否达到限流阈值,若达到,限流数减一,将所述任务请求递交至实时任务等待队列中;若未达到,则将所述任务请求递交至该任务至实时任务执行控制器。

在某些实施例中中,所述初始化key值模块303,具体用于:若所述任务请求是针对单服务器,则使用单例模式进行map属性设置,并判断是否已经初始化key值;若所述任务请求是针对集群服务器,则使用分布式缓存中间件进行map属性设置,并判断是否已经初始化key值。

在某些实施例中中,若所述任务请求是针对单服务器,key值为数据库编号。

在某些实施例中中,若所述任务请求是针对集群服务器,key值为数据库编号或者数据库编号和篮子号的组合。

在某些实施例中中,在将所述任务请求递交至该任务至实时任务执行控制器之后,所述限流阈值判断模块304还用于:在所述实时任务执行控制器执行完所述任务之后,限流数减一。

在某些实施例中中,将所述任务请求递交至该任务至实时任务执行控制器,包括:根据所述任务请求生成任务实体,将所述任务实体递交至所述实时任务执行控制器。

在某些实施例中中,所述根据所述任务请求生成任务实体,包括:根据所述任务请求获取任务类属性、实时任务调度器的状态信息和调用接口信息;根据所述任务请求、任务类属性、实时任务调度器的状态信息和调用接口信息生成任务实体。

在某些实施例中中,将所述任务请求递交至实时任务等待队列中,包括:所述实时任务等待队列中的任务均为等待处理的状态,直至实时任务触发控制器对所述实时任务对应的任务实体进行处理。

在某些实施例中中,将所述任务请求递交至实时任务等待队列中之后,所述系统还用于:实时任务被触发时,所述实时任务触发控制器根据从所述任务实例中获取的模板作业控制流文件制作出实际作用控制流文件;所述实时任务触发控制器根据所述实际作业控制流文件组装出起始控制作业,递交至所述实时任务执行器运行。

本申请实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述实时任务调度控制方法。

本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行实时任务调度控制方法的计算机程序。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述的具体实施例,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施例而已,并不用于限定本申请的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1