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

基于Redis的分布式定时调度系统和方法

文献发布时间:2023-06-19 11:35:49


基于Redis的分布式定时调度系统和方法

技术领域

本发明实施例涉及计算机技术领域,尤其涉及一种基于Redis的分布式定时调度系统和方法。

背景技术

定时任务调度是一种按照指定时间策略周期性执行任务的应用业务系统或模块,是应用软件中一个常见的模块,用于处理需重复并周期性调用的任务,定时任务调度一般被用于数据同步、交易对账、异常处理等场景中。为了保证高可用和高容错性,大规模的云平台或者服务器集群通常采用分布式架构,因此分布式定时任务调度应运而生。

现有分布式定时任务调度工具很多都具有性能瓶颈,效率低下,比如知名的分布式调度工具Quartz,乐观情况下每秒的调度大概在300笔左右,其依赖数据库及数据库锁,只能满足少批量的任务调度,难以支撑高并发的调度。

发明内容

本发明提供一种基于Redis的分布式定时调度系统和方法,避免了对数据库的频繁读写以及加解数据库锁的操作过程,提高了定时任务的调度效率。

一方面,本发明实施例提供了一种基于Redis的分布式定时调度系统,包括至少两个定时任务调度节点、定时任务执行节点和定时任务调度策略配置模块,每个定时任务调度节点包括任务抢占线程和任务续约线程,其中,

每个任务抢占线程持续执行预设关键字抢占操作,所述预设关键字用于确定定时任务调度主节点;

若当前任务抢占线程抢占预设关键字,则当前任务抢占线程将当前定时任务调度节点设置为定时任务调度主节点;

当前任务续约线程持续进行定时任务调节主节点续约操作;

若续约操作执行失败,则下一个任务抢占线程将下一个定时任务调度节点设置为定时任务调度主节点,所述下一个任务抢占线程为下一次抢占预设关键字对应的线程;

下一个任务续约线程持续进行定时任务调度主节点续约操作;

定时任务调度主节点根据任务调度策略配置模块预先配置的任务调度策略,向定时任务执行节点发送调度请求,以执行定时任务执行节点的调度任务;

定时任务执行节点接收调度请求,并执行相应的定时任务执行操作。

另一方面,本发明实施例还提供了一种基于Redis的分布式定时调度方法,由本发明实施例任一所述的基于Redis的分布式定时调度系统执行,包括:

每个任务抢占线程持续执行预设关键字抢占操作,所述预设关键字用于确定定时任务调度主节点;

若当前任务抢占线程抢占预设关键字,则当前任务抢占线程将当前定时任务调度节点设置为定时任务调度主节点;

当前任务续约线程持续进行定时任务调节主节点续约操作;

若续约操作执行失败,则下一个任务抢占线程将下一个定时任务调度节点设置为定时任务调度主节点,所述下一个任务抢占线程为下一次抢占预设关键字对应的线程;

下一个任务续约线程持续进行定时任务调度主节点续约操作;

定时任务调度主节点根据任务调度策略配置模块预先配置的任务调度策略,向任务执行节点发送调度请求,以执行任务执行节点调度任务;

任务执行节点接收调度请求,并执行相应的任务执行操作。

本发明实施例的技术方案提供一种基于Redis的分布式定时调度系统,该系统包括至少两个定时任务调度节点、定时任务执行节点和定时任务调度策略配置模块,每个定时任务调度节点包括任务抢占线程和任务续约线程,其中,每个任务抢占线程持续执行预设关键字抢占操作,所述预设关键字用于确定定时任务调度主节点;若当前任务抢占线程抢占预设关键字,则当前任务抢占线程将当前定时任务调度节点设置为定时任务调度主节点;当前任务续约线程持续进行定时任务调节主节点续约操作;若续约操作执行失败,则下一个任务抢占线程将下一个定时任务调度节点设置为定时任务调度主节点,所述下一个任务抢占线程为下一次抢占预设关键字对应的线程;下一个任务续约线程持续进行定时任务调度主节点续约操作;定时任务调度主节点根据任务调度策略配置模块预先配置的任务调度策略,向定时任务执行节点发送调度请求,以执行定时任务执行节点的调度任务;定时任务执行节点接收调度请求,并执行相应的定时任务执行操作,上述通过抢占Redis中的预设关键字确定定时任务调度主节点,并执行任务调度操作,使得定时任务的调度不再依赖数据库及数据库锁,减少了数据库的频繁读写以及加解锁的操作,通过持续续约的方式实现主备调度节点的无缝切换,能够减少CPU损耗,提高了定时任务的调度效率。

附图说明

为了更加清楚地说明本发明示例性实施例的技术方案,下面对描述实施例中所需要用到的附图做一简单介绍。显然,所介绍的附图只是本发明所要描述的一部分实施例的附图,而不是全部的附图,对于本领域普通技术人员,在不付出创造性劳动的前提下,还可以根据这些附图得到其他的附图。

图1A是本发明实施例一提供的一种基于Redis的分布式定时调度系统的结构示意图;

图1B是本发明实施例一提供的一种任务续约线程执行续约操作的流程示意图;

图2是本发明实施例二提供的一种基于Redis的分布式定时调度方法的流程示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

实施例一

图1A为本发明实施例一提供的一种基于Redis的分布式定时调度系统的结构示意图,该分布式定时调度系统包括至少两个定时任务调度节点110、定时任务执行节点120和定时任务调度策略配置模块130,每个定时任务调度节点110包括任务抢占线程111和任务续约线程112,其中,

每个任务抢占线程持续执行预设关键字抢占操作,所述预设关键字用于确定定时任务调度主节点;

若当前任务抢占线程抢占预设关键字,则当前任务抢占线程将当前定时任务调度节点设置为定时任务调度主节点;

当前任务续约线程持续进行定时任务调节主节点续约操作;

若续约操作执行失败,则下一个任务抢占线程将下一个定时任务调度节点设置为定时任务调度主节点,所述下一个任务抢占线程为下一次抢占预设关键字对应的线程;

下一个任务续约线程持续进行定时任务调度主节点续约操作;

定时任务调度主节点根据任务调度策略配置模块预先配置的任务调度策略,向定时任务执行节点发送调度请求,以执行定时任务执行节点的调度任务;

定时任务执行节点接收调度请求,并执行相应的定时任务执行操作。

其中,定时任务调度节点为在分布式定时调度系统的调度中心中执行调度任务的节点,其中,调度中心优选可以是分布式服务器。每个定时任务调度节点包括任务抢占线程和任务续约线程,其中,任务抢占线程用于持续执行预设关键字的抢占操作,上述预设关键字为在Redis中预先设置的关键字。本实施例中通过抢占预设关键字可以确定定时任务调度主节点,若任务抢占线程抢占到预设关键字,相应的,与该任务抢占线程对应的定时任务调度节点则被设置为定时任务调度主节点,若任务抢占线程未抢占到预设关键字,则针对对应的定时任务调度节点不执行任何操作。任务续约线程用于在任务抢占线程抢占到预设关键字,将对应的定时任务调度节点设置为定时任务调度主节点之后,持续进行定时任务调度主节点的续约操作,若续约成功,则对应的定时任务调度节点在下一次调度时仍为定时任务调度主节点,若续约失败,则对应的定时任务调度节点不再是定时任务调度主节点。本实施例的技术方案能够在当前执行调度任务的定时任务调度节点出现异常时,自动切换到其他定时任务调度节点,能够保证调度任务的正常执行。

定时任务执行节点为在接收到调用请求后,执行定时任务的节点,定时任务执行节点一般为客户端。在定时任务执行节点中,优选可以设置有定时任务的时间表达式,定时任务的具体执行方法以及定时任务的返回结果等参数,在上述参数设置完成后,优选可以将定时任务执行节点以及相应的IP注册到调度中心,调度中心接收到相应的定时任务后,将定时任务存储到内存中,以便后续定时任务调度节点进行调度。定时任务调度策略配置模块用于供用户配置任务调度策略,其中,任务调度策略配置有调度任务的方法、调度任务的时间、调度任务的类型、调度任务的超时时间以及调度任务失败后的应对策略等,任务调度策略用于指导定时任务调度主节点如何进行任务调度。

下面以具体示例对本实施例中的基于Redis的分布式定时调度系统的工作流程进行详细说明:

在基于Redis的分布式定时调度系统中具有三个定时任务调度节点,分别是定时任务调度节点1、定时任务调度节点2和定时任务调度节点3,以及定时任务执行节点和定时任务调度策略配置模块,其中,定时任务调度节点1包括任务抢占线程1和任务续约线程1,定时任务调度节点2包括任务抢占线程2和任务续约线程2,定时任务调度节点3包括任务抢占线程3和任务续约线程3。

在执行定时任务调度的过程中,任务抢占线程1、任务抢占线程2和任务抢占线程3都持续执行预设关键字抢占操作,若任务抢占线程1抢占到预设关键字,则任务抢占线程1将定时任务调度节点1设置为定时任务调度主节点,定时任务调度节点1根据定时任务调度度策略配置模块提供的定时任务调度策略,向相应的定时任务执行节点发送调度请求,相应的定时任务执行节点接收到调度请求后,执行相应的定时任务执行操作。

在任务抢占线程1将定时任务调度节点1设置为定时任务调度主节点后,任务续约线程1持续进行定时任务调度节点1为定时任务调度主节点的续约操作,若续约成功,则定时任务调度节点1根据定时任务调度度策略配置模块提供的定时任务调度策略,继续向相应的定时任务执行节点发送调度请求,直至续约失败(例如定时任务调度节点1异常,则续约失败),定时任务调度节点1不再是定时任务调度主节点。

此时,如果任务抢占线程3抢占到预设关键字,则任务抢占线程3将定时任务调度节点3设置为定时任务调度主节点,定时任务调度节点3根据定时任务调度度策略配置模块提供的定时任务调度策略,向相应的定时任务执行节点发送调度请求,相应的定时任务执行节点接收到调度请求后,执行相应的定时任务执行操作。

在任务抢占线程3将定时任务调度节点3设置为定时任务调度主节点后,任务续约线程3持续进行定时任务调度节点3为定时任务调度主节点的续约操作,若续约成功,则定时任务调度节点3根据定时任务调度度策略配置模块提供的定时任务调度策略,继续向相应的定时任务执行节点发送调度请求,直至续约失败,定时任务调度节点3不再是定时任务调度主节点。

可以理解的是,在任务续约线程1续约失败之后,还可以是任务抢占线程2抢占到预设关键字,任务抢占线程2将定时任务调度节点2设置为定时任务调度主节点,并执行相应的后续操作。本实施例中的基于Redis的分布式定时调度系统循环迭代上述过程,直至定时任务调度策略中的所有任务调度完成。

在一个优选实施例中,每个任务抢占线程抢占预设关键字,包括每个任务抢占线程利用redis setnx指令抢占预设关键字。

本实施例的技术方案提供一种基于Redis的分布式定时调度系统,该系统包括至少两个定时任务调度节点、定时任务执行节点和定时任务调度策略配置模块,每个定时任务调度节点包括任务抢占线程和任务续约线程,其中,每个任务抢占线程持续执行预设关键字抢占操作,所述预设关键字用于确定定时任务调度主节点;若当前任务抢占线程抢占预设关键字,则当前任务抢占线程将当前定时任务调度节点设置为定时任务调度主节点;当前任务续约线程持续进行定时任务调节主节点续约操作;若续约操作执行失败,则下一个任务抢占线程将下一个定时任务调度节点设置为定时任务调度主节点,所述下一个任务抢占线程为下一次抢占预设关键字对应的线程;下一个任务续约线程持续进行定时任务调度主节点续约操作;定时任务调度主节点根据任务调度策略配置模块预先配置的任务调度策略,向定时任务执行节点发送调度请求,以执行定时任务执行节点的调度任务;定时任务执行节点接收调度请求,并执行相应的定时任务执行操作,上述通过抢占Redis中的预设关键字确定定时任务调度主节点,并执行任务调度操作,使得定时任务的调度不再依赖数据库及数据库锁,减少了数据库的频繁读写以及加解锁的操作,通过持续续约的方式实现主备调度节点的无缝切换,能够减少CPU损耗,提高了定时任务的调度效率。

在上述各实施例的基础上,进一步的,若当前任务抢占线程抢占预设关键字,则当前任务抢占线程将当前定时任务调度节点设置为定时任务调度主节点,包括:

若当前任务抢占线程抢占预设关键字,则所述当前任务抢占线程将所述预设关键字的名称设置为定时任务调度主节点,将预设关键字的VALUE设置为当前定时任务调度节点。

示例性的,当前任务抢占线程抢占到预设关键字后,优选可以将预设关键字的名称设置为“masterkey”,即将关键字的名称设置为定时任务调度主节点,可以将预设关键字的VALUE设置为当前定时任务调度节点,以上述具体示例为例,当前定时任务调度节点为定时任务调度节点1,则预设关键字的VALUE可以设置为定时任务调度节点1,即(预设关键字KEY,VALUE)=(masterkey,定时任务调度节点1)。

可以理解的是,下一个任务抢占线程在抢占到预设关键字之后,优选也可以重复上述步骤,完成预设关键字名称和VALUE的设置。

在上述各实施例的基础上,对任务续约线程执行续约操作进行进一步的优化。图1B为本发明实施例一提供的一种任务续约线程执行续约操作的流程示意图,如图1B所示,所述当前任务续约线程持续进行定时任务调度主节点续约操作,包括:

所述当前任务续约线程持续监听当前定时任务调度主节点的VALUE是否为当前定时任务调度节点;

若是,则确定定时任务调度主节点在当前续约有效期内是否已加载定时任务;若否,则持续监听当前定时任务调度主节点的VALUE是否为当前定时任务调度节点;

若已加载,则进行下一次定时任务调度主节点续约操作;

若未加载,则加载定时任务,之后进行下一次定时任务调度主节点续约操作;

下一次定时任务调度主节点续约操作成功后,所述当前任务续约线程继续执行持续监听当前定时任务调度主节点的VALUE是否为当前定时任务调度节点的操作。本实施例中当前任务续约线程循环迭代上述过程,直至续约失败。

在上述各实施例的基础上,进一步的,所述定时任务调度节点还包括增量线程,所述增量线程用于删除或增加调度任务。

优选的,当定时任务调度节点为定时任务调度主节点且当前进程为任务调度进程时,相应的增量线程执行删除或增加内存中的调度任务的操作。示例性的,当监测到定时任务调度节点为定时任务调度主节点后,增量进程将相应的定时任务加载到内存中,当监测到定时任务调度节点续约失败后,增量进程将相应的定时任务在内存中删除。

在上述各实施例的基础上,进一步的,所述当前任务续约线程还用于:

若下一次定时任务调度主节点续约操作失败,则利用增量线程删除已加载的定时任务,并继续监听当前定时任务调度主节点的VALUE是否为当前定时任务调度节点。

在上述各实施例的基础上,进一步的,所述系统还包括:

所述增量线程用于将定时任务加载到内存中,以便定时任务调度主节点在当前续约有效期内加载定时任务。

在上述各实施例的基础上,进一步的,定时任务调度主节点根据任务调度策略配置模块预先配置的任务调度策略,向定时任务执行节点发送调度请求,以执行定时任务执行节点的调度任务,包括:

定时任务调度主节点在内存中根据任务调度策略配置模块预先配置的任务调度策略,向定时任务执行节点发送调度请求,以执行定时任务执行节点的调度任务。上述任务调度过程基于内存而不是基于数据库实现,大大提高了任务调度的效率,同时可以实现高可用。

在上述各实施例的基础上,进一步的,所述任务执行节点接收调度请求,并执行相应的任务执行操作,包括:

所述任务执行节点接收调度请求,根据预设定时任务执行逻辑执行相应的任务执行操作,得到任务执行结果;所述任务执行节点将任务执行结果存储至任务执行日志中。将任务执行结果存储在任务执行日志而不是存储在数据库中,能够方便任务执行结果的查找。

实施例二

图2为本发明实施例二提供的一种基于Redis的分布式定时调度方法的流程示意图,本实施例适用于需要对定时任务进行调度的情况,该方法由本发明实施例提供的基于Redis的分布式定时调度系统执行。如图2所示,该方法具体包括如下步骤:

S210、每个任务抢占线程持续执行预设关键字抢占操作,所述预设关键字用于确定定时任务调度主节点;

S220、若当前任务抢占线程抢占预设关键字,则当前任务抢占线程将当前定时任务调度节点设置为定时任务调度主节点;

S230、当前任务续约线程持续进行定时任务调节主节点续约操作;

S240、若续约操作执行失败,则下一个任务抢占线程将下一个定时任务调度节点设置为定时任务调度主节点,所述下一个任务抢占线程为下一次抢占预设关键字对应的线程;

S250、下一个任务续约线程持续进行定时任务调度主节点续约操作;

S260、定时任务调度主节点根据任务调度策略配置模块预先配置的任务调度策略,向任务执行节点发送调度请求,以执行任务执行节点调度任务;

S270、任务执行节点接收调度请求,并执行相应的任务执行操作。

本实施例的技术方案提供一种基于Redis的分布式定时调度方法,该方法包括:每个任务抢占线程持续执行预设关键字抢占操作,所述预设关键字用于确定定时任务调度主节点;若当前任务抢占线程抢占预设关键字,则当前任务抢占线程将当前定时任务调度节点设置为定时任务调度主节点;当前任务续约线程持续进行定时任务调节主节点续约操作;若续约操作执行失败,则下一个任务抢占线程将下一个定时任务调度节点设置为定时任务调度主节点,所述下一个任务抢占线程为下一次抢占预设关键字对应的线程;下一个任务续约线程持续进行定时任务调度主节点续约操作;定时任务调度主节点根据任务调度策略配置模块预先配置的任务调度策略,向定时任务执行节点发送调度请求,以执行定时任务执行节点的调度任务;定时任务执行节点接收调度请求,并执行相应的定时任务执行操作,上述通过抢占Redis中的预设关键字确定定时任务调度主节点,并执行任务调度操作,使得定时任务的调度不再依赖数据库及数据库锁,减少了数据库的频繁读写以及加解锁的操作,通过持续续约的方式实现主备调度节点的无缝切换,能够减少CPU损耗,提高了定时任务的调度效率。

在上述各实施例的基础上,进一步的,每个任务抢占线程抢占预设关键字,包括:

每个任务抢占线程利用redis setnx指令抢占预设关键字。

在上述各实施例的基础上,进一步的,若当前任务抢占线程抢占预设关键字,则当前任务抢占线程将当前定时任务调度节点设置为定时任务调度主节点,包括:

若当前任务抢占线程抢占预设关键字,则所述当前任务抢占线程将所述预设关键字的名称设置为定时任务调度主节点,将预设关键字的VALUE设置为当前定时任务调度节点。

在上述各实施例的基础上,进一步的,所述当前任务续约线程持续进行定时任务调度主节点续约操作,包括:

所述当前任务续约线程持续监听当前定时任务调度主节点的VALUE是否为当前定时任务调度节点;

若是,则确定定时任务调度主节点在当前续约有效期内是否已加载定时任务;若否,则持续监听当前定时任务调度主节点的VALUE是否为当前定时任务调度节点;

若已加载,则进行下一次定时任务调度主节点续约操作;

若未加载,则加载定时任务,之后进行下一次定时任务调度主节点续约操作;

下一次定时任务调度主节点续约操作成功后,所述当前任务续约线程继续执行持续监听当前定时任务调度主节点的VALUE是否为当前定时任务调度节点的操作。

在上述各实施例的基础上,进一步的,所述定时任务调度节点还包括增量线程,所述增量线程用于删除或增加调度任务。

在上述各实施例的基础上,进一步的,所述当前任务续约线程还用于:

若下一次定时任务调度主节点续约操作失败,则利用增量线程删除已加载的定时任务,并继续监听当前定时任务调度主节点的VALUE是否为当前定时任务调度节点。

在上述各实施例的基础上,进一步的,所述方法还包括:

所述增量线程用于将定时任务加载到内存中,以便定时任务调度主节点在当前续约有效期内加载定时任务。

在上述各实施例的基础上,进一步的,定时任务调度主节点根据任务调度策略配置模块预先配置的任务调度策略,向定时任务执行节点发送调度请求,以执行定时任务执行节点的调度任务,包括:

定时任务调度主节点在内存中根据任务调度策略配置模块预先配置的任务调度策略,向定时任务执行节点发送调度请求,以执行定时任务执行节点的调度任务。

在上述各实施例的基础上,进一步的,所述任务执行节点接收调度请求,并执行相应的任务执行操作,包括:

所述任务执行节点接收调度请求,根据预设定时任务执行逻辑执行相应的任务执行操作,得到任务执行结果:

所述任务执行节点将任务执行结果存储至任务执行日志中。

本领域普通技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个计算装置上,或者分布在多个计算装置所组成的网络上,可选地,他们可以用计算机装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

相关技术
  • 基于Redis的分布式定时调度系统和方法
  • 一种基于Redis集群的分布式动态杜鹃过滤系统及其过滤方法
技术分类

06120112986598