本发明涉及通信技术领域,特别涉及一种基于即时通信的分布式任务调度方法和装置。
背景技术:
随着云计算的快速发展,使得服务器集群规模也在不断扩展。对于运维人员来说,如何高效率的管理大规模服务器成为重中之重。据了解,目前开源分布式任务系统主要包括pssh、ansible、puppet等。
针对现有的开源工具,虽然可以解决任务分发和执行的问题,但是登录机器方式存在风险,且任务调度策略不完善不能高效实现任务的调度。
技术实现要素:
有鉴于此,本申请提供一种基于即时通信的分布式任务调度方法和装置,能够提高任务分发的效率。
为解决上述技术问题,本申请的技术方案是这样实现的:
一种基于即时通信的分布式任务调度方法,该方法包括:
接收到用户端发送的任务请求时,将所述任务请求写入数据库,并记录该任务请求对应的任务的处理状态;
当监听到数据库中新增处理状态为未处理的任务请求时,将所述任务请求通过im服务器分发给对应的任务处理器进行处理;
接收到任务处理器通过im服务器反馈的所述任务请求对应的处理状态时,将接收到的处理状态更新到所述数据库中。
一种基于即时通信的分布式任务调度装置,该装置包括:api单元和调度单元;
所述api单元,用于接收到用户端发送的任务请求时,将所述任务请求写入数据库,并记录该任务请求对应的任务的处理状态;
所述调度单元,用于监听数据库中的任务请求;当监听到数据库中新增处理状态为未处理的任务请求时,将所述任务请求通过im服务器分发给对应的任务处理器进行处理;当接收到任务处理器通过im服务器反馈的所述任务请求对应的处理状态时,将接收到的处理状态更新到所述数据库中。
一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述基于即时通信的分布式任务调度方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现所述基于即时通信的分布式任务调度方法的步骤。
由上面的技术方案可知,本申请中引入im通讯协议,由im服务器传递管理服务器和任务服务器之间的交互信息来实现分布式任务分发方式,能够提高任务分发的效率。
附图说明
图1为本申请实施例中基于即时通信的分布式任务调度装置结构示意图;
图2为本申请实施例中基于即时通信的分布式任务调度流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,下面结合附图并举实施例,对本发明的技术方案进行详细说明。
本申请实施例提供一种基于即时通信的分布式任务调度装置,引入即使通讯协议,解决大规模集群下任务分发、执行的效率问题。该装置应用于包括管理服务器、im服务器和任务处理的基于即时通信的分布式任务调度系统中的管理服务器上。
该装置可以为管理服务器,也可以为管理服务器上的一个功能模块。
管理服务器和任务器之间的交互通过im服务器来转发信息。
参见图1,图1为本申请实施例中基于即时通信的分布式任务调度装置结构示意图。该装置包括:api单元101和调度单元102。
api单元101和调度单元102之间不直接通信,通过im服务器准发消息命令。
api单元101,用于接收到用户端发送的任务请求时,将所述任务请求写入数据库,并记录该任务请求对应的任务的处理状态。
本申请实施例中针对同一任务的相关命令,如任务请求、取消命令、暂停命令、查询命令等,均携带同一任务标识,用于识别对应命令为对应哪个任务的命令。
如当前接收到的任务请求携带的任务标识为1,则记录任务1对应的处理状态为:未处理。
调度单元102,用于监听数据库中的任务请求;当监听到数据库中新增处理状态为未处理的任务请求时,将所述任务请求通过im服务器分发给对应的任务处理器进行处理。
调度单元102实时监听数据库,每新写入一个任务请求时,处理该任务请求。
本申请实施例中具体实现时,为了调度单元102不频繁与数据库交互,调度单元102,进一步用于当监听到数据库中新增处理状态为未处理的任务请求时,将所述任务请求存储到缓存队列中;再将所述任务请求通过im服务器分发给对应的任务处理器进行处理。
调度单元102,用于针对同一任务进行串行处理;针对不同任务进行并行处理。也就是说,调度单元同时接收到多条命令时,针对同一任务的命令使用一个进程按照接收命令的先后顺序,串行处理;
针对不同的任务,使用不同的进程同时进行处理。也就是任务1的命令和任务2的命令会不干扰,各自在各自的进程中进行处理。
调度单元102,在进行任务分发时,根据任务请求中携带的任务处理器的标识,将对应任务分发给对应的任务处理器。本申请实施例中可以采用qq分发模式,即只考虑任务处理器的标识进行任务分发,不考虑任务处理器是否在线等因素。
任务处理器接收到调度im服务器转发待处理任务时,进行任务处理,在任务处理完成时,通过im服务器将处理状态反馈给调度单元102。
调度单元102,用于当接收到任务处理器通过im服务器反馈的所述任务请求对应的处理状态时,将接收到的处理状态更新到所述数据库中。
调度单元,进一步用于接收到任务处理器通过im服务器反馈的所述任务请求对应的处理状态时,将反馈处理状态的任务请求从缓存队列中删除,再将接收到的处理状态更新到所述数据库中。
任务处理器处理完任务时,根据处理结果可以记为的处理状态为成功处理状态和处理失败状态。
api单元101,用于接收到用户端发送的查询任务的处理状态的请求时,从数据库中获取对应任务的处理状态,并响应给用户端。
在数据库中查询任务的处理状态时,根据任务的标识查询到对应的任务,进而查询到任务的处理状态。
本申请实施例中任务的处理状态还包括已处理状态,其中,已处理状态包括:成功处理状态和处理失败状态。
上述为本申请实施例中针对任务请求处理的相关过程,下面分别给出针对任务的暂停和取消命令,以及取消暂停命令的相关处理过程:
针对用户端发送的暂停命令;
api单元101,用于接收用户端发送的暂停命令时,发送给im服务器,使im服务器转发给调度单元102;
api单元不直接同调度单元进行交互。
调度单元102,用于接收到im服务器转发的暂停命令时,通过im服务器通知对应的任务处理器暂停对应任务的处理;将缓存队列中对应的任务请求标记为暂停状态;并更新数据库中该暂停命令对应的任务请求的状态为暂停状态。
针对用户端发送的取消暂停命令:
api单元101,用于接收到用户端发送的取消暂停命令时,发送给im服务器,使im服务器转发给调度单元102;
调度单元102,用于接收到im服务器转发的取消暂停命令时,通过im服务器通知对应的任务处理器继续进行对应任务的处理;将缓存队列中对应的任务请求删除暂停状态的标记;更新数据库中对应任务请求的状态为未处理状态。
针对用户端发送的取消命令:
api单元101,用于接收到用户端发送的取消命令时,转发给im服务器,使im服务器转发给调度单元102;
调度单元102,用于接收到im服务器转发的取消命令时,通过im服务器通知对应的任务处理器取消对应任务的处理;将缓存队列中对应的任务请求删除;并更新数据库中该暂停命令对应的任务请求的状态为取消状态。
本申请实施例中任务的处理状态包括:未处理状态、暂停状态、取消状态和已处理状态。
在通过api接口接收到用户端口的处理状态查询时,将数据库中对应任务的处理状态反馈给用户端即可。本申请实施例中的任务请求、查询请求、取消命令、暂停命令、取消暂停命令等命令均携带任务标识,以确定针对同一任务的相关命令,任务标识全局唯一。
上述实施例的单元可以集成于一体,也可以分离部署;可以合并为一个单元,也可以进一步拆分成多个子单元。
基于同样的发明构思,本申请实施例中还一种基于即时通信的分布式任务调度方法。参见图2,图2为本申请实施例中基于即时通信的分布式任务调度流程示意图。具体步骤为:
步骤201,管理服务器接收到用户端发送的任务请求时,将所述任务请求写入数据库,并记录该任务请求对应的任务的处理状态。
步骤202,当该管理服务器监听到数据库中新增处理状态为未处理的任务请求时,将所述任务请求通过im服务器分发给对应的任务处理器进行处理。
本步骤中当监听到数据库中新增处理状态为未处理的任务请求时,将所述任务请求通过im服务器分发给对应的任务处理器进行处理之前,所述方法进一步包括:
将所述任务请求存储到缓存队列中。
管理服务器针对同一任务进行串行处理;针对不同任务进行并行处理。
步骤203,当该管理服务器接收到任务处理器通过im服务器反馈的所述任务请求对应的处理状态时,将接收到的处理状态更新到所述数据库中。
本步骤中接收到任务处理器通过im服务器反馈的所述任务请求对应的处理状态时,将接收到的处理状态更新到所述数据库中之前,所述方法进一步包括:
将反馈处理状态的任务请求从缓存队列中删除。
本申请实施例中具体实现时,对任务状态实时写入到缓存队列,且把任务状态异步协会数据库,便于运维人员的可追溯和归档。
在设备故障恢复后,缓存队列中不存在对应的任务请求,可以到数据库中读取未处理完成的任务请求,重新对该任务请求进行调度,若任务处理器已处理完成,则再次反馈处理任务结果;若未完成,继续执行任务,待完成任务处理后再次反馈任务处理结果。
该方法进一步包括:
该管理服务器接收到用户端发送的查询任务的处理状态的请求时,从数据库中获取对应的处理状态,并响应给用户端。
该管理服务器接收到用户端发送的通过im服务器转发的暂停命令时,具体处理过程如下:
通过im服务器通知对应的任务处理器暂停对应任务的处理;
将缓存队列中对应的任务请求标记为暂停状态;
并更新数据库中该暂停命令对应的任务请求的状态为暂停状态。
该管理服务器接收到用户端发送的通过im服务器转发的取消暂停命令时,具体处理过程如下:
通过im服务器通知对应的任务处理器继续进行对应任务的处理;
将缓存队列中对应的任务请求删除暂停状态的标记;
更新数据库中对应任务请求的状态为未处理状态。
该管理服务器接收到用户端发送的通过im服务器转发的取消命令时,具体处理过程如下:
通过im服务器通知对应的任务处理器取消对应任务的处理;
将缓存队列中对应的任务请求删除;
并更新数据库中该暂停命令对应的任务请求的状态为取消状态。
此外,本申请实施例中还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述基于即时通信的分布式任务调度方法的步骤。
另外,本申请实施例中还提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现所述基于即时通信的分布式任务调度方法的步骤。
综上所述,本申请通过引入即使通讯协议,解决大规模集群下任务分发、执行的效率问题;能够实现任务分发的实时性、完善新和可靠性,从而提高执行任务的高效率问题。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。