CN111722934B - 分布式定时任务处理方法及系统 - Google Patents
分布式定时任务处理方法及系统 Download PDFInfo
- Publication number
- CN111722934B CN111722934B CN202010532447.9A CN202010532447A CN111722934B CN 111722934 B CN111722934 B CN 111722934B CN 202010532447 A CN202010532447 A CN 202010532447A CN 111722934 B CN111722934 B CN 111722934B
- Authority
- CN
- China
- Prior art keywords
- task
- timestamp
- distributed
- queue
- current
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
- G06F9/4887—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues involving deadlines, e.g. rate based, periodic
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种分布式定时任务处理方法及系统,涉及分布式数据处理技术领域,解决了分布式定时任务处理时间较长、系统过于复杂且维护成本高的技术问题,其技术方案要点是定时任务触发后,所有节点都去抢占分布式锁,第一节点获取到分布式锁后;将定时任务存储到当前任务的队列中,再将当前时间戳存储到TIME_KEY中,可以保证定时任务不会被重复执行。不需要依赖中心调度,系统只依赖分布式缓存中间件,从而可以支持动态增加或减少分布式任务处理节点,无需修改配置或重启已存在节点,降低了系统的复杂度和维护成本。
Description
技术领域
本公开涉及分布式数据处理技术领域,尤其涉及一种分布式定时任务处理方法及系统。
背景技术
目前在计算机服务端系统中,经常会有许多需要定时执行的任务或程序,我们称之为定时任务,例如每天凌晨3点生成昨日报表,每周末生成本周报表,每天凌晨1点分析日志等等类似的人物。这些定时任务一般通过crontab(Linux系统定时任务调度程序)触发,在java领域,可以通过spring+Quartz定义定时任务触发时间,定义触发时间的表达式称之为cron表达式,例如*/30****?表示每隔30秒执行一次。一般的定时任务不允许或不需要重复执行,为了解决这类重复执行问题,可以将这些需要重复执行的任务部署在一台服务器上,那么这个定时任务就是整个系统的单点。但是这样处理会导致定时任务服务器出现故障会影响到整个系统,并且某些定时任务如果需要大量计算资源执行,那么单点的执行效率过低。
另一种方式是采用注册中心和调度中心,通过将任务分片的方式将任务分配到多个节点处理,例如elastic-job实现,此种方式弊端是动态扩容或者缩容需要修改配置文件,扩展不够灵活,另外不同的节点机器资源使用情况不同,如果平均分配处理任务会造成资源浪费或负载压力过高的问题。
发明内容
本公开提供了一种分布式定时任务处理方法及系统,其技术目的是缩短定时任务处理时间,确保定时任务不会被重复执行,同时降低系统的复杂度和维护成本。
本公开的上述技术目的是通过以下技术方案得以实现的:
一种分布式定时任务处理方法,包括:
S1:触发定时任务;
S2:第一节点获取分布式锁;
S3:在分布式缓存中检查是否存在所述定时任务的时间戳;
所述时间戳不存在则S4:将所述定时任务存储到当前任务的队列中,然后将当前时间戳存储到与所述定时任务唯一关联的TIME_KEY中,然后进入到步骤S8;
所述时间戳存在则S5:判断所述时间戳与当前时间戳的差值是否小于预设阈值;
S6:所述差值大于所述预设阈值,则进入到步骤S4;
S7:所述差值小于所述预设阈值,进入到步骤S8;
S8:第一节点释放分布式锁;
S9:检查队列中是否有待执行的定时任务,有则从队列中移出任务并执行,重复步骤S9直至结束。
进一步地,所述步骤S4中,将所述定时任务拆分得到至少一个分片子任务后,将所述分片子任务存储到当前任务的队列中,再将当前时间戳存储到TIME_KEY中,然后进入到步骤S8。
一种分布式定时任务处理系统,包括:
触发单元,触发定时任务;
获取单元,第一节点获取分布式锁;
第一检查单元,在分布式缓存中检查是否存在所述定时任务的时间戳;
存储单元,所述时间戳不存在则将所述定时任务存储到当前任务的队列中,然后将当前时间戳存储到与所述定时任务唯一关联的TIME_KEY中;
判断单元,所述时间戳存在则判断所述时间戳与当前时间戳的差值是否小于预设阈值;
释放单元,第一节点释放所述分布式锁;
第二检查单元,检查队列中是否有待执行的定时任务;
执行单元,所述队列中有待执行的定时任务,将所述定时任务从队列中移出并执行。
进一步地,该系统还包括分片单元,将所述定时任务拆分得到至少一个分片子任务,所述存储单元再将所述分片子任务存储到当前任务的队列中。
本公开的有益效果在于:本公开所述的分布式定时任务处理方法系统,定时任务触发后,所有节点都去抢占分布式锁,第一节点获取到分布式锁后;将定时任务存储到当前任务的队列中,再将当前时间戳存储到TIME_KEY中,可以保证定时任务不会被重复执行。不需要依赖中心调度,系统只依赖分布式缓存中间件,从而可以支持动态增加或减少分布式任务处理节点,无需修改配置或重启已存在节点,降低了系统的复杂度和维护成本。
附图说明
图1为本公开方法流程图;
图2为本公开系统框架图。
具体实施方式
下面将结合附图对本公开技术方案进行详细说明。在本公开的描述中,需要理解地是,术语“第一”仅用于描述目的,而不能理解为指示或暗示相对重要性或隐含指明所指示的技术特征的数量。在本申请中,“第一节点”指获取到分布式锁的节点,这是一个动态过程的表达,当一个节点获取到分布式锁时,该节点即为“第一节点”;当“第一节点”将分布式锁释放后,该“第一节点”则不再是“第一节点”,而是众多没有获取到分布式锁的节点中的某个节点。
图1为本公开方法流程图,具体过程如图1所示,不再赘述。具体实施方法为:利用cron组件,例如Quartz定时任务触发时间、定时任务执行计划。触发定时任务后,当前节点尝试获取分布式锁,获取超时失败后的节点则放弃本次任务执行。
成功获取分布式锁后的节点,在分布式缓存(本案例中使用Redis中间件)检查TIME_KEY是否存在当前定时任务的时间戳(该时间戳为定时任务首次执行的时间),如果存在则比较缓存中的时间戳与当前时间戳的差值是否在预设的阈值范围内,如果是判定其他节点已经执行过该定时任务。之所以判断差值是否在预设的阈值范围内是因为不同节点服务器的系统一般不会完全同步,同时cron任务只能指定时间精度到秒级,所以时间戳会有毫秒级或秒级的误差,因此设定合理的阈值判断是否是同一时间触发的定时任务。如果差值超过指定阈值,那么该差值记录的是上一个触发点执行的时间,例如定时任务触发的间隔时间是30秒执行一次,那么该时间记录的就是上一个30秒或者更久之前的执行时间;如果TIME_KEY的值为空,说明当前是首次执行;这两种情况我们都认为当前节点针对当前的定时任务在当前时间触发点是首次执行。
TIME_KEY是各个定时任务独立的专属记录,每个定时任务都有唯一关联的TIME_KEY,用于记录该定时任务触发时间的key,例如TASK1_TIME_KEY、TASK2_TIME_KEY,则分别表示定时任务TASK1的触发时间和定时任务TASK2的触发时间。
经过上述判断,若是首次执行则将当前的定时任务拆分成一个或者多个分片子任务,将分片子任务上下文存储到当前定时任务的任务队列key中,且将当前时间戳存储到当前任务的时间戳TIME_KEY中,然后释放分布式锁,如果不是首次执行则直接释放分布式锁。
检查当前任务队列中是否有分片子任务,如果没有任务说明任务已经被其他节点执行完成,任务结束;如果存在分片子任务,那么从队列中取出分片子任务并执行,循环执行,直到获取不到子任务,那么任务整体执行结束。
分布式锁释放后,系统中的所有节点则又回来抢占分布式锁,获取到分布式锁的节点同样在分布式缓存中检查TIME_KEY是否存在当前定时任务的时间戳,显然此时存在该定时任务的时间戳,若时间戳与当前时间戳的差值小于预设阈值,说明该定时任务还在执行过程当中,节点释放分布式锁后去检查当前定时任务的任务队列,拉取队列中未被执行的分片子任务进行执行。若时间戳与当前时间戳的差值大于预设阈值,则当前该定时任务已被执行完毕,需要到下一个定时的时间点才会执行,下一次执行则不是首次执行但依旧是重新开始执行整个定时任务,因此再对定时任务进行分片,将分片后的子任务依旧存储到当前任务的队列中,依次往复循环。
图2为本公开所述系统的框架图,其具体结构如图2,各个模块的作用参件本申请所述方法的流程,不再赘述。
以上为本公开示范性实施例,本公开的保护范围由权利要求书及其等效物限定。
Claims (2)
1.一种分布式定时任务处理方法,其特征在于,包括:
S1:触发定时任务;
S2:第一节点获取分布式锁;
S3:在分布式缓存中检查是否存在所述定时任务的时间戳;
所述时间戳不存在则S4:将所述定时任务存储到当前任务的队列中,然后将当前时间戳存储到与所述定时任务唯一关联的TIME_KEY中,然后进入到步骤S8;
所述时间戳存在则S5:判断所述时间戳与当前时间戳的差值是否小于预设阈值;
S6:所述差值大于所述预设阈值,则进入到步骤S4;
S7:所述差值小于所述预设阈值,进入到步骤S8;
S8:第一节点释放分布式锁;
S9:检查队列中是否有待执行的定时任务,有则从队列中移出任务并执行,重复步骤S9直至结束;
其中,所述步骤S4中,将所述定时任务拆分得到至少一个分片子任务后,将所述分片子任务存储到当前任务的队列中,再将当前时间戳存储到TIME_KEY中,然后进入到步骤S8。
2.一种分布式定时任务处理系统,其特征在于,包括:
触发单元,触发定时任务;
获取单元,第一节点获取分布式锁;
第一检查单元,在分布式缓存中检查是否存在所述定时任务的时间戳;
分片单元,将所述定时任务拆分得到至少一个分片子任务;
存储单元,所述时间戳不存在则将所述分片子任务存储到当前任务的队列中,然后将当前时间戳存储到与所述定时任务唯一关联的TIME_KEY中;
判断单元,所述时间戳存在则判断所述时间戳与当前时间戳的差值是否小于预设阈值;
释放单元,第一节点释放所述分布式锁;
第二检查单元,检查队列中是否有待执行的定时任务;
执行单元,所述队列中有待执行的定时任务,将所述定时任务从队列中移出并执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010532447.9A CN111722934B (zh) | 2020-06-12 | 2020-06-12 | 分布式定时任务处理方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010532447.9A CN111722934B (zh) | 2020-06-12 | 2020-06-12 | 分布式定时任务处理方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111722934A CN111722934A (zh) | 2020-09-29 |
CN111722934B true CN111722934B (zh) | 2022-08-16 |
Family
ID=72566495
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010532447.9A Active CN111722934B (zh) | 2020-06-12 | 2020-06-12 | 分布式定时任务处理方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111722934B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112817717B (zh) * | 2021-01-28 | 2024-02-09 | 新华三大数据技术有限公司 | 一种定时任务的调度方法及装置 |
CN114780217B (zh) * | 2022-04-19 | 2023-05-23 | 湖南长银五八消费金融股份有限公司 | 任务调度方法、装置、计算机设备以及介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109766167B (zh) * | 2017-11-09 | 2023-03-21 | 阿里巴巴集团控股有限公司 | 定时任务分发的方法、装置、系统及设备 |
CN108874552B (zh) * | 2018-06-28 | 2021-09-21 | 杭州云毅网络科技有限公司 | 分布式锁执行方法、装置及系统、应用服务器和存储介质 |
CN114221863B (zh) * | 2022-02-22 | 2022-05-24 | 湖南云畅网络科技有限公司 | 一种分布式集群的节点智能选举方法 |
-
2020
- 2020-06-12 CN CN202010532447.9A patent/CN111722934B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN111722934A (zh) | 2020-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6026499A (en) | Scheme for restarting processes at distributed checkpoints in client-server computer system | |
CN111722934B (zh) | 分布式定时任务处理方法及系统 | |
US8904361B2 (en) | Non-intrusive method for logging of internal events within an application process, and system implementing this method | |
US6411982B2 (en) | Thread based governor for time scheduled process execution | |
US7568131B2 (en) | Non-intrusive method for logging external events related to an application process, and a system implementing said method | |
CN110895484A (zh) | 任务调度方法及装置 | |
CN113569987A (zh) | 模型训练方法和装置 | |
CN110895488B (zh) | 任务调度方法及装置 | |
CN113448712A (zh) | 任务调度执行方法及装置 | |
CN111459639B (zh) | 一种支持全球多机房部署的分布式任务管理平台及方法 | |
CN110442564B (zh) | 增量数据校验方法、存储介质 | |
CN110895483A (zh) | 任务恢复方法及装置 | |
US11392414B2 (en) | Cooperation-based node management protocol | |
CN110109741B (zh) | 循环任务的管理方法、装置、电子设备及存储介质 | |
CN110895486B (zh) | 分布式任务调度系统 | |
WO2023115931A1 (zh) | 大数据组件参数调整方法、装置、电子设备及存储介质 | |
CN110895485A (zh) | 任务调度系统 | |
CN107943567B (zh) | 一种基于amqp协议的高可靠性任务调度方法和系统 | |
CN113467908A (zh) | 任务执行方法、装置、计算机可读存储介质及终端设备 | |
CN116599828A (zh) | 任务执行方法和装置、存储介质及电子设备 | |
CN113269554B (zh) | 数据对比方法、系统以及存储介质 | |
CN115220887A (zh) | 调度信息的处理方法、任务处理系统、处理器和电子设备 | |
CN115499493A (zh) | 异步事务处理方法、装置、存储介质及计算机设备 | |
CN114328722A (zh) | 一种支持多数据源的数据同步方法、装置及计算机设备 | |
CN112948096A (zh) | 一种批量调度方法、装置和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: No. 568, Longmian Avenue, High-tech Park, Jiangning District, Nanjing City, Jiangsu Province, 211198 Patentee after: Xiaoshi Technology (Jiangsu) Co.,Ltd. Address before: No. 568, Longmian Avenue, High-tech Park, Jiangning District, Nanjing City, Jiangsu Province, 211198 Patentee before: NANJING ZHENSHI INTELLIGENT TECHNOLOGY Co.,Ltd. |
|
CP01 | Change in the name or title of a patent holder |