CN107943567A - 一种基于amqp协议的高可靠性任务调度方法和系统 - Google Patents
一种基于amqp协议的高可靠性任务调度方法和系统 Download PDFInfo
- Publication number
- CN107943567A CN107943567A CN201710985447.2A CN201710985447A CN107943567A CN 107943567 A CN107943567 A CN 107943567A CN 201710985447 A CN201710985447 A CN 201710985447A CN 107943567 A CN107943567 A CN 107943567A
- Authority
- CN
- China
- Prior art keywords
- subtask
- task
- state set
- queue
- result
- 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.)
- Granted
Links
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/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
-
- 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/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Abstract
本发明涉及一种基于AMQP协议的高可靠性任务调度方法和系统。该方法包括:1)将任务拆分为若干子任务,并将子任务放入任务队列;2)记录未收到确认回执的子任务状态到子任务状态集,并将子任务状态集持久化存储;3)从任务队列中获取子任务,然后执行子任务并将执行结果放入结果队列;4)从结果队列中获取执行结果并将其作为确认回执,从子任务状态集中删除对应子任务的状态信息,并将更新后的子任务状态集持久化存储。当灾备场景发生时,从持久化存储中获取子任务状态集,重新生成子任务并恢复到任务队列中。本发明有效避免了任务的重复调度、任务和任务结果丢失等问题的发生,保证了调度系统的可靠性和任务结果的高可靠性。
Description
技术领域
本发明属于信息技术领域,具体涉及一种基于AMQP协议的高可靠性任务调度方法和系统。
背景技术
任务调度是指基于给定时间点、给定时间间隔或者给定执行次数自动执行任务。而为了保证任务进度反馈的实时性,任务调度算法一般会将一个任务拆分为若干小任务。任务调度算法适用于生产者、消费者模型,其中生产者负责将任务拆分为子任务,消费者负责执行子任务并输出执行结果,子任务和输出结果的传递一般通过消息队列实现。
一般情况下,任务调度算法仅需要关注在正常场景下被拆分后的子任务是否都被正确的调度并回收执行结果。这类调度算法在灾备场景下经常会出现子任务的丢失和重复调度等问题。
现有实现方案生产者队列(即任务队列)与消费者队列(即结果队列)为两个相互独立的队列,生产者负责将拆分后的子任务放入任务队列,消费者负责从任务队列中获取子任务执行并将执行后产生的结果放入结果队列。任务队列与结果队列通常常驻内存,不考虑持久化存储。任务与结果数据的传输也一般采用自动确认模式,即消息被放入队列后即认为队列另一端的生产者或消费者已成功接收到此消息。
工程实践中,任务调度系统一般在任务需要长时间、周期性运行且无人值守的场景下被大范围使用。现有技术方案存在消息不进行持久化存储和缺乏有效的消息确认和重传机制等问题,当应用失败、服务器意外掉电或机房断电等灾备场景发生时无法进行容灾恢复。这些问题会导致任务无法继续正常执行、任务结果数据丢失等严重问题,造成巨大的时间和资源上的浪费。
发明内容
本发明针对上述问题,提供基于AMQP协议的高可靠性任务调度方法和系统,能够有效提升任务调度的可靠性。
本发明采用的技术方案如下:
一种基于AMQP协议的高可靠性任务调度方法,包括以下步骤:
1)将任务拆分为若干子任务,并将子任务放入任务队列;
2)记录未收到确认回执的子任务状态到子任务状态集,并将子任务状态集持久化存储;
3)从任务队列中获取子任务,然后执行子任务并将执行结果放入结果队列;
4)从结果队列中获取执行结果并将其作为确认回执,从子任务状态集中删除对应子任务的状态信息,并将更新后的子任务状态集持久化存储。
进一步地,当没有灾备场景发生时,重复步骤3)、4)直到任务执行结束。
进一步地,当灾备场景发生时,从持久化存储中获取子任务状态集,按照子任务状态集中子任务的状态重新生成子任务,并将子任务恢复到任务队列中,使得子任务能够继续执行。
进一步地,每个子任务均有一个唯一ID作为子任务的唯一标识。
进一步地,执行子任务后返回的执行结果中包含对应子任务的ID;从结果队列中获取到执行结果后从其中获取子任务ID作为确认回执,并从子任务状态集中删除对应子任务ID的状态信息,然后将更新后的状态集持久化存储。
一种基于AMQP协议的高可靠性任务调度系统,其包括:
任务拆分单元,用于将任务拆分为若干子任务,并将子任务放入任务队列;
持久化存储单元,用于记录所有未收到确认回执的子任务状态到子任务状态集,并将子任务状态集持久化存储;
子任务执行单元,用于从任务队列中获取子任务,然后执行子任务并将执行结果放入结果队列;
子任务状态集更新单元,用于从结果队列中获取执行结果并将其作为确认回执,从子任务状态集中删除对应子任务的状态信息,并将更新后的子任务状态集持久化存储。
进一步地,还包括灾备处理单元,用于当灾备场景发生时,从持久化存储中获取子任务状态集,按照子任务状态集中子任务的状态重新生成子任务,并将子任务恢复到任务队列中,使得子任务能够继续执行。
进一步地,每个子任务均有一个唯一ID作为子任务的唯一标识。
进一步地,子任务执行单元执行子任务后返回的执行结果中包含对应子任务的ID;子任务状态集更新单元从结果队列中获取到执行结果后从其中获取子任务ID作为确认回执,并从子任务状态集中删除对应子任务ID的状态信息,然后将更新后的状态集持久化存储。
本发明的有益效果如下:
(1)通过将任务拆分为若干子任务,记录并持久化子任务状态,使得当灾备发生时不会产生任务无法继续执行、需要重新下发的问题。这极大的减少了任务调度失败的可能性,提升了调度系统的可靠性。
(2)通过将子任务结果作为子任务调度消息的确认回执,最大限度的避免了任务的重复调度、任务和任务结果丢失等问题的发生,保证了任务结果的高可靠性。
附图说明
图1是本发明中生产者和消费者之间的交互过程示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步详细说明。
AMQP协议(Advanced Message Queuing Protocol)是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品、不同开发语言等条件的限制。本发明主要使用了AMQP协议规范中的队列持久化和消息确认规范。
本发明中,调度的任务队列会被持久化在磁盘上,当调度重启时,内存中的任务队列不会丢失。在调度重启的过程中持久化的任务队列会被重新声明,并被重新调度。
本发明中,消息确认采用显式确认模式,子任务下发到任务队列后即被持久化并等待子任务下发的确认回执。Worker(任务队列的消费者)从任务队列中获取子任务执行,将执行结果放入结果队列,供生产者汇总处理;调度以结果队列中对应任务的结果作为下发的子任务的确认回执。当灾备发生时,即当应用失败、服务器意外掉电或机房断电等场景发生时,没有获取到对应结果即确认回执的子任务会被再次调度执行。
图1是生产者和消费者之间的交互过程示意图,其中上方示意了正常运行过程,下方示意了容灾恢复过程。根据图1,本实施例提供的一种具有高可靠性的任务调度方法,具体步骤如下:
(1)生产者将任务拆分为若干子任务,如图1中所示的子任务A、B、C,并将其加入任务队列,每个子任务均有一个唯一ID(例如:9dd9947519cfe4a13425f3151fff6384)作为子任务的唯一标识。记录所有未收到确认回执的子任务状态到子任务状态集,并将该状态集持久化存储(即存储在磁盘中)。
(2)Worker从任务队列中获取子任务执行并返回执行结果,执行结果中包含对应子任务的子任务ID。如图1所示,消费者执行子任务A,将子任务A的执行结果发送到结果队列。
(3)生产者从结果队列中获取到执行结果后从其中获取子任务ID作为确认回执,从子任务状态集中删除对应子任务ID的状态信息,并将更新后的状态集持久化存储。如图1所示,生产者从结果队列中获取子任务A的执行结果,从其中获取子任务A的ID作为确认回执,然后将A从子任务状态集中移除,并将更新后的状态集持久化存储。
(4)重复步骤(2)、(3)直到任务执行结束。
(5)当灾备发生时,从持久化存储中获取子任务状态集,如图1中下面的方框中所示。
(6)按照子任务状态集中子任务的状态重新生成子任务,并将子任务恢复到任务队列中。任务按照步骤(4)继续执行。如图1所示,从硬盘中读取队列数据并重新声明,下发子任务B、C,然后消费者按照步骤(4)继续执行子任务B、C。其中B任务用于说明“子任务已下发到任务队列,但未被执行”场景下的容灾方式;C任务用于说明“子任务已拆分,但还未被下发到任务队列”场景下的容灾方式。
本发明通过应用AMQP协议中的队列持久化和消息确认规范,使得当容灾发生时,内存中的任务队列不会丢失,也不会产生任务丢失和任务重复调度等问题,极大的提升了任务调度系统的可用性和可靠性。
采用本发明的方法,下发一个需要长时间持续运行的任务,任务运行过程中通过杀死调度服务进程等方法人为模拟服务失败问题,调度服务重新启动后任务继续运行并正常结束。查看任务结果,任务结果中没有出现数据丢失和数据冗余等问题,符合预期,证明了本发明方法的可行性和有效性。
采用本发明的方法,下发一个需要长时间持续运行的任务,任务运行过程中通过重启服务器等方式模拟机房掉电等容灾场景;服务器重启后调度服务正常运行,并调度任务继续运行直至任务正常结束;查看任务结果,任务结果中没有出现数据丢失和数据冗余等问题,符合预期,证明了本发明方法的可行性和有效性。
本发明的另一实施例提供一种基于AMQP协议的高可靠性任务调度系统,其包括:
任务拆分单元,用于将任务拆分为若干子任务,并将子任务放入任务队列;
持久化存储单元,用于记录所有未收到确认回执的子任务状态到子任务状态集,并将子任务状态集持久化存储;
子任务执行单元,用于从任务队列中获取子任务,然后执行子任务并将执行结果放入结果队列;
子任务状态集更新单元,用于从结果队列中获取执行结果并将其作为确认回执,从子任务状态集中删除对应子任务的状态信息,并将更新后的子任务状态集持久化存储;
进一步还包括灾备处理单元,用于当灾备场景发生时,从持久化存储中获取子任务状态集,按照子任务状态集中子任务的状态重新生成子任务,并将子任务恢复到任务队列中,使得子任务能够继续执行。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
Claims (9)
1.一种基于AMQP协议的高可靠性任务调度方法,其特征在于,包括以下步骤:
1)将任务拆分为若干子任务,并将子任务放入任务队列;
2)记录未收到确认回执的子任务状态到子任务状态集,并将子任务状态集持久化存储;
3)从任务队列中获取子任务,然后执行子任务并将执行结果放入结果队列;
4)从结果队列中获取执行结果并将其作为确认回执,从子任务状态集中删除对应子任务的状态信息,并将更新后的子任务状态集持久化存储。
2.如权利要求1所述的方法,其特征在于,当没有灾备场景发生时,重复步骤3)、4)直到任务执行结束。
3.如权利要求1所述的方法,其特征在于,当灾备场景发生时,从持久化存储中获取子任务状态集,按照子任务状态集中子任务的状态重新生成子任务,并将子任务恢复到任务队列中,使得子任务能够继续执行。
4.如权利要求1至3中任一权利要求所述的方法,其特征在于,每个子任务均有一个唯一ID作为子任务的唯一标识。
5.如权利要求4所述的方法,其特征在于,执行子任务后返回的执行结果中包含对应子任务的ID;从结果队列中获取到执行结果后从其中获取子任务ID作为确认回执,并从子任务状态集中删除对应子任务ID的状态信息,然后将更新后的状态集持久化存储。
6.一种基于AMQP协议的高可靠性任务调度系统,其特征在于,包括:
任务拆分单元,用于将任务拆分为若干子任务,并将子任务放入任务队列;
持久化存储单元,用于记录所有未收到确认回执的子任务状态到子任务状态集,并将子任务状态集持久化存储;
子任务执行单元,用于从任务队列中获取子任务,然后执行子任务并将执行结果放入结果队列;
子任务状态集更新单元,用于从结果队列中获取执行结果并将其作为确认回执,从子任务状态集中删除对应子任务的状态信息,并将更新后的子任务状态集持久化存储。
7.如权利要求6所述的系统,其特征在于,还包括灾备处理单元,用于当灾备场景发生时,从持久化存储中获取子任务状态集,按照子任务状态集中子任务的状态重新生成子任务,并将子任务恢复到任务队列中,使得子任务能够继续执行。
8.如权利要求6或7所述的系统,其特征在于,每个子任务均有一个唯一ID作为子任务的唯一标识。
9.如权利要求8所述的系统,其特征在于,所述子任务执行单元执行子任务后返回的执行结果中包含对应子任务的ID;所述子任务状态集更新单元从结果队列中获取到执行结果后从其中获取子任务ID作为确认回执,并从子任务状态集中删除对应子任务ID的状态信息,然后将更新后的状态集持久化存储。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710985447.2A CN107943567B (zh) | 2017-10-20 | 2017-10-20 | 一种基于amqp协议的高可靠性任务调度方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710985447.2A CN107943567B (zh) | 2017-10-20 | 2017-10-20 | 一种基于amqp协议的高可靠性任务调度方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107943567A true CN107943567A (zh) | 2018-04-20 |
CN107943567B CN107943567B (zh) | 2021-12-28 |
Family
ID=61935475
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710985447.2A Active CN107943567B (zh) | 2017-10-20 | 2017-10-20 | 一种基于amqp协议的高可靠性任务调度方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107943567B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110532108A (zh) * | 2019-08-15 | 2019-12-03 | 北京拉勾网络技术有限公司 | 简历投递任务的处理方法、装置、服务器和系统 |
CN110895488A (zh) * | 2018-09-12 | 2020-03-20 | 北京奇虎科技有限公司 | 任务调度方法及装置 |
CN111580945A (zh) * | 2020-04-21 | 2020-08-25 | 智业互联(厦门)健康科技有限公司 | 微服务任务协调调度方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4805107A (en) * | 1987-04-15 | 1989-02-14 | Allied-Signal Inc. | Task scheduler for a fault tolerant multiple node processing system |
JP2001306356A (ja) * | 2000-04-24 | 2001-11-02 | Canon Inc | タスクスケジューリング予測表示方法および装置 |
CN102117231A (zh) * | 2009-12-30 | 2011-07-06 | 上海文广互动电视有限公司 | 一种分布式数据备份容灾系统以及方法 |
CN103152407A (zh) * | 2013-02-20 | 2013-06-12 | 浪潮电子信息产业股份有限公司 | 一体化数据灾备系统设计方法 |
CN104793992A (zh) * | 2015-04-21 | 2015-07-22 | 浙江大学 | 一种基于任务分解的并行任务处理方法 |
CN105700958A (zh) * | 2016-01-07 | 2016-06-22 | 北京京东尚科信息技术有限公司 | 一种任务自动拆分以及子任务并行执行的方法及其系统 |
-
2017
- 2017-10-20 CN CN201710985447.2A patent/CN107943567B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4805107A (en) * | 1987-04-15 | 1989-02-14 | Allied-Signal Inc. | Task scheduler for a fault tolerant multiple node processing system |
JP2001306356A (ja) * | 2000-04-24 | 2001-11-02 | Canon Inc | タスクスケジューリング予測表示方法および装置 |
CN102117231A (zh) * | 2009-12-30 | 2011-07-06 | 上海文广互动电视有限公司 | 一种分布式数据备份容灾系统以及方法 |
CN103152407A (zh) * | 2013-02-20 | 2013-06-12 | 浪潮电子信息产业股份有限公司 | 一体化数据灾备系统设计方法 |
CN104793992A (zh) * | 2015-04-21 | 2015-07-22 | 浙江大学 | 一种基于任务分解的并行任务处理方法 |
CN105700958A (zh) * | 2016-01-07 | 2016-06-22 | 北京京东尚科信息技术有限公司 | 一种任务自动拆分以及子任务并行执行的方法及其系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110895488A (zh) * | 2018-09-12 | 2020-03-20 | 北京奇虎科技有限公司 | 任务调度方法及装置 |
CN110895488B (zh) * | 2018-09-12 | 2023-10-20 | 三六零科技集团有限公司 | 任务调度方法及装置 |
CN110532108A (zh) * | 2019-08-15 | 2019-12-03 | 北京拉勾网络技术有限公司 | 简历投递任务的处理方法、装置、服务器和系统 |
CN111580945A (zh) * | 2020-04-21 | 2020-08-25 | 智业互联(厦门)健康科技有限公司 | 微服务任务协调调度方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN107943567B (zh) | 2021-12-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103034554B (zh) | 一种纠错重启以及自动判断启动的etl调度系统及方法 | |
CN103049317B (zh) | 云环境下基于队列的高并发数据快速写入系统及方法 | |
CN107943567A (zh) | 一种基于amqp协议的高可靠性任务调度方法和系统 | |
CN103677973A (zh) | 一种分布式多任务调度管理系统 | |
CN108076098A (zh) | 一种业务处理方法及系统 | |
CN106776829A (zh) | 一种数据导出系统及其工作方法 | |
CN105653401A (zh) | 应用系统灾备、运维、监控和应急启停调度方法及装置 | |
CN101742254B (zh) | 视频监控系统信息的备份方法和中心平台服务器 | |
CN104899274A (zh) | 一种内存数据库高效远程访问方法 | |
CN111176783A (zh) | 容器治理平台的高可用方法、装置及电子设备 | |
CN111045826A (zh) | 一种针对局域网环境分布式并行渲染的计算方法及系统 | |
CN105930226A (zh) | 一种数据处理方法及装置 | |
CN109858772A (zh) | 一种工单的处理方法、装置和系统 | |
CN103544270A (zh) | 面向数据中心的通用化网络编码容错存储平台及工作方法 | |
CN101763294A (zh) | 根据时间段查看和备份系统操作日志的方法 | |
CN108304178A (zh) | 一种基于Unity3D的数据集引用方法及系统 | |
CN105607606B (zh) | 一种基于双主板架构的数据采集装置及方法 | |
CN107797874A (zh) | 一种基于嵌入式jetty和spark on yarn框架的资源管控方法 | |
CN104217314B (zh) | 路由信息抓取方法和装置 | |
CN102647308A (zh) | 一种分布式文件系统的自动测试方法 | |
CN106547614A (zh) | 一种基于消息队列的海量数据延迟导出方法 | |
CN104734895A (zh) | 业务监控系统及业务监控方法 | |
CN115775132A (zh) | 离职待办事项的自动生成系统、方法、装置和存储介质 | |
JP2010097417A (ja) | メッセージ管理システム、監視対象装置、監視装置、メッセージ管理方法およびそのプログラム | |
CN108089917A (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 | ||
CP02 | Change in the address of a patent holder |
Address after: Room 301, Unit 1, 3rd Floor, Building 15, No.1 Courtyard, Gaolizhang Road, Haidian District, Beijing, 100080 Patentee after: BEIJING KNOW FUTURE INFORMATION TECHNOLOGY CO.,LTD. Address before: 100102 room 112102, unit 1, building 3, yard 1, Futong East Street, Chaoyang District, Beijing Patentee before: BEIJING KNOW FUTURE INFORMATION TECHNOLOGY CO.,LTD. |
|
CP02 | Change in the address of a patent holder |