CN109582466B - 一种定时任务执行方法、分布式服务器集群及电子设备 - Google Patents
一种定时任务执行方法、分布式服务器集群及电子设备 Download PDFInfo
- Publication number
- CN109582466B CN109582466B CN201710912217.3A CN201710912217A CN109582466B CN 109582466 B CN109582466 B CN 109582466B CN 201710912217 A CN201710912217 A CN 201710912217A CN 109582466 B CN109582466 B CN 109582466B
- Authority
- CN
- China
- Prior art keywords
- task
- server
- distributed
- servers
- timing
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- 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
Abstract
本发明实施例提供了一种定时任务执行方法、分布式服务器集群及电子设备,所述方法包括,分布式服务器集群中的一台第一服务器获得定时任务创建请求;第一服务器根据定时任务创建请求,将定时任务创建请求转换为任务创建消息,并向消息队列发布任务创建消息;分布式服务器集群中的部分或全部服务器从消息队列获得任务创建消息;部分或全部服务器获得任务创建消息后,根据任务创建消息各自创建定时任务;当定时任务被触发时,部分或全部服务器尝试从预设存储位置获取分布式锁;部分或全部服务器中成功获得分布式锁的一台第二服务器执行定时任务。由于不需要指定固定的服务器接收定时任务,从而降低了创建或配置定时任务的复杂度。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种定时任务执行方法、分布式服务器集群及电子设备。
背景技术
随着计算机技术的高速发展,对于数据处理的自动化程度也越来越高,例如在企业级管理系统中十分常见的定时任务。定时任务是指服务器在预设的时刻或者按固定的周期自动执行的程序,例如,对数据按固定周期进行筛选等处理。定时任务在单一服务器环境中,其实现方式比较简单。一般来说,首先会通过一个配置管理界面对定时任务进行管理,包括配置任务的执行类,触发时刻及周期,有效时间等。任务配置完毕后,服务器会自动启动一个线程或进程使任务在指定的触发时刻或按周期执行。
随着所需处理的业务量越来越大,单服务器模式越来越不能满足服务的需要,所以为了应对这种情况,服务器采用了集群的工作模式。集群是以复制的方式部署的多台服务器,并通过专门的负载均衡器使用负载均衡算法实现对集群中服务器的调用,使得通过分布式的集群系统来应对大量的数据处理业务。
然而,现有技术中,当定时任务在集群环境下进行实现时,集群中可以固定某一台服务器来接收任务,然而固定一台服务器接收定时任务,使得每次进行定时任务的创建或配置时,都必须指定该服务器,从而使得对于定时任务的创建或配置变得较为复杂,并且当该指定的一台服务器发生宕机重启时,会造成定时任务的丢失。
发明内容
本发明实施例的目的在于提供种一种定时任务执行方法、分布式服务器集群及电子设备,以实现在集群中降低对定时任务的创建或配置的复杂度,并且避免现有技术中,通过指定一台服务器接收并执行定时任务,当该服务器发生宕机重启时,会造成的定时任务丢失的问题。具体技术方案如下:
本发明实施例提供了一种定时任务执行方法,应用于分布式服务器集群,包括:
分布式服务器集群中的一台第一服务器获得定时任务创建请求;
所述第一服务器根据所述定时任务创建请求,将所述定时任务创建请求转换为任务创建消息,并向消息队列发布所述任务创建消息;
所述分布式服务器集群中的部分或全部服务器从所述消息队列获得所述任务创建消息;
所述部分或全部服务器获得所述任务创建消息后,所述部分或全部服务器根据所述任务创建消息各自创建定时任务;
当所述定时任务被触发时,所述部分或全部服务器尝试从预设存储位置获取分布式锁;
所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器执行所述定时任务。
可选的,所述分布式服务器集群中的一台第一服务器获得定时任务创建请求,包括:
所述分布式服务器集群中的一台第一服务器从负载均衡器获得定时任务创建请求,所述负载均衡器用于通过负载均衡算法向分布式服务器集群中的各服务器分配各类任务。
可选的,在所述第一服务器根据所述定时任务创建请求,将所述定时任务创建请求转换为任务创建消息,并向消息队列发布所述任务创建消息之前,所述方法还包括:
所述分布式服务器集群中的部分或全部服务器订阅消息队列的消息。
可选的,在所述部分或全部服务器根据所述任务创建消息各自创建定时任务之后,所述方法还包括:
所述分布式服务器集群中的一台第三服务器获得定时任务控制请求,所述定时任务控制请求至少包括以下请求中的一种或多种:定时任务暂停请求、定时任务重启请求、定时任务依赖请求;
所述第三服务器根据所述定时任务控制请求,将所述定时任务控制请求转换为任务控制消息,并向所述消息队列发布所述任务控制消息;
所述部分或全部服务器从所述消息队列获得所述任务控制消息;
所述部分或全部服务器获得所述任务控制消息后,根据所述任务控制消息,对所述定时任务进行处理。
可选的,所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器执行所述定时任务,包括:
当所述部分或全部服务器中的一台第二服务器成功获得所述分布式锁时,所述第二服务器查看执行日志;
当所述执行日志中没有记录所述定时任务的执行时刻,
或所记录的所述定时任务的执行时刻与当前时刻的差值大于或等于预设阈值时,所述第二服务器执行所述定时任务。
可选的,在所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器执行所述定时任务之后,所述方法还包括:
第二服务器在所述执行日志中添加所述定时任务的执行时刻,或更新所述执行日志中所述定时任务的执行时刻。
可选的,所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器执行所述定时任务,包括:
所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器从关系数据库中获得所述定时任务的任务内容;
所述第二服务器针对所述任务内容执行所述定时任务。
可选的,在所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器执行所述定时任务之后,所述方法还包括:
所述成功获得所述分布式锁的一台第二服务器将所述定时任务的执行结果写入任务日志,所述任务日志用于记录所述定时任务的执行结果。
本发明实施例还提供了一种分布式服务器集群,所述分布式服务器集群至少包括,一台或多台服务器,消息队列和分布式锁;
所述分布式服务器集群中的第一服务器获得定时任务创建请求;
所述第一服务器根据所述定时任务创建请求,将所述定时任务创建请求转换为任务创建消息,并向消息队列发布所述任务创建消息;
所述分布式服务器集群中的部分或全部服务器从所述消息队列获得所述任务创建消息;
所述部分或全部服务器获得所述任务创建消息后,所述部分或全部服务器根据所述任务创建消息各自创建定时任务;
当所述定时任务被触发时,所述部分或全部服务器尝试从预设存储位置获取分布式锁;
所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器执行所述定时任务。
可选的,所述分布式服务器集群中还包括负载均衡器;
所述分布式服务器集群中的一台第一服务器从负载均衡器获得定时任务创建请求,所述负载均衡器用于通过负载均衡算法向分布式服务器集群中的各服务器分配各类任务。
可选的,所述分布式服务器集群中的部分或全部服务器订阅消息队列的消息。
可选的,所述分布式服务器集群中的一台第三服务器获得定时任务控制请求,所述定时任务控制请求至少包括以下请求中的一种或多种:定时任务暂停请求、定时任务重启请求、定时任务依赖请求;
所述第三服务器根据所述定时任务控制请求,将所述定时任务控制请求转换为任务控制消息,并向所述消息队列发布所述任务控制消息;
所述部分或全部服务器从所述消息队列获得所述任务控制消息;
所述部分或全部服务器获得所述任务控制消息后,根据所述任务控制消息,对所述定时任务进行处理。
可选的,当所述部分或全部服务器中的一台第二服务器成功获得所述分布式锁时,所述第二服务器查看执行日志;
当所述执行日志中没有记录所述定时任务的执行时刻,
或所记录的所述定时任务的执行时刻与当前时刻的差值大于或等于预设阈值时,所述第二服务器执行所述定时任务。
可选的,第二服务器在所述执行日志中添加所述定时任务的执行时刻,或更新所述执行日志中所述定时任务的执行时刻。
可选的,所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器从关系数据库中获得所述定时任务的任务内容;所述第二服务器针对所述任务内容执行所述定时任务。
可选的,所述成功获得所述分布式锁的一台第二服务器将所述定时任务的执行结果写入任务日志,所述任务日志用于记录所述定时任务的执行结果。
本发明实施例还提供了一种电子设备,其特征在于,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述机器可执行指令被所述处理器执行时实现本发明实施例中的定时任务控制方法。
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例中的定时任务控制方法。
本发明实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行本发明实施例中的定时任务控制方法。
本发明实施例提供了一种计算机程序,当其在计算机上运行时,使得计算机执行本发明实施例中的定时任务控制方法。
本发明实施例提供的一种定时任务执行方法、装置及电子设备,可以在分布式服务器集群中的任意一台第一服务器获得定时任务创建请求之后,将定时任务创建请求转换为任务创建消息,并向消息队列发布任务创建消息,使得分布式服务器集群中的全部或部分服务器都可以从消息队里获得任务创建消息,并根据任务创建消息,创建该定时任务。定时任务触发时,通过分布式锁,使得创建有该定时任务的全部或部分服务器中只有一台第二服务器可以执行该定时任务。从而可以在创建或配置定时任务时,不需要指定固定的服务器来创建并执行该定时任务,降低了创建定时任务的复杂度,并且通过在分布式服务器集群中的部分或全部服务器上都创建有该定时任务,同时通过分布式锁,使得定时任务不会重复执行,从而避免了现有技术中,通过指定一台固定的服务器接收并执行定时任务,当该服务器发生宕机重启时造成的定时任务丢失的问题。当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的定时任务控制方法的流程图;
图2为本发明实施例提供的应用定时任务控制方法的分布式服务器集群的框架图;
图3为本发明实施例提供的创建定时任务的流程图;
图4为本发明实施例提供的执行定时任务的流程图;
图5为本发明实施例提供的分布式服务器集群的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,图1为本发明实施例提供的定时任务控制方法的流程图,应用于分布式服务器集群,包括:
步骤101,分布式服务器集群中的一台第一服务器获得定时任务创建请求。
定时任务可以是在预设时间触发执行的任务,也可以是按预设周期触发执行的任务。定时任务的触发是指满足该定时任务的执行条件时,开始执行该定时任务,例如,当到达该定时任务的预设的触发时间,该定时任务开始执行。
在现有的各种系统,如管理系统等,定时任务都是十分常见的功能类型。例如,定时任务可以为定期的对数据库中新获得的数据进行压缩、每天的固定时刻对数据进行一次筛选等等。定时任务被创建后,创建该定时任务的服务器或应用,可以自动启动一个线程或进程使该定时任务在指定的触发时刻或按一定的周期执行。
在本发明实施例中,在创建定时任务时,可以先由分布式服务器集群中的一台第一服务器首先获得定时任务创建请求。第一服务器可以是该分布式服务器集群的任意一台服务器,不需要指定某一台固定的服务器来获得该定时任务创建请求。定时任务创建请求用于请求该分布式服务器集群创建一个或多个定时任务,定时任务创建请求可以由该分布式服务器集群的用户向该分布式服务器集群发起。
用户可以通过分布式服务器集群的管理接口,向该分布式服务器集群发起定时任务创建请求。例如,分布式服务器集群的管理接口可以是分布式服务器集群中任何一个服务器上所安装的集群管理软件,通过在该管理软件的管理界面中添加一条新的定时任务,可以向分布式服务器集群发起一个定时任务创建请求,分布式服务器集群会选择集群中的一台第一服务器从该管理界面或管理软件中获得该定时任务创建请求。
步骤102,第一服务器根据定时任务创建请求,将定时任务创建请求转换为任务创建消息,并向消息队列发布任务创建消息。
消息队列是消息在多台服务器或应用之间传递的容器,通常它是以异步的方式实现消息的发送与接收,例如,在实际应用中,消息队列可以通过RabbitMQ、ActiveMQ、ZeroMQ、Kafka等消息队列软件实现,在本发明实施例中,优选的,消息队列可以通过Redis数据库来实现。
在本发明实施例的一种实现方式中,消息队列可以部署在一台专门的消息队列服务器上,该消息队列服务器专门为分布式服务器集群中的服务器提供消息传输的服务。通过一台专门的服务器来部署消息队列,可以提高消息队列的运行效率和速度,进而可以提高整个分布式服务器集群的运行效率。
在本发明实施例的另一种实现方式中,消息队列也可以集成在分布式服务器集群中的普通服务器上,该服务器除了正常执行自身所配置的任务,同时还为集群中其他服务器提供消息传输的服务。消息队列通过集成化的形式部署,可以节约整个分布式服务器集群中的硬件资源,降低设备成本。
第一服务器获得定时任务创建请求后,可以将该定时任务创建请求,转换为能够通过消息队列进行传输的任务创建消息。从而可以通过消息队列,将该任务创建消息传输至分布式服务器集群中的全部或部分服务器中。以使分布式服务器集群中的全部或部分服务器在接收到该任务创建消息后,能够各自根据任务创建消息,创建定时任务。
任务创建消息是能够通过消息队列进行传输的消息。第一服务器获得定时任务创建请求之后,在该任务创建请求中可以包括该定时任务的具体信息,例如,创建该定时任务的指令,该定时任务所要执行的具体步骤,该定时任务的触发时间等等。第一服务器根据该定时任务创建请求中的具体信息,可以将该具体信息转化消息队列所能传输的消息的格式,从而构成任务创建消息;或者当所获得的定时任务创建请求可以直接通过消息队列进行传输时,也可以直接将所获得的定时任务创建请求作为任务创建消息。
第一服务器将定时任务创建请求转换为任务创建消息之后,就可以向消息队列发布该任务创建消息。消息队列接收到该任务创建消息后,可以将该任务创建消息发送至消息队列向分布式服务器集群中的全部或部分服务器。
具体的,消息队列向分布式服务器集群中的全部或部分服务器可以通过消息队列中的“发布/订阅”功能来实现。发布订阅功能是指在分布式服务器集群中的服务器可以从消息队列订阅预设类型或者预设主题的消息,当有其他服务器向消息队列发布了预设类型或者预设主题的消息时,消息队列可以向订阅了该预设类型或者预设主题的服务器发送所获得的消息。在本发明实施例中,定时任务可以作为一种预设的消息类型,或者预设的消息主题。当消息队列接收到第一服务器发布的任务创建消息后,可以向分布式服务器集群中订阅了该类型或者主题的全部或部分服务器发送该任务创建消息。
步骤103,分布式服务器集群中的部分或全部服务器从消息队列获得任务创建消息。
在本发明实施例的一种实现方式中,在分布式服务器集群中,并不需要全部的服务器都创建该定时任务,所以可以由分布式服务器集群中的部分服务器从消息队列中获得任务创建消息,部分服务器中可以包括向消息通道发布该任务创建消息的第一服务器。其中,部分服务器的具体数量可以根据需要进行灵活的配置。
在本发明实施例的另一种实现方式中,分布式服务器集群中的全部服务器都可以创建该定时任务,所以分布式服务器集群中的全部服务器都可以从消息队列获得任务创建消息。
从消息队列获得任务创建消息,可以是消息队列向分布式服务器集群中的部分或全部服务器推送该任务创建消息,也可以是分布式服务器集群中的部分或全部服务器从消息队列主动获得。
步骤104,部分或全部服务器获得任务创建消息后,部分或全部服务器根据任务创建消息各自创建所述定时任务。
任务创建消息中可以包括该定时任务的具体信息,例如,创建该定时任务的指令,该定时任务所要执行的具体步骤,该定时任务的触发时间等等。当分布式服务器集群中的部分或全部服务器从消息队列获得了任务创建消息后,上述部分或全部服务器就可以根据任务创建消息中的具体信息,各自创建该定时任务。
步骤105,当定时任务被触发时,所述部分或全部服务器尝试从预设存储位置获取分布式锁。
定时任务在预设的时间被触发,也可以按预设的周期被触发。当定时任务被触发后,所有分布式服务器集群中的已经创建了该定时任务的服务器,即从消息队列中获得了任务创建消息的部分或全部服务器,都开始为执行该定时任务做准备,如果每台服务器各自开始执行定时任务,则会导致定时任务被重复执行,造成资源浪费。因此,虽然定时任务在多个服务器上创建,但定时任务在一次触发时,仅需要一个服务器执行该任务,定时任务不需要重复执行。所以当定时任务被触发时,所述部分或全部服务器先尝试从预设存储位置竞争获得分布式锁,获得分布式锁之后再开始尝试执行该定时任务。
分布式锁是在分布式系统之间同步访问共享资源的一种方式,它是以互斥的方式来保证共享资源的一致性,可以用于限制每次只有一个服务器执行定时任务,每次只能由一台服务器成功获得。分布式锁通过互斥的方式保证每次只有一台需要执行定时任务的服务器可以从预设位置获得分布式锁。当一台服务器获得了分布式锁之后,则其他服务器就不能再获得分布式锁。其中,预设位置可以是在分布式服务器集群中能够用于存储分布式锁的任何位置,例如,可以存储在分布式服务器集群中的关系数据中,也可以存储在分布式服务器集群中的其他数据库,或者还可以存储在分布式服务器集群中的预设服务器上。
优选的,所述预设存储位置可以是Redis数据库,部分或全部服务器尝试从Redis数据库中获得分布式锁。
分布式服务器集群中,可以通过关系数据库来存储分布式服务器集群中的各种数据。可以有一个或多个专门的服务器作为分布式服务器集群的关系数据库,分布式服务器集群中的服务器都可以访问该关系数据库。
在很多情况下,可以通过关系数据库来实现分布式锁的功能,然而在现有的规模较大的分布式服务器集群中,分布式服务器集群的系统性能的瓶颈往往来自于关系数据库的输入输出,关系数据库承担存储业务数据的压力已经很大,再通过关系数据库实现分布式锁的功能则更加降低了分布式服务器集群的系统性能。
所以,在本发明实施例中,可以从Redis数据库中获得分布式锁,从而降低对关系数据库的依赖,提高分布式服务器集群的系统性能。
Redis数据库是一款内存数据库,支持网络、可基于内存亦可持久化的日志型、Key-Value(键-值)数据库。其可以同时包含消息队列与分布式锁的功能。
在本发明实施例中,Redis数据库可以同时实现消息队列和分布式锁。Redis数据库可以被部署在分布式服务器集群中一台专门用于提供消息队列服务的服务器上,也可以集成式的部署在分布式服务器集群中的任意一台普通服务器上。
优选的,在本发明具体实施例中,可以将Redis数据库部署在一台专门的服务器上,从而可以提高分布式服务器集群中的服务器访问Redis数据库的效率,进而提高整个分布式服务器集群的运行效率。
在本发明实施例中还可以通过其他的方式实现消息队列和分布式锁,例如,可以通过ActiveMQ软件来单独实现消息队列的功能,通过zookeeper系统单独实现分布式锁的功能等等。只要满足本发明实施例中对于消息队列和分布式锁的功能,都可以应用于本发明实施例中,也都属于本发明实施例的保护范围。
步骤106,分布式服务器集群中的部分或全部服务器中,成功获得分布式锁的一台第二服务器执行定时任务。
当定时任务被触发时,分布式服务器集群中创建有该定时任务的部分或全部服务器都尝试从预设存储位置获取分布式锁,但由于分布式锁以互斥的方式来保证共享资源的一致性,所以在该部分或全部服务器中,只有一台第二服务器可以获得该分布式锁。该第二服务器可以是上述部分或全部服务器中任意一台服务器,由于上述步骤中的第一服务器中也可以创建有该定时任务时,所以第二服务器可能与第一服务器为同一台服务器。当该第二服务器成功获得了分布式锁之后,其他服务器就不能再获得分布式锁。
第二服务器成功获得了分布式锁,就可以执行所创建的定时任务。而其他未能获得分布式锁的服务器,虽然定时任务也被触发,但由于没有获得分布式锁,所以不需要执行该定时任务,可以直接取消执行该定时任务,还可以直接放弃并删除该定时任务,当该定时任务为周期性触发的定时任务时,还可以取消本次的执行,继续保留该定时任务,等待该定时任务在下一个周期被触发。通过获取分布式锁的方式,保证了定时任务不会被重复执行。并且获得了分布式锁的服务器执行完成定时任务后,可以释放该分布式锁。
在本发明实施例中,在分布式服务器集群中的任意一台第一服务器获得定时任务创建请求之后,将定时任务创建请求转换为任务创建消息,并向消息队列发布任务创建消息,使得分布式服务器集群中的全部或部分服务器都可以从消息队里获得任务创建消息,并根据任务创建消息,创建该定时任务。定时任务触发时,通过分布式锁,使得创建有该定时任务的全部或部分服务器中只有一台第二服务器可以执行该定时任务。从而可以在创建或配置定时任务时,不需要指定固定的服务器来创建并执行该定时任务,降低了创建定时任务的复杂度,并且通过在分布式服务器集群中的部分或全部服务器上都创建有该定时任务,同时通过分布式锁,使得定时任务不会重复执行,从而避免了现有技术中,通过指定一台固定的服务器接收并执行定时任务,当该服务器发生宕机重启时造成的定时任务丢失的问题。
可选的,结合上述的实施例,在本发明实施例提供的定时任务控制方法中,步骤101,分布式服务器集群中的一台第一服务器获得定时任务创建请求,可以包括:
分布式服务器集群中的一台第一服务器从负载均衡器获得定时任务创建请求,负载均衡器用于通过负载均衡算法向分布式服务器集群中的各服务器分配各类任务。
在分布式服务器集群中,可以包括专门用于平衡集群中各服务器负载的负载均衡器。分布式服务器集群所要进行处理的各种任务都首先由该负载均衡器接受外部发来的指令任务,然后负载均衡器通过负载均衡算法,将指令任务分配至集群服务器中的一台服务器,从而使得分布式服务器集群中的各个服务器的负载较为平衡,避免出现个别服务器负载过高,而其他服务器的负载过低的情况。
例如,用户通过在分布式服务器集群管理软件的管理界面添加一条新的定时任务,分布式服务器集群中的负载均衡器,通过负载均衡算法,从分布式服务器集群中选择一台第一服务器,并使得该第一服务器从该管理界面或管理软件中获得该定时任务创建请求;或者,也可以由负载均衡器首先从该管理界面或管理软件中获得该定时任务创建请求,并将该定时任务创建请求转发至第一服务器。
在本发明实施例中,负载均衡器通过负载均衡算法,将定时任务创建信息分配至分布式服务器集群中的一台第一服务器中,使得在分布式服务器集群中创建该定时任务时,能够使得整个分布式服务器集群中各个服务器的负载趋于平衡。
具体的,负载均衡器在分布式服务器集群中如何部署,以及负载均衡器所采用的负载均衡算法,在现有技术中都有很多种实现方式,可以根据需要进行选择,只要能够满足本发明实施例中的作用和功能,都可以应用于本发明实施例中。
可选的,结合上述实施例,在本发明实施例提供的定时任务控制方法中,在步骤102,第一服务器根据定时任务创建请求,将定时任务创建请求转换为任务创建消息,并向消息队列发布所述任务创建消息之前,所述方法还包括:
步骤110,分布式服务器集群中的部分或全部服务器订阅消息队列的消息。
在第一服务器向消息队列发布任务创建消息的之前的任何时候,例如,在分布式服务器集群建立时,或者配置该分布式服务器集群时,或者在第一服务器获得定时任务创建请求之前。分布式服务器集群中的部分或全部服务器,可以向消息队列订阅与定时任务对应的消息。例如,定时任务可以作为一种的消息类型,或者消息主题,分布式服务器集群中的部分或全部服务器可以订阅该类型或主题,当消息队列得到与该类型或主题对应的消息后,如,任务创建消息等,就可以向所有订阅了该类型或主题的服务器发送该消息。
在本发明实施例中,通过消息队列的发布订阅模式,使得第一服务器向消息队列发布任务创建消息之后,消息队列可以向已经订阅了该消息队列消息的服务器推送该任务创建消息,从而使得分布式服务器集群中的部分或全部服务器可以及时的从消息队列获得任务创建消息,保证了可以在分布式服务器集群中的多个服务器上创建定时任务。
可选的,结合上述实施例,在本发明实施例提供的定时任务控制方法中,在步骤104,所述部分或全部服务器根据任务创建消息各自创建所述定时任务之后,所述方法还包括:
步骤111,分布式服务器集群中的一台第三服务器获得定时任务控制请求,所述定时任务控制请求至少包括以下请求中的一种或多种:定时任务暂停请求、定时任务重启请求、定时任务依赖请求。
该第三服务器可以为该分布式服务器集群中的任意一台服务器。并且该第三服务器可以与,第一服务器或第二服务器,为同一台服务器。
当分布式服务器集群中部分或全部服务器根据任务创建消息各自创建所述定时任务之后,用户还可以对所创建的定时任务进行控制,例如,将定时任务删除、暂停、重启以及控制定时任务的依赖关系等等。
对于定时任务的进行控制,可以通过向分布式服务器集群发送定时任务控制请求的方式来实现,定时任务控制请求中包括对定时任务的控制指示,使得可以根据该控制指示,对所创建的定时任务进行相应的控制。
具体的,第三服务器获得定时任务控制请求的方式与第一服务器获得定时任务创建请求的方式相同,例如,同样可以由用户在相应管理软件的管理界面中添加对定时任务的控制请求,分布式服务器集群可以直接选择一台第三服务器从管理软件或管理界面获得该定时任务的控制请求,也可以通过负载均衡器来选择一台第三服务器,并将该定时任务的控制请求分配给该第三服务器。
步骤112,该第三服务器根据定时任务控制请求,将定时任务控制请求转换为任务控制消息,并向消息队列发布任务控制消息。
同样的,与任务创建消息类似,第三服务器获得任务控制请求之后,可以将定时任务控制请求转换消息队列能够传输的任务控制消息后,将任务控制消息发布至消息队列;或者将该任务控制请求直接作为任务控制消息发布至消息队列。
步骤113,分布式服务器集群中的部分或全部服务器从消息队列获得任务控制消息。
消息队列接收到第三服务器所发布的任务控制消息后,优选地,可以通过消息队列的“发布/订阅”功能,向分布式服务器集群中的已经订阅了该消息队列消息的部分或全部服务器推送该任务控制消息,以使分布式服务器集群中的部分或全部服务器都可以及时的获得到该任务控制消息。
当然,也可以是分布式服务器集群中的部分或全部服务器主动从消息队列中获得该任务控制信息。其中,所述部分服务器中可以包括发布任务控制消息的第三服务器。
步骤114,分布式服务器集群中的部分或全部服务器获得所述任务控制消息后,根据任务控制消息,对该定时任务进行处理。
分布式服务器集群中的部分或全部服务器获得所述任务控制消息后,就可以根据该任务控制消息中的一种或多种任务控制指示,来对已经创建的定时任务进行相应控制或处理,例如,可以删除该定时任务、重启该定时任务、暂停该定时任务、建立定时任务的依赖关系等等。在实际应用中,可以根据实际情况来,生成对定时任务控制请求,并进行相应的控制,在此不对具体的控制内容进行限定。
例如,当定时任务正在执行时,用户向分布式服务器集群中发起一任务控制请求,请求暂停该定时任务,则通过上述的步骤,分布式服务器集群中创建有该定时任务的各个服务器都可以获得该任务控制请求对应的任务控制消息,其中没有获得分布式锁的,即没有执行该定时任务的服务器,如果没有删除该定时任务时,可以暂停该定时任务,即下一次触发定时任务时,也不再尝试获取分布式锁,不再执行该定时任务;而已经获得了分布式锁,且正在执行该定时任务的第二服务器,可以取消正在执行的定时任务,可以将所处理的数据等恢复至执行定时任务之前的状态,并且也暂停该定时任务,在下一次触发定时任务时,不再尝试获取分布式锁,不再执行该定时任务,直到获得用于恢复该定时任务的任务控制消息。
在本发明实施例中,通过消息队列将任务控制信消息推送至分布式服务器集群中的部分或全部服务器,使得创建了定时任务的服务器可以实现对定时任务的控制,从而可以使得更加灵活方便的执行定时任务。
可选的,在本发明实施例提供的定时任务控制方法中,步骤106,分布式服务器集群中的部分或全部服务器中成功获得所述分布式锁的一台第二服务器执行所述定时任务,包括:
步骤106A,当所述部分或全部服务器中的一台第二服务器成功获得分布式锁时,成功获得分布式锁的第二服务器查看执行日志。
在理论情况下,分布式服务器集群中的所有创建的定时任务应该在同一时刻并发执行,但实际生产环境可能会出现定时任务触发时间不一致的情况,如各服务器的时间有细微的差别,或者某台服务器压力过大,造成定时任务触发的延时,当延时触发定时任务的服务器尝试获取分布式锁时,可能恰逢另一台服务器已经将定时任务执行完毕并释放了分布式锁,从而该延时触发定时任务的服务器可以重新获得分布式锁,并再次执行该定时任务,这将造成定时任务的重复执行。
为了避免上述情况,当所述部分或全部服务器中的一台第二服务器成功获得分布式锁后,该第二服务器可以查看执行日志。执行日志是一份公共日志,可以用来记录定时任务执行情况的日志,其中至少包括定时任务被执行时的时间。执行日志可以被保存在分布式服务器集群中的关系数据库中,或其他位置。优选的,为了降低关系数据库的压力,提高性能,可以将执行日志保存在Redis数据库中,从而方便读取。
步骤106B,当该执行日志中没有记录定时任务的执行时刻或,
所记录的定时任务的执行时刻与当前时刻的差值大于或等于预设阈值时,第二服务器执行定时任务。
获得分布式锁的服务器查看执行日志时,如果执行日志中没有记录定时任务的执行时刻,则表示该定时任务还没有被执行过,所以可以执行该定时任务。
或者,如果执行日志中所记录的定时任务的执行时刻与当前时刻的差值大于或等于预设阈值,则表示距离上一次执行该定时任务已经过去一定时间,例如,该定时任务为周期型任务,则预设阈值可以为一个周期的时间,例如12小时,24小时等等,所以当定时任务的执行时刻与当前时刻的差值大于或等于预设阈值,则表示该任务在本周期还没有被执行,所以可以执行该定时任务,当定时任务完成后,释放分布式锁。其中,预设阈值可以根据实际应用的需要进行配置,在此不进行限定。
在第二服务器执行定时任务之后,可以对执行日志中的定时任务执行时刻进行修改,当该执行日志中没有定时任务执行时刻时,可以将本次执行定时任务的时刻添加在执行日志中;当执行日志中存在定时任务执行时刻时,可以用本次执行定时任务的时刻更新原有的定时任务执行时刻。
在本发明实施例中,通过第二服器对执行日志中定时任务执行时刻的判断,能够进一步的避免定时任务被重复执行。
可选的,结合上述的实施例,在本发明实施例提供的定时任务控制方法中,步骤106,分布式服务器集群中的部分或全部服务器中成功获得所述分布式锁的一台第二服务器执行定时任务,可以包括:
步骤106C,分布式服务器集群中的部分或全部服务器中成功获得分布式锁的一台第二服务器从关系数据库中获得定时任务的任务内容。
分布式服务器集群中,可以将集群中的各个服务器都可能会用到的一些通用的数据信息,例如通用的数据、方法、类、函数等等保存在关系数据库中,当需要调用这些数据信息时,可以直接从关系数据库中获取。从而不需要在各个服务器上都保存上述数据信息,避免了存储资源的浪费。
所以,可以将定时任务的任务内容也保存在关系数据库中,避免了创建定时任务的服务器都各自保存一份任务内容而造成的存储资源浪费。定时任务的任务内容可以是执行该定时任务所需的方法、函数,或者是执行该定时任务所需的各类参数信息,还可以是定时任务所要执行的对象等等,例如,该定时任务为在每天固定时刻对预设数据进行一次筛选,则待筛选的预设数据就可以作为该定时任务所要执行的对象,保存在关系数据库中。
当一台第二服务器已经获得了分布式锁之后,就可以从关系数据库中获得定时任务的任务内容,例如,所获得定时任务的任务内容可以是待处理的数据等等。
步骤106D,第二服务器针对任务内容执行所述定时任务。
当成功获得分布式锁的第二服务器从关系数据库中获得了该定时任务的任务内容之后,就可以针对该任务内容,执行定时任务。例如,任务内容可以是待处理的数据,则可以针对该数据,执行定时任务,如对该数据进行筛选,压缩等等。
在本发明实施例中,在成功获得分布式锁的第二服务器在执行该定时任务时,从关系数据库中获得定时任务的任务内容,可以及时的获得所要处理的任务内容,保证定时任务的顺利执行。
可选的,结合上述的实施例,在本发明实施例提供的定时任务控制方法中,在步骤106,分布式服务器集群中的部分或全部服务器中成功获得分布式锁的一台第二服务器执行所述定时任务之后,所述方法还包括:
步骤115,成功获得分布式锁的一台第二服务器将所述定时任务的执行结果写入任务日志,该任务日志用于记录定时任务的执行结果。
当成功获得分布式锁的第二服务器完成了定时任务之后,可以将定时任务的执行结果写入任务日志。定时任务的执行结果可以包括任务的执行记录、处理的数据量、是否出现异常以及定时任务执行是否成功等等。与定时任务有关的信息都可以作为执行结果予以记录。
任务日志可以是分布式服务器集群中的一份公共日志文件,无论分布式服务器集群中的哪个服务器执行了定时任务,都可以访问该任务日志,并将执行结果写入任务日志。
任务日志可以保存在关系数据库中,或者也可以保存在其他存储位置,如Redis数据库或一台预设的服务器上。
在本发明实施例中,当服务器执行完定时任务之后,将与该定时任务有关的执行结果都记录在任务日志中,从而可以保存与该定时任务有关的执行结果,方便有关人员对于定时任务执行情况的进行分析和查看。
参见图2,为本发明实施例提供的应用定时任务控制方法的分布式服务器集群的框架图,包括:
分布式服务器集群200,其中包括服务器A201,服务器B202,服务器C203,当然,在实际应用中分布式服务器集群200中可以包括很多服务器,在此,仅示例性的以三个服务器为例,进行介绍。
负载均衡器205用于将各类任务均衡的分配至分布式服务器集群200中的各个服务器(服务器A201,服务器B202,或者服务器C203)。所有的用户的请求都可以先提交到负载均衡器205,负载均衡器205根据所配置的负载均衡算法选择分布式服务器集群200中的一台服务器(服务器A201,服务器B202,或者服务器C203)来执行用户请求,并将结果返回给负载均衡器205,再由负载均衡器205返回给用户。
消息队列服务器204,可以实现分布式服务器集群200中各个服务器之间消息的共享和传输,在本发明实施例中,可以将消息队列部署在一台专门的服务器上,从而构成消息队列服务器204,以提高消息队列的运行效率。
在图2中可以看出,每台服务器都可以向消息队列服务器204发布消息,同时也可以订阅消息队列服务器204的消息。从而使得分布式服务器集群200中各个服务器都可以将自身产生或获得的消息通过消息队列服务器204向其他服务器进行推送。
本发明实施例中,定时任务创建请求可以通过负载均衡器205进行分配,例如,当用户向分布式服务器集群200发起一个定时任务创建请求时,负载均衡器205通过负载均衡算法,将该定时任务创建请求分配给分布式服务器集群200中的服务器A201。
服务器A201获得该定时任务创建请求后,可以将该定时任务创建请求转换为任务创建消息后,向消息队列服务器204,发布对应该任务创建消息,分布式服务器集群200中所有订阅该类型消息的服务器会接收到该任务创建消息,并在各自的服务中启动相关的定时任务,例如,服务器B202和服务器C203都向消息队列服务器204订阅定时任务有关的消息,所以服务器B202和服务器C203可以从消息队列服务器204获得该任务创建消息。
同样,卸载该定时任务的方法与创建该定时任务的方法相同,当用户请求卸载该定时任务时,可以由负载均衡器205通过负载均衡算法,将该卸载定时任务请求分配给分布式服务器集群200中的一台服务器,该服务器将卸载定时任务请求转化为相应的任务卸载消息,并通过消息队列服务器204,使分布式服务器集群200中所有订阅该类型消息的服务器获得到该任务卸载消息。并且,当用户需要对定时任务进行控制时,例如,暂停定时任务、重启定时任务、配置定时任务的依赖关系等等操作。都可以通过同样的方法和流程,使得分布式服务器集群200中的创建有该定时任务的服务器,都对所创建的定时任务做出同样的控制。
在本发明实施例中,分布式服务器集群200中的全部服务器都创建了该定时任务,当到达该定时任务的触发条件时,例如,到达定时任务的触发时间,分布式服务器集群200中的全部服务器上的定时任务都被触发,当定时任务被触发后,但全部服务器在执行该定时任务之前,都首先需要获得分布式锁206,分布式锁206,可以部署在一台独立的服务器上,也可以集成式的部署在消息队列服务器204中,或者其他存储位置,例如Redis数据库中。
由于分布式锁206为互斥性的访问模式,保证了任务执行的唯一性,所以分布式服务器集群200中只有一个服务器可以成功获得分布式锁206,例如,服务器B202成功获得该分布式锁206,则其他服务器A201和服务器C203,无法获得分布式锁206,可以认为该定时任务已经由其他服务器执行,从而可以放弃执行定时任务。
服务器B202获得分布式锁206后,为了保证不会因为各服务器时间不同步,而造成的定时任务被重复执行,可以访问执行日志207,当该执行日志中没有记录定时任务的执行时刻,或者所记录的定时任务的执行时刻与当前时刻的差值大于或等于预设阈值时,服务器B202再执行该定时任务。当执行完该定时任务后,服务器B202释放分布式锁206,并将本次定时任务执行的时刻记录在执行日志207中。
最后,服务器B202将本次定时任务的执行结果写入任务日志208中。
下面再通过一个具体的实施例,介绍如何应用本发明实施例提供的定时任务控制方法。
分布式服务器集群中的服务器可以采用Quartz组件来执行和配置定时任务,Quartz是一款开源的定时任务执行组件,可以方便的配置并调用定时任务。
一个或多个专门的服务器使用可以采用MySQL数据库,作为分布式服务器集群的关系数据库,用来存储管理定时任务的任务内容,并且用来保存定时任务的任务日志,本发明实施例中以MySQL数据库为例进行说明,关系数据库也可以使用其他数据库来实现。
一个或多个专门的服务器可以采用Redis数据库,作为分布式服务器集群的消息队列服务器,并且Redis数据库同时具有分布式锁的功能,可以同时作为分布式锁,并且同时用来存储定时任务的执行日志。
参见图3,图3为本发明实施例提供的创建定时任务的流程图。
步骤301,配置定时任务。
负载均衡器通过负载均衡算法,将定时任务创建请求分配至分布式服务器集群中的一台第一服务器中。
步骤302,发布任务创建消息。
该第一服务器获得该定时任务创建请求之后,将该定时任务创建请求转换为任务创建消息,并向消息队列服务器,即Redis数据库,发布任务创建消息。
步骤303,任务创建消息处理。
消息队列服务器获得该任务创建消息后,可以对任务创建消息进行处理,例如,可以对该任务创建消息进行压缩,以便于传输;或者确定出该任务创建消息对应的类型或主题,以便向订阅了该类型或主题的消息的服务器进行信息的推送。
步骤304,订阅任务创建消息。
消息队列服务器完成任务创建消息的处理后,就可以向订阅了定时任务有关消息的全部服务器推送任务创建消息。使得获得任务创建消息的全部服务器根据该任务创建消息,各自创建定时任务。
步骤305,存储定时任务至关系数据库。
定时任务创建完成后,可以将该定时任务存储至关系数据库中。将该定时任务存储至关系数据库,可以是将与该定时任务有关的数据、信息和任务内容等存储于关系数据库中。当需要执行定时任务时,可以从关系数据库中获得有关的数据、信息和任务内容等。并且,通过关系数据库还可以对所存储的与该定时任务有关的数据、信息和任务内容进行相应的操作,例如,添加、删除等。
在本发明实施例中,在分布式服务器集群中的任意一台第一服务器获得定时任务之后,通过消息队列服务器,使得分布式服务器集群中的订阅了定时任务有关消息的全部服务器都可以创建该定时任务,从而不需要指定固定的服务器来接收该定时任务,降低了创建或配置定时任务的复杂度。也避免了当个别服务器发生宕机重启时,造成的定时任务丢失的问题。
参见图4,图4为本发明实施例提供的执行定时任务的流程图。
步骤401,准备执行定时任务。
分布式服务器集群中全部已经创建有定时任务的服务器都可以准备执行该定时任务,当到达该定时任务的触发时间时,能够及时的执行该定时任务。
步骤402,获取分布式锁。
当到达该定时任务的触发时间时,分布式服务器集群中全部创建有定时任务的服务器,都可以尝试从消息队列服务器,即Redis数据库,竞争获取分布式锁。
步骤403,判断分布式锁是否获取成功。
分布式服务器集群中全部创建有定时任务的服务器在尝试获取分布式锁之后,首先需要判断是否成功的获取到分布式锁。
步骤404,获取失败,取消任务执行。
如果没有成功获取分布式锁,则不需要从关系数据库中获得与该定时任务有关的数据、信息和任务内容,而是取消该定时任务的执行。
步骤405,获取成功,访问执行日志。
由于分布式锁的互斥性,分布式服务器集群中全部创建有定时任务的服务器中,只有一台第二服务器可以成功的获取分布式锁。
第二服务器成功获取分布式锁之后,可以首先从Redis数据库中访问该定时任务对应的执行日志,而其他没有获得分布式锁的服务器则可以不需要访问该执行日志。
步骤406,判断是否满足定时任务执行条件。
成功获取分布式锁的第二服务器通过查看该执行日志,判断该定时任务是否满足执行条件,其中执行条件为:该执行日志中没有记录定时任务的执行时刻,或所记录的定时任务的执行时刻与当前时刻的差值大于或等于预设阈值。
步骤407,不满足执行条件,取消任务执行。
当不满足执行条件时,不需要从关系数据库中获得与该定时任务有关的数据、信息和任务内容,而是取消该定时任务的执行。
步骤408,满足执行条件,执行定时任务。
当满足执行条件时,则该服务器执行该定时任务。
步骤409,记录任务日志。
该服务器执行完该定时任务后,可以将该定时任务的执行结果写入任务日志。并且该任务日志存储于关系数据库中。
在本发明实施例中,通过分配唯一的分布式锁,避免了定时任务重复执行的情况,并且可以在Redis数据库保存执行日志,并同时利用Redis数据库实现分布式锁的功能,使得分布式锁和执行日志,能够与关系数据库隔离,不需要从关系数据库中获得分布式锁以及访问执行日志,从而降低了关系数据库的压力,提高了整体性能。
参见图5,图5为本发明实施例提供的分布式服务器集群的结构图,分布式服务器集群500中至少包括,服务器组501,消息队列502,分布式锁503,其中服务器组501中至少包括一台或多台服务器。
所述分布式服务器集群500中的第一服务器获得定时任务创建请求;
所述第一服务器根据所述定时任务创建请求,将所述定时任务创建请求转换为任务创建消息,并向消息队列502发布所述任务创建消息;
所述分布式服务器集群500中的部分或全部服务器从所述消息队列502获得所述任务创建消息;
所述部分或全部服务器获得所述任务创建消息后,所述部分或全部服务器根据所述任务创建消息各自创建定时任务;
当所述定时任务被触发时,所述部分或全部服务器尝试从预设存储位置获取分布式锁503;
所述部分或全部服务器中成功获得所述分布式锁503的一台第二服务器执行所述定时任务。
本发明实施例中,在分布式服务器集群中的任意一台第一服务器获得定时任务创建请求之后,将定时任务创建请求转换为任务创建消息,并向消息队列发布任务创建消息,使得分布式服务器集群中的全部或部分服务器都可以从消息队里获得任务创建消息,并根据任务创建消息,创建该定时任务。定时任务触发时,通过分布式锁,使得创建有该定时任务的全部或部分服务器中只有一台第二服务器可以执行该定时任务。从而可以在创建或配置定时任务时,不需要指定固定的服务器来创建并执行该定时任务,降低了创建定时任务的复杂度,并且通过在分布式服务器集群中的部分或全部服务器上都创建有该定时任务,同时通过分布式锁,使得定时任务不会重复执行,从而避免了现有技术中,通过指定一台固定的服务器接收并执行定时任务,当该服务器发生宕机重启时造成的定时任务丢失的问题。
可选的,在本发明实施例提供的分布式服务器集群中,所述分布式服务器集群500中还包括负载均衡器;
所述分布式服务器集群中的一台第一服务器从负载均衡器获得定时任务创建请求,所述负载均衡器用于通过负载均衡算法向分布式服务器集群500中的各服务器分配各类任务。
可选的,在本发明实施例提供的分布式服务器集群中,所述分布式服务器集群500中的部分或全部服务器订阅消息队列502的消息。
可选的,在本发明实施例提供的分布式服务器集群中,所述分布式服务器集群500中的一台第三服务器获得定时任务控制请求,所述定时任务控制请求至少包括以下请求中的一种或多种:定时任务暂停请求、定时任务重启请求、定时任务依赖请求;
所述第三服务器根据所述定时任务控制请求,将所述定时任务控制请求转换为任务控制消息,并向所述消息队列502发布所述任务控制消息;
所述部分或全部服务器从所述消息队列502获得所述任务控制消息;
所述部分或全部服务器获得所述任务控制消息后,根据所述任务控制消息,对所述定时任务进行处理。
可选的,在本发明实施例提供的分布式服务器集群中,当所述部分或全部服务器中的一台第二服务器成功获得所述分布式锁502时,所述第二服务器查看执行日志;
当所述执行日志中没有记录所述定时任务的执行时刻,
或所记录的所述定时任务的执行时刻与当前时刻的差值大于或等于预设阈值时,所述第二服务器执行所述定时任务。
可选的,在本发明实施例提供的分布式服务器集群中,第二服务器在所述执行日志中添加所述定时任务的执行时刻,或更新所述执行日志中所述定时任务的执行时刻。
可选的,在本发明实施例提供的分布式服务器集群中,所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器从关系数据库中获得所述定时任务的任务内容;
所述第二服务器针对所述任务内容执行所述定时任务。
可选的,在本发明实施例提供的分布式服务器集群中,所述成功获得所述分布式锁的一台第二服务器将所述定时任务的执行结果写入任务日志,所述任务日志用于记录所述定时任务的执行结果。
本发明实施例还提供了一种电子设备,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述机器可执行指令被所述处理器执行时实现如下步骤:
分布式服务器集群中的一台第一服务器获得定时任务创建请求;
所述第一服务器根据所述定时任务创建请求,将所述定时任务创建请求转换为任务创建消息,并向消息队列发布所述任务创建消息;
所述分布式服务器集群中的部分或全部服务器从所述消息队列获得所述任务创建消息;
所述部分或全部服务器获得所述任务创建消息后,所述部分或全部服务器根据所述任务创建消息各自创建定时任务;
当所述定时任务被触发时,所述部分或全部服务器尝试从预设存储位置获取分布式锁;
所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器执行所述定时任务。
上述电子设备,指PC机、服务器、智能终端等。优选的,本发明的具体实施例中,电子设备指服务器设备。
上述机器可读存储介质可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,机器可读存储介质还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本发明实施例中,可以在创建或配置定时任务时,不需要指定固定的服务器来接收该定时任务,降低了创建或配置定时任务的复杂度,通过在分布式服务器集群中的部分或全部服务器上都创建有该定时任务,从而避免了现有技术中,通过指定一台固定的服务器接收并执行定时任务,当该服务器发生宕机重启时造成的定时任务丢失的问题。而且由于采用了分布式锁,也不会造成定时任务重复执行的情况。
本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例中的定时任务控制方法。
本发明实施例中,可以在创建或配置定时任务时,不需要指定固定的服务器来接收该定时任务,降低了创建或配置定时任务的复杂度,通过在分布式服务器集群中的部分或全部服务器上都创建有该定时任务,从而避免了现有技术中,通过指定一台固定的服务器接收并执行定时任务,当该服务器发生宕机重启时造成的定时任务丢失的问题。而且由于采用了分布式锁,也不会造成定时任务重复执行的情况。
发明实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行本发明实施例中的定时任务控制方法。
本发明实施例中,可以在创建或配置定时任务时,不需要指定固定的服务器来接收该定时任务,降低了创建或配置定时任务的复杂度,通过在分布式服务器集群中的部分或全部服务器上都创建有该定时任务,从而避免了现有技术中,通过指定一台固定的服务器接收并执行定时任务,当该服务器发生宕机重启时造成的定时任务丢失的问题。而且由于采用了分布式锁,也不会造成定时任务重复执行的情况。
本发明实施例提供了一种计算机程序,当其在计算机上运行时,使得计算机执行本发明实施例中的定时任务控制方法。
对于分布式服务器集群、电子设备、计算机可读存储介质等实施例而言,由于其所涉及的方法内容基本相似于前述的方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (18)
1.一种定时任务执行方法,其特征在于,应用于分布式服务器集群,所述分布式服务器集群包括多台服务器,所述方法包括:
分布式服务器集群中的一台第一服务器获得定时任务创建请求,其中,所述第一服务器是所述分布式服务器集群的任意一台服务器;
所述第一服务器根据所述定时任务创建请求,将所述定时任务创建请求转换为任务创建消息,并向消息队列发布所述任务创建消息;
所述分布式服务器集群中的部分或全部服务器从所述消息队列获得所述任务创建消息;
所述部分或全部服务器获得所述任务创建消息后,所述部分或全部服务器根据所述任务创建消息各自创建定时任务;
当所述定时任务被触发时,所述部分或全部服务器尝试从预设存储位置获取分布式锁;
所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器执行所述定时任务。
2.根据权利要求1所述的方法,其特征在于,所述分布式服务器集群中的一台第一服务器获得定时任务创建请求,包括:
所述分布式服务器集群中的一台第一服务器从负载均衡器获得定时任务创建请求,所述负载均衡器用于通过负载均衡算法向分布式服务器集群中的各服务器分配各类任务。
3.根据权利要求1所述的方法,其特征在于,在所述第一服务器根据所述定时任务创建请求,将所述定时任务创建请求转换为任务创建消息,并向消息队列发布所述任务创建消息之前,所述方法还包括:
所述分布式服务器集群中的部分或全部服务器订阅消息队列的消息。
4.根据权利要求1所述的方法,其特征在于,在所述部分或全部服务器根据所述任务创建消息各自创建定时任务之后,所述方法还包括:
所述分布式服务器集群中的一台第三服务器获得定时任务控制请求,所述定时任务控制请求至少包括以下请求中的一种或多种:定时任务暂停请求、定时任务重启请求、定时任务依赖请求;
所述第三服务器根据所述定时任务控制请求,将所述定时任务控制请求转换为任务控制消息,并向所述消息队列发布所述任务控制消息;
所述部分或全部服务器从所述消息队列获得所述任务控制消息;
所述部分或全部服务器获得所述任务控制消息后,根据所述任务控制消息,对所述定时任务进行处理。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器执行所述定时任务,包括:
当所述部分或全部服务器中的一台第二服务器成功获得所述分布式锁时,所述第二服务器查看执行日志;
当所述执行日志中没有记录所述定时任务的执行时刻,
或所记录的所述定时任务的执行时刻与当前时刻的差值大于或等于预设阈值时,所述第二服务器执行所述定时任务。
6.根据权利要求5所述的方法,其特征在于,在所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器执行所述定时任务之后,所述方法还包括:
第二服务器在所述执行日志中添加所述定时任务的执行时刻,或更新所述执行日志中所述定时任务的执行时刻。
7.根据权利要求1至4中任一项所述的方法,其特征在于,所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器执行所述定时任务,包括:
所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器从关系数据库中获得所述定时任务的任务内容;
所述第二服务器针对所述任务内容执行所述定时任务。
8.根据权利要求1所述的方法,其特征在于,在所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器执行所述定时任务之后,所述方法还包括:
所述成功获得所述分布式锁的一台第二服务器将所述定时任务的执行结果写入任务日志,所述任务日志用于记录所述定时任务的执行结果。
9.一种分布式服务器集群,其特征在于,所述分布式服务器集群包括多台服务器,消息队列和分布式锁;
所述分布式服务器集群中的第一服务器获得定时任务创建请求,其中,所述第一服务器是所述分布式服务器集群的任意一台服务器;
所述第一服务器根据所述定时任务创建请求,将所述定时任务创建请求转换为任务创建消息,并向消息队列发布所述任务创建消息;
所述分布式服务器集群中的部分或全部服务器从所述消息队列获得所述任务创建消息;
所述部分或全部服务器获得所述任务创建消息后,所述部分或全部服务器根据所述任务创建消息各自创建定时任务;
当所述定时任务被触发时,所述部分或全部服务器尝试从预设存储位置获取分布式锁;
所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器执行所述定时任务。
10.根据权利要求9所述的分布式服务器集群,其特征在于,所述分布式服务器集群中还包括负载均衡器;
所述分布式服务器集群中的一台第一服务器从负载均衡器获得定时任务创建请求,所述负载均衡器用于通过负载均衡算法向分布式服务器集群中的各服务器分配各类任务。
11.根据权利要求9所述的分布式服务器集群,其特征在于,
所述分布式服务器集群中的部分或全部服务器订阅消息队列的消息。
12.根据权利要求9所述的分布式服务器集群,其特征在于,
所述分布式服务器集群中的一台第三服务器获得定时任务控制请求,所述定时任务控制请求至少包括以下请求中的一种或多种:定时任务暂停请求、定时任务重启请求、定时任务依赖请求;
所述第三服务器根据所述定时任务控制请求,将所述定时任务控制请求转换为任务控制消息,并向所述消息队列发布所述任务控制消息;
所述部分或全部服务器从所述消息队列获得所述任务控制消息;
所述部分或全部服务器获得所述任务控制消息后,根据所述任务控制消息,对所述定时任务进行处理。
13.根据权利要求9至12中任一项所述的分布式服务器集群,其特征在于,
当所述部分或全部服务器中的一台第二服务器成功获得所述分布式锁时,所述第二服务器查看执行日志;
当所述执行日志中没有记录所述定时任务的执行时刻,
或所记录的所述定时任务的执行时刻与当前时刻的差值大于或等于预设阈值时,所述第二服务器执行所述定时任务。
14.根据权利要求13所述的分布式服务器集群,其特征在于,
第二服务器在所述执行日志中添加所述定时任务的执行时刻,或更新所述执行日志中所述定时任务的执行时刻。
15.根据权利要求9至12中任一项所述的分布式服务器集群,其特征在于,
所述部分或全部服务器中成功获得所述分布式锁的一台第二服务器从关系数据库中获得所述定时任务的任务内容;
所述第二服务器针对所述任务内容执行所述定时任务。
16.根据权利要求9所述的分布式服务器集群,其特征在于,
所述成功获得所述分布式锁的一台第二服务器将所述定时任务的执行结果写入任务日志,所述任务日志用于记录所述定时任务的执行结果。
17.一种电子设备,其特征在于,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述机器可执行指令被所述处理器执行时实现权利要求1-8任一所述的方法的步骤。
18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-8任一所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710912217.3A CN109582466B (zh) | 2017-09-29 | 2017-09-29 | 一种定时任务执行方法、分布式服务器集群及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710912217.3A CN109582466B (zh) | 2017-09-29 | 2017-09-29 | 一种定时任务执行方法、分布式服务器集群及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109582466A CN109582466A (zh) | 2019-04-05 |
CN109582466B true CN109582466B (zh) | 2021-05-25 |
Family
ID=65919209
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710912217.3A Active CN109582466B (zh) | 2017-09-29 | 2017-09-29 | 一种定时任务执行方法、分布式服务器集群及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109582466B (zh) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110196761B (zh) * | 2019-04-15 | 2021-10-19 | 北京达佳互联信息技术有限公司 | 延迟任务处理方法及装置 |
CN110262807B (zh) * | 2019-06-20 | 2023-12-26 | 北京百度网讯科技有限公司 | 集群创建进度日志采集系统、方法和装置 |
CN110413388A (zh) * | 2019-07-05 | 2019-11-05 | 深圳壹账通智能科技有限公司 | 基于业务系统的多任务处理方法、装置、设备及存储介质 |
CN110471780B (zh) * | 2019-08-21 | 2022-04-26 | 北京百佑科技有限公司 | 分布式事件处理装置、终端和计算机存储介质 |
CN110633208A (zh) * | 2019-08-22 | 2019-12-31 | 浙江大搜车软件技术有限公司 | 增量代码覆盖率测试方法及系统 |
CN110888739B (zh) * | 2019-11-22 | 2020-10-20 | 南京甄视智能科技有限公司 | 延迟任务的分布式处理方法与装置 |
CN110716948B (zh) * | 2019-12-12 | 2020-04-14 | 四川新网银行股份有限公司 | 一种基于数据定期处理的双锁控制方法及介质 |
CN111078659B (zh) * | 2019-12-20 | 2023-04-21 | 腾讯科技(深圳)有限公司 | 模型更新方法、装置、计算机可读存储介质和计算机设备 |
CN111163145B (zh) * | 2019-12-23 | 2022-04-05 | 北京数衍科技有限公司 | 分布式数据定时均发方法、装置及电子设备 |
CN111562971A (zh) * | 2020-04-09 | 2020-08-21 | 北京明略软件系统有限公司 | 分布式定时器的调度方法及系统 |
CN111782422B (zh) * | 2020-06-30 | 2023-08-15 | 百度在线网络技术(北京)有限公司 | 分布式消息处理方法、装置、电子设备及存储介质 |
CN111782365B (zh) * | 2020-06-30 | 2024-03-08 | 北京百度网讯科技有限公司 | 定时任务处理方法、装置、设备及存储介质 |
CN111966474B (zh) * | 2020-08-11 | 2024-04-02 | 武汉遂意语联网络科技有限公司 | 控制定时任务的方法及装置 |
CN112506624A (zh) * | 2020-10-29 | 2021-03-16 | 望海康信(北京)科技股份公司 | 定时任务调度系统、方法及相应计算机设备和存储介质 |
CN112463318A (zh) * | 2020-11-17 | 2021-03-09 | 深圳市优必选科技股份有限公司 | 一种定时任务处理方法、装置及系统 |
CN112463328A (zh) * | 2020-11-26 | 2021-03-09 | 上海机电工程研究所 | 基于多核处理器平台的实时仿真定时方法、系统及介质 |
CN112565032B (zh) * | 2020-11-30 | 2022-07-05 | 扬州鹏为软件有限公司 | 一种终端与智能化设备的连接方法 |
CN113282580A (zh) * | 2021-04-28 | 2021-08-20 | 青岛海尔科技有限公司 | 用于执行定时任务的方法、存储介质及服务器 |
CN113535353B (zh) * | 2021-06-29 | 2022-05-20 | 未鲲(上海)科技服务有限公司 | 定时任务调度方法、装置和计算机设备 |
CN114170741B (zh) * | 2021-12-03 | 2023-11-24 | 建信金融科技有限责任公司 | 交易效率监控方法、atm前置系统和自助业务控管系统 |
CN116302508B (zh) * | 2023-02-27 | 2023-12-22 | 中国科学院空间应用工程与技术中心 | 面向空间应用的高速分布式图像合成方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105260233A (zh) * | 2015-09-30 | 2016-01-20 | 北京奇虎科技有限公司 | 一种应用容器的创建方法和装置 |
CN105760221A (zh) * | 2016-02-02 | 2016-07-13 | 中博信息技术研究院有限公司 | 分布式计算框架的任务调派系统 |
CN106874094A (zh) * | 2017-02-17 | 2017-06-20 | 广州爱九游信息技术有限公司 | 定时任务处理方法、装置及计算设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9332404B2 (en) * | 2013-03-15 | 2016-05-03 | Spireon, Inc. | Server abstracted messaging system |
-
2017
- 2017-09-29 CN CN201710912217.3A patent/CN109582466B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105260233A (zh) * | 2015-09-30 | 2016-01-20 | 北京奇虎科技有限公司 | 一种应用容器的创建方法和装置 |
CN105760221A (zh) * | 2016-02-02 | 2016-07-13 | 中博信息技术研究院有限公司 | 分布式计算框架的任务调派系统 |
CN106874094A (zh) * | 2017-02-17 | 2017-06-20 | 广州爱九游信息技术有限公司 | 定时任务处理方法、装置及计算设备 |
Non-Patent Citations (1)
Title |
---|
"同仁堂健康集团IT服务平台事件处理系统的设计与实现";王晓婷;《中国优秀硕士学位论文全文数据库 信息科技辑》;20170215;第I138-2039页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109582466A (zh) | 2019-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109582466B (zh) | 一种定时任务执行方法、分布式服务器集群及电子设备 | |
US10713088B2 (en) | Event-driven scheduling using directed acyclic graphs | |
JP6669682B2 (ja) | クラウドサーバスケジューリング方法及び装置 | |
US10999234B1 (en) | Message processing using messaging services | |
CA3000422C (en) | Workflow service using state transfer | |
US11119813B1 (en) | Mapreduce implementation using an on-demand network code execution system | |
CN109684036B (zh) | 一种容器集群管理方法、存储介质、电子设备及系统 | |
US11620166B2 (en) | Communications framework for multi-cluster management systems | |
US7792916B2 (en) | Management of cluster-wide resources with shared variables | |
CN107391279B (zh) | 一种消息队列容器创建方法、装置及消息队列容器 | |
CN107783842B (zh) | 一种分布式锁实现方法、设备及存储装置 | |
CN110971700A (zh) | 分布式锁的实现方法及装置 | |
CN113886069A (zh) | 一种资源分配方法、装置、电子设备及存储介质 | |
WO2022134358A1 (zh) | 微服务数据的处理方法、装置、微服务处理平台及介质 | |
CN109614241B (zh) | 基于Yarn队列实现多集群多租户资源隔离的方法及系统 | |
CN112860387A (zh) | 分布式任务调度方法、装置、计算机设备及存储介质 | |
CN114168297A (zh) | 一种归集任务调度方法、装置、设备及介质 | |
CN112231073A (zh) | 一种分布式任务调度方法及其装置 | |
US9575795B2 (en) | Reverting a virtual resource to its base configuration using the snapshot image based on frequency the virtual resource is requested | |
CN117076096A (zh) | 任务流程的执行方法、装置、计算机可读介质及电子设备 | |
CN115981871A (zh) | 一种gpu资源调度方法、装置、设备及存储介质 | |
US11848983B2 (en) | Remotely discover and map a network resource model in a cloud environment | |
CN116954816A (zh) | 容器集群控制方法、装置、设备及计算机存储介质 | |
CN114675954A (zh) | 任务调度方法及装置 | |
CN115221116A (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 |