CN107943567B - 一种基于amqp协议的高可靠性任务调度方法和系统 - Google Patents
一种基于amqp协议的高可靠性任务调度方法和系统 Download PDFInfo
- Publication number
- CN107943567B CN107943567B CN201710985447.2A CN201710985447A CN107943567B CN 107943567 B CN107943567 B CN 107943567B CN 201710985447 A CN201710985447 A CN 201710985447A CN 107943567 B CN107943567 B CN 107943567B
- 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.)
- 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/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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
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 (3)
1.一种基于AMQP协议的高可靠性任务调度方法,其特征在于,包括以下步骤:
1)将任务拆分为若干子任务,并将子任务放入任务队列;
2)记录未收到确认回执的子任务状态到子任务状态集,并将子任务状态集持久化存储;
3)从任务队列中获取子任务,然后执行子任务并将执行结果放入结果队列;
4)从结果队列中获取执行结果并将其作为确认回执,从子任务状态集中删除对应子任务的状态信息,并将更新后的子任务状态集持久化存储;
每个子任务均有一个唯一ID作为子任务的唯一标识;
执行子任务后返回的执行结果中包含对应子任务的ID;从结果队列中获取到执行结果后从其中获取子任务ID作为确认回执,并从子任务状态集中删除对应子任务ID的状态信息,然后将更新后的状态集持久化存储;
当灾备场景发生时,从持久化存储中获取子任务状态集,按照子任务状态集中子任务的状态重新生成子任务,并将子任务恢复到任务队列中,使得子任务能够继续执行。
2.如权利要求1所述的方法,其特征在于,当没有灾备场景发生时,重复步骤3)、4)直到任务执行结束。
3.一种基于AMQP协议的高可靠性任务调度系统,其特征在于,包括:
任务拆分单元,用于将任务拆分为若干子任务,并将子任务放入任务队列;
持久化存储单元,用于记录所有未收到确认回执的子任务状态到子任务状态集,并将子任务状态集持久化存储;
子任务执行单元,用于从任务队列中获取子任务,然后执行子任务并将执行结果放入结果队列;
子任务状态集更新单元,用于从结果队列中获取执行结果并将其作为确认回执,从子任务状态集中删除对应子任务的状态信息,并将更新后的子任务状态集持久化存储;
灾备处理单元,用于当灾备场景发生时,从持久化存储中获取子任务状态集,按照子任务状态集中子任务的状态重新生成子任务,并将子任务恢复到任务队列中,使得子任务能够继续执行;
每个子任务均有一个唯一ID作为子任务的唯一标识;
所述子任务执行单元执行子任务后返回的执行结果中包含对应子任务的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 CN107943567A (zh) | 2018-04-20 |
CN107943567B true 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) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110895488B (zh) * | 2018-09-12 | 2023-10-20 | 三六零科技集团有限公司 | 任务调度方法及装置 |
CN110532108B (zh) * | 2019-08-15 | 2022-10-11 | 北京拉勾网络技术有限公司 | 简历投递任务的处理方法、装置、服务器和系统 |
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 | 北京京东尚科信息技术有限公司 | 一种任务自动拆分以及子任务并行执行的方法及其系统 |
Also Published As
Publication number | Publication date |
---|---|
CN107943567A (zh) | 2018-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11210185B2 (en) | Method and system for data recovery in a data system | |
US10831741B2 (en) | Log-shipping data replication with early log record fetching | |
CN107943567B (zh) | 一种基于amqp协议的高可靠性任务调度方法和系统 | |
CN110611707B (zh) | 一种任务调度的方法及装置 | |
CN108089915B (zh) | 基于消息队列的业务控件化处理的方法及系统 | |
CN111064789B (zh) | 数据迁移的方法和系统 | |
US11392414B2 (en) | Cooperation-based node management protocol | |
CN111400104B (zh) | 数据同步方法及装置、电子设备、存储介质 | |
EP2995028B1 (en) | Tuple recovery | |
CN106815094B (zh) | 一种用于实现主备同步模式下事务提交的方法与设备 | |
CN109257396B (zh) | 一种分布式锁调度方法及装置 | |
CN111813868A (zh) | 数据同步方法及装置 | |
CN111880947B (zh) | 一种数据传输方法及装置 | |
CN106339176B (zh) | 中间文件处理方法、客户端、服务器和系统 | |
CN111679892A (zh) | 分布式事务的处理方法、装置、设备及介质 | |
CN114860505A (zh) | 一种对象存储数据异步备份方法及系统 | |
EP3396553A1 (en) | Method and device for processing data after restart of node | |
CN112468598A (zh) | 一种基于amqp协议实现消息补偿推送的方法 | |
CN109189746B (zh) | 通用流式Shuffle引擎的实现方法、装置、设备及存储介质 | |
CN112597227A (zh) | 电力配网调度中的信息处理方法、装置及存储介质 | |
CN112286727A (zh) | 一种基于增量快照的时空隔离域快速恢复方法和系统 | |
CN110806917A (zh) | 一种防脑裂的虚拟机高可用的管理装置及方法 | |
CN110908821A (zh) | 任务失败管理的方法、装置、设备和存储介质 | |
CN111857538A (zh) | 数据处理方法、装置及存储介质 | |
CN110147370B (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 | ||
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. |