CN112416581B - 定时任务的分布式调用*** - Google Patents

定时任务的分布式调用*** Download PDF

Info

Publication number
CN112416581B
CN112416581B CN202011273479.8A CN202011273479A CN112416581B CN 112416581 B CN112416581 B CN 112416581B CN 202011273479 A CN202011273479 A CN 202011273479A CN 112416581 B CN112416581 B CN 112416581B
Authority
CN
China
Prior art keywords
task
node
client
server
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
Application number
CN202011273479.8A
Other languages
English (en)
Other versions
CN112416581A (zh
Inventor
肖向徐
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
58tongcheng Information Technology Co ltd
Original Assignee
58tongcheng Information Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 58tongcheng Information Technology Co ltd filed Critical 58tongcheng Information Technology Co ltd
Priority to CN202011273479.8A priority Critical patent/CN112416581B/zh
Publication of CN112416581A publication Critical patent/CN112416581A/zh
Application granted granted Critical
Publication of CN112416581B publication Critical patent/CN112416581B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/10Active monitoring, e.g. heartbeat, ping or trace-route
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/133Protocols for remote procedure calls [RPC]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Environmental & Geological Engineering (AREA)
  • Health & Medical Sciences (AREA)
  • Cardiology (AREA)
  • General Health & Medical Sciences (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种定时任务的分布式调用***,该***包括:客户端集群,包括多个客户端节点,用于获取任务注册信息并向服务器节点发送,还发送心跳信息,将用户的操作指令发送至服务器节点;服务器集群,包括多个服务器节点,用于创建定时任务;在到达定时任务触发时间时,确定任务执行节点,由任务执行节点执行定时任务;提供任务执行监控接口,接收客户端节点的操作指令并执行对定时任务的操作;ZooKeeper集群,用于保存客户端节点和服务器节点的状态信息;MongoDB集群,用于保存任务注册信息,并保存定时任务对应的任务执行节点和服务器节点的标识。本发明避免了单点故障,节省了本地服务资源,实现了对任务执行过程的监管。

Description

定时任务的分布式调用***
技术领域
本发明涉及计算机技术领域,特别是涉及一种定时任务的分布式调用***。
背景技术
现有技术中,在配置定时任务时,一般是通过Spring注解@Scheduled方式配置定时任务,例如:配置的定时任务为@Scheduled(cron="0 0 0/1**?"),即每小时执行一次定时任务,配置完成的定时任务在服务器本地执行。
由于任务执行过程是不可见的,对于任务的执行进度以及执行是否因异常终止等情况无法控制预感知;而且由于任务在本地执行,即任务的执行与应用在相同JRE(JavaRuntime Environment,Java运行环境)中执行,对应用本身性能的影响无法控制,大概率会出现因定时任务出现异常导致应用服务性能急剧下降的情况;在定时任务执行过程中,对于批量数据处理,不能人工干预;而且由于任务在本地创建并在本地所有节点共同执行,导致不能充分利用集群资源。
综上,通过Spring注解@Scheduled方式配置的定时任务存在着以下缺陷:容易出现单点故障;消耗本地服务资源;任务执行过程难以监管;不能充分利用集群资源。
发明内容
鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种定时任务的分布式调用***。
依据本发明的第一方面,提供了一种定时任务的分布式调用***,包括:
客户端集群,包括多个客户端节点,客户端节点用于获取任务注册信息,向服务器节点发送与所在客户端集群标识对应的任务注册信息,并向服务器节点发送心跳信息,接收用户对定时任务的操作指令,并将所述操作指令发送至服务器节点;
服务器集群,包括多个服务器节点,用于接收所述任务注册信息,并创建与所述任务注册信息对应的定时任务,将所述任务注册信息保存至MongoDB集群;根据所述心跳信息确定客户端节点的状态信息,将所述客户端节点的状态信息和心跳信息保存至ZooKeeper集群,并将服务器节点的状态信息保存至ZooKeeper集群;在到达所述定时任务触发时间时,确定状态信息为可用状态的一个服务器节点或客户端节点,作为任务执行节点,并将所述定时任务发送至所述任务执行节点,由所述任务执行节点执行所述定时任务;提供任务执行监控接口,通过所述任务执行监控接口接收客户端节点的操作指令,并根据所述操作指令执行对定时任务的操作;
ZooKeeper集群,用于保存所述客户端集群中多个客户端节点的状态信息和心跳信息,并保存多个服务器节点的状态信息;
MongoDB集群,用于保存所述任务注册信息,并保存定时任务对应的任务执行节点和服务器节点的标识。
可选的,所述任务执行监控接口包括Console可视化操作平台和/或监控应用程序编程接口API,服务器节点用于根据通过Console可视化操作平台或监控API接收到的所述操作指令,执行与所述操作指令对应的操作。
可选的,所述与所述操作指令对应的操作包括创建定时任务、触发定时任务的执行、暂停定时任务的执行、重启定时任务、删除定时任务、显示定时任务分析报表、获取并显示定时任务的执行进度,以及获取并显示定时任务所在任务执行节点的性能指标中的至少一种。
可选的,所述Console可视化操作平台还用于在定时任务的执行过程中检测到异常问题时进行告警。
可选的,所述定时任务包括本地定时任务或远程定时任务;
所述确定状态信息为可用状态的一个服务器节点或客户端节点,作为任务执行节点,包括:
若根据所述任务注册信息确定定时任务为本地定时任务且为指定客户端节点执行,则确定所述指定客户端节点为任务执行节点;
若根据所述任务注册信息确定定时任务为本地定时任务且为服务器节点执行,则从所述多个服务器节点中确定状态信息为可用状态的一个服务器节点,作为任务执行节点;
若根据所述任务注册信息确定定时任务为远程定时任务,则确定所述定时任务对应的客户端集群标识,并从所述客户端集群标识对应的多个客户端节点中确定一个状态信息为可用状态的客户端节点,作为任务执行节点。
可选的,所述ZooKeeper集群还用于:在服务器节点处于不可用状态时,将该服务器节点作为第一服务器节点,触发对所述第一服务器节点中的定时任务的重新分配指令;
所述服务器集群中的其他服务器节点还用于:若接收到所述ZooKeeper集群触发的对所述第一服务器节点中的定时任务的重新分配指令,则从MongoDB集群中确定所述第一服务器节点对应的远程定时任务,并重新创建所述定时任务,对重新创建的远程定时任务进行调度。
可选的,所述服务器节点还用于:
在将指定客户端节点作为任务执行节点时,若根据心跳信息确定任务执行节点处于不可用状态时,标记定时任务的执行进度,并在任务执行节点恢复可用状态时,将所述定时任务的执行进度发送至所述任务执行节点,由所述任务执行节点从所述执行进度开始执行所述定时任务。
可选的,所述从所述客户端集群标识对应的多个客户端节点中确定一个状态信息为可用状态的客户端节点,作为任务执行节点,包括:
从所述客户端集群标识对应的多个客户端节点中确定状态信息为可用状态的至少一个客户端节点;
根据负载均衡策略,从所述至少一个客户端节点中确定一个客户端节点,作为所述任务执行节点。
可选的,所述负载均衡策略包括:客户端节点执行定时任务的次数、客户端节点的性能指标和客户端节点所在机房,其中,所述客户端节点的性能指标是根据ZooKeeper集群中保存的客户端节点的心跳信息确定的。
可选的,所述客户端节点和服务器集群中的服务器节点通过Netty进行通讯。
可选的,所述客户端节点在作为任务执行节点时还用于:在本地缓存中的任务相关日志达到预设阈值时,将所述任务相关日志发送至所述服务器节点;
所述服务器节点还用于:将所述任务相关日志保存至所述MongoDB集群;
所述MongoDB集群还用于:保存所述任务相关日志。
可选的,所述获取任务注册信息包括:通过动态代码、配置文件或注解方式获取任务注册信息。
本发明提供的定时任务的分布式调用***,通过客户端集群来获取任务注册信息,并向服务器节点发送任务注册信息,服务器集群创建定时任务,将任务注册信息保存至MongoDB集群,还将客户端节点的心跳信息和状态信息保存至ZooKeeper集群,通过ZooKeeper集群中的节点的信息来对定时任务进行调度,选取合适的任务执行节点来执行定时任务,并且服务器节点还提供任务执行监控接口,通过任务执行监控接口接收客户端节点的操作指令,根据操作指令执行对定时任务的操作。通过服务器集群来对定时任务进行统一调度,而不需要客户端集群进行调度,实现了定时任务的分布式调度,而且在对任务进行调度时可以选取合适的节点进行执行,避免了所有节点同时执行相同任务,从而节省了本地服务资源,并可以充分利用集群资源,避免了单点故障,而且通过任务执行监控接口可以对任务执行过程进行监管。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。
图1是本发明实施例提供的一种定时任务的分布式调用***的结构示意图;
图2是本发明实施例中的服务器节点和客户端节点通信的流程图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
图1是本发明实施例提供的一种定时任务的分布式调用***的结构示意图,如图1所示,所述定时任务的分布式调用***包括:
客户端集群101,包括多个客户端节点,客户端节点用于获取任务注册信息,向服务器节点发送与所在客户端集群标识对应的任务注册信息,并向服务器节点发送心跳信息,接收用户对定时任务的操作指令,并将所述操作指令发送至服务器节点;
服务器集群102,包括多个服务器节点,用于接收所述任务注册信息,并创建与所述任务注册信息对应的定时任务,将所述任务注册信息保存至MongoDB集群;根据所述心跳信息确定客户端节点的状态信息,将所述客户端节点的状态信息和心跳信息保存至ZooKeeper集群,并将服务器节点的状态信息保存至ZooKeeper集群;在到达所述定时任务触发时间时,确定状态信息为可用状态的一个服务器节点或客户端节点,作为任务执行节点,并将所述定时任务发送至所述任务执行节点,由所述任务执行节点执行所述定时任务;提供任务执行监控接口,通过所述任务执行监控接口接收客户端节点的操作指令,并根据所述操作指令执行对定时任务的操作;
ZooKeeper集群103,用于保存所述客户端集群中多个客户端节点的状态信息和心跳信息,并保存多个服务器节点的状态信息;
MongoDB集群104,用于保存所述任务注册信息,并保存定时任务对应的任务执行节点和服务器节点的标识。
定时任务的分布式调用***可以包括至少一个客户端集群和一个服务器集群,从而服务器集群可以同时为多个客户端集群提供定时任务的注册和调度服务。
服务器节点通过Monitor监控客户端节点的心跳信息和当前服务器节点的状态信息,可以使用scheduledThreadPoolExecutor.scheduleAtFixedRate()实现Monitor监控。服务器节点的状态信息可以包括服务器节点的标识(如IP地址)、性能、存活时间、执行计划等。客户端节点的心跳信息可以包括客户端节点的标识(如IP地址)、任务类路径、端口号、IP地址、客户端集群标识、内存使用率、CPU使用率、总线程数等信息。
通过Monitor监控服务器节点时,首先需要注册Monitor服务,更新服务器节点内存使用率、CPU使用率、总线程数等信息,还可以恢复不可用状态的客户端节点下的定时任务,在ZooKeeper集群中没有处于可用状态(存活)的服务器节点时,可以邮件形式通知管理员。
ZooKeeper集群主要用于保存服务器节点和客户端节点的启动注册信息,即保存各个客户端集群中的多个客户端节点的状态信息和心跳信息,并保存多个服务器节点的状态信息。其中,ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。ZooKeeper集群使用Curator作为ZooKeeper客户端框架,可以解决ZooKeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等。Curator用于监听ZK(ZooKeeper)数据包变更,并保存到内存中,方便***快速获取服务器节点和客户端节点的信息。
MongoDB集群主要用于保存定时任务的相关信息,包括任务注册信息,以及定时任务对应的任务执行节点和服务器节点的标识。其中,任务注册信息包括定时任务的执行计划和任务快照信息等,任务快照信息包括执行时间、执行规则以及执行时需要继承的类等。定时任务对应的服务器节点是指对该定时任务进行调度的服务器节点。
服务器节点还用于对定时任务进行调度,即接收客户端节点发送的任务注册信息,创建定时任务,将任务注册信息保存至MongoDB集群,监控MongoDB集群中各个定时任务的触发时间,并在到达定时任务触发时间时,确定定时任务的执行节点为服务器节点或客户端节点,从ZooKeeper集群保存的服务器节点和客户端节点的信息中,确定可用状态的服务器节点或客户端节点,作为任务执行节点,来执行定时任务。服务器节点使用Quartz作为定时任务调度框架,对于定时任务的多种不同的执行规则,都可以进行很好的调度。Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制。
其中,所述客户端节点和服务器集群中的服务器节点通过Netty进行通讯。
图2是本发明实施例中的服务器节点和客户端节点通信的流程图,如图2所示,服务器节点和客户端节点的通信流程如下:
首先,服务器节点开启服务。开启定时任务的调度器,将服务器节点信息注册到ZooKeeper集群中,开启Netty,初始化本地信息。
之后,服务器节点开启Monitor服务。Monitor服务用于在每个心跳周期监测当前服务器节点的基本信息和状态信息,在定时任务遇到异常问题时触发定时任务恢复策略,并启动预警、报警策略。其中,所述心跳周期可以根据需要设置,如可以为1分钟等。
之后,客户端节点与服务器节点进行Netty通讯,注册客户端节点信息,服务器节点对客户端节点信息进行注册,在注册成功后返回注册成功的信息。服务器节点对客户端节点信息进行注册时,首先对客户端节点进行令牌验证(TOKEN),将客户端节点信息(包括客户端节点的标识、客户端集群标识、内存使用率、CPU使用率、总线程数等信息)注册到ZooKeeper集群中,开启该客户端节点的Monitor监测,注册本地信息,开启与该客户端节点的Netty通讯。
之后,进行定时任务的任务模式创建。任务模式包括本地模式和远程模式,服务器节点进行本地模式任务创建,服务器节点向客户端节点发送远程模式任务编辑指令,客户端节点返回接收成功,客户端节点发起执行远程模式编辑,服务器节点返回接收成功,实现远程模式的创建。
之后,客户端节点动态创建定时任务,将定时任务的任务注册信息发送至服务器节点,服务器节点进行定时任务的创建,并保存相关信息,在定时任务创建成功后,返回任务创建成功。
最后,服务器节点对定时任务进行调度,向客户端节点发起定时任务的执行指令,由客户端节点执行定时任务,在执行成功后,返回任务执行成功。
客户端节点和服务器节点进行通讯时可以通过如下方式获取通讯的服务器节点的IP地址:1)每次通讯成功后会从服务器节点返回下次通讯的服务器节点的IP地址并存入本地缓存中;2)如果本地缓存中不存在服务器节点的IP地址,则从统一配置中心中获取服务器节点的IP地址。
通过Netty通讯,可以快速开发高性能、高可靠性的网络服务器和客户端程序,支持任务的自动发现与注册。在服务器节点与客户端节点进行Netty通讯的过程中,通信消息可以采用Snappy进行压缩,从而可以减少网络数据的传输带宽。
在本发明的一个实施例中,所述获取任务注册信息包括:通过动态代码、配置文件或注解方式获取任务注册信息。
客户端节点获取任务注册信息时,可以通过动态代码、配置文件或注解方式获取任务注册信息。通过动态代码可以根据业务需要实时注册任务。通过配置文件可以进行声明式注册任务,如在定义任务时可以继承SimpleJob类,重写执行(execute)方法。通过注解方式注册任务,可以对任务进行标记,如可以包括Spring标签式声明任务、Spring注解式声明任务,即可以通过重新定义Spring的xsd标签以及Annotation注解方式来注册定时任务。
在本发明的一个实施例中,所述任务执行监控接口包括Console可视化操作平台和/或监控API,服务器节点用于根据通过Console可视化操作平台或监控API接收到的所述操作指令,执行与所述操作指令对应的操作。
所述监控API(Application Programming Interface,应用程序编程接口)主要用于实现任务干预操作,即根据客户端发送的操作指令,对相应的定时任务执行与操作指令对应的操作。所述服务器集群中的服务器节点除了包括监控API外,还包括其他核心API,客户端节点通过其他核心API接入服务器节点,从而服务器节点通过核心API可以进行服务发现、节点注册、任务注册等。
Console可视化操作平台主要用于进行任务监控,可以实现任务干预操作,所述Console可视化操作平台还可以用于在定时任务的执行过程中检测到异常问题时进行告警。Console可视化操作平台可以获取任务执行进度并显示,还可以显示定时任务所对应服务器节点的服务器性能指标,若在定时任务的执行过程中检测到异常问题(如执行时间过长,执行期间出现异常等),可以进行告警,从而用户可以手动干预任务执行,即可以给出重启定时任务、删除定时任务等的操作指令。
其中,所述与所述操作指令对应的操作包括创建定时任务、触发定时任务的执行、暂停定时任务的执行、重启定时任务、删除定时任务、显示定时任务分析报表、获取并显示定时任务的执行进度,以及获取并显示定时任务所在任务执行节点的性能指标中的至少一种。通过Console可视化操作平台和/或监控API可以获取到用户的操作指令,获取到的操作指令可以是创建定时任务、触发定时任务的执行、暂停定时任务的执行、重启定时任务、删除定时任务、显示定时任务分析报表、获取并显示定时任务的执行进度,以及获取并显示定时任务所在任务执行节点的性能指标中的至少一种的操作指令,从而可以根据操作指令对定时任务执行对应的操作。所述与所述操作指令对应的操作还可以包括定时任务的报表统计,可以进行多维度的任务报表统计,如可按小时、天、月、执行状态、客户端集群标识等统计定时任务的报表。
通过Console可视化操作平台和/或监控应用程序编程接口API实现了对定时任务的监控,同时可以对定时任务进行干预操作。
在本发明的一个实施例中,所述定时任务包括本地定时任务或远程定时任务;
所述确定状态信息为可用状态的一个服务器节点或客户端节点,作为任务执行节点,包括:
若根据所述任务注册信息确定定时任务为本地定时任务且为指定客户端节点执行,则确定所述指定客户端节点为任务执行节点;
若根据所述任务注册信息确定定时任务为本地定时任务且为服务器节点执行,则从所述多个服务器节点中确定状态信息为可用状态的一个服务器节点,作为任务执行节点;
若根据所述任务注册信息确定定时任务为远程定时任务,则确定所述定时任务对应的客户端集群标识,并从所述客户端集群标识对应的多个客户端节点中确定一个状态信息为可用状态的客户端节点,作为任务执行节点。
客户端节点要注册的定时任务可以包括本地(Local)定时任务和/或远程定时任务(Remote),而本地定时任务可以包括是客户端节点本地任务或服务器节点本地任务,在本地定时任务是客户端节点本地任务时任务注册信息中包括指定客户端节点,即该指定客户端节点作为任务执行节点。
对于定时任务为不同定时任务的情况,分别采取不同的措施确定任务执行节点,在根据任务注册信息确定定时任务为本地定时任务且为指定客户端节点执行时,可以确定指定客户端节点为任务执行节点;在根据任务注册信息确定定时任务为本地定时任务且为服务器节点执行时,则从ZooKeeper集群中获取服务器集群中所有服务器节点的状态信息,并从状态信息为可用状态的服务器节点中确定一个服务器节点,将该服务器节点作为任务执行节点;在根据任务注册信息确定定时任务为远程定时任务时,则确定定时任务对应的客户端集群标识(用于标识不同的用户),从ZooKeeper集群中获取该客户端集群标识对应的所有客户端节点的状态信息,并从状态信息为可用状态的客户端节点中确定一个客户端节点,将该客户端节点作为任务执行节点。通过不同任务模式的定时任务对应不同的调度方式,实现了对不同任务模式的多***分布式任务调度。
在上述技术方案的基础上,所述ZooKeeper集群还用于:在服务器节点处于不可用状态时,将该服务器节点作为第一服务器节点,触发对所述第一服务器节点中的定时任务的重新分配指令;
所述服务器集群中的其他服务器节点还用于:若接收到所述ZooKeeper集群触发的对所述第一服务器节点中的定时任务的重新分配指令,则从MongoDB集群中确定所述第一服务器节点对应的远程定时任务,并重新创建所述定时任务,对重新创建的远程定时任务进行调度。
ZooKeeper集群用于保存各个服务器节点和各个客户端节点的状态信息,经过预设心跳周期ZooKeeper集群没有接收到服务器节点的心跳信息确定服务器节点处于不可用状态,将该服务器节点作为第一服务器节点,这时ZooKeeper集群触发对第一服务器节点的定时任务的重新分配指令。服务器集群中除第一服务器节点外的其他服务器节点若接收到ZooKeeper集群触发的对所述第一服务器节点中的定时任务的重新分配指令,这时,从MongoDB集群中确定第一服务器节点对应的远程定时任务,并重新创建这些远程定时任务,对重新创建的远程定时任务进行调度,即在一个服务器节点处于不可用状态时,可以由其他的服务器节点来对该不可用状态的服务器节点上的定时任务进行调度,解决了服务器节点处于不可用状态时无法对其所调度的定时任务进行调度而导致定时任务不能执行的问题。
MongoDB集群中还可以保存各个定时任务的执行进度,从而重新对定时任务进行调度的服务器节点可以从MongoDB集群中获取到不可用的服务器节点中的所有定时任务的执行进度,并从该执行进度开始来调度各个定时任务。
在上述技术方案的基础上,所述服务器节点还用于:
在将指定客户端节点作为任务执行节点时,若根据心跳信息确定任务执行节点处于不可用状态时,标记定时任务的执行进度,并在任务执行节点恢复可用状态时,将所述定时任务的执行进度发送至所述任务执行节点,由所述任务执行节点从所述执行进度开始执行所述定时任务。
在定时任务为本地定时任务,且将指定客户端节点(可以将指定客户端节点的IP地址来标识指定客户端节点)作为任务执行节点时,服务器节点在经过预设心跳周期均未接收到该任务执行节点的心跳信息时确定任务执行节点处于不可用状态,这时标记定时任务的执行进度,若该任务执行节点重新启动,服务器节点重新接收到了该任务执行节点的心跳信息,确定该任务执行节点恢复了可用状态,这时,将定时任务的执行进度发送至该任务执行节点,该任务执行节点可以从所述执行进度开始继续执行所述定时任务。通过在任务执行节点不可用时标记定时任务的执行进度,并在该任务执行节点恢复为可用状态时,使得任务执行节点从该执行进度开始继续执行定时任务,从而可以在任务执行节点恢复可用状态时及时继续执行定时任务,避免了对定时任务的重复执行导致的资源耗费。
在上述技术方案的基础上,所述从所述客户端集群标识对应的多个客户端节点中确定一个状态信息为可用状态的客户端节点,作为任务执行节点,包括:
从所述客户端集群标识对应的多个客户端节点中确定状态信息为可用状态的至少一个客户端节点;
根据负载均衡策略,从所述至少一个客户端节点中确定一个客户端节点,作为所述任务执行节点。
其中,所述负载均衡策略可以包括:客户端节点执行定时任务的次数、客户端节点的性能指标和客户端节点所在机房,其中,所述客户端节点的性能指标是根据ZooKeeper集群中保存的客户端节点的心跳信息确定的。所述客户端节点的心跳信息可以包括客户端节点的标识(如IP地址)、任务类路径、端口号、IP地址、客户端集群标识、内存使用率、CPU使用率、总线程数等信息。客户端节点的性能指标可以包括内存使用率、CPU使用率、总线程数等
在定时任务为远程定时任务时,从MongoDB集群保存的任务注册信息中确定所述定时任务对应的客户端集群标识后,确定所述客户端集群标识对应的多个客户端节点,从ZooKeeper集群中获取所述多个客户端节点的状态信息,确定状态信息为可用状态的至少一个客户端节点,并根据负载均衡策略从所述至少一个客户端节点中确定一个客户端节点,作为任务执行节点,实现了调度定时任务时的负载均衡。
在根据负载均衡策略确定客户端节点时,可以综合考虑每个客户端节点执行定时任务的次数、客户端节点的性能指标和客户端节点所在机房,即执行定时任务的次数最少、客户端节点的性能指标最优、且客户端节点所在机房的执行性能(如一个客户端集群分布在两个机房中,一个机房中的客户端节点执行任务的性能较优,而另一个机房中的客户端节点的执行性能较差,这时优先选择性能较优的机房内的客户端节点),综合考虑这几项来进行负载均衡。
在本发明的一个实施例中,所述客户端节点在作为任务执行节点时还用于:在本地缓存中的任务相关日志达到预设阈值时,将所述任务相关日志发送至所述服务器节点;
所述服务器节点还用于:将所述任务相关日志保存至所述MongoDB集群;
所述MongoDB集群还用于:保存所述任务相关日志。
客户端节点在作为任务执行节点执行定时任务的过程中,会产生任务相关日志,并将任务相关日志保存到本地缓存中,如果本地缓存中的任务相关日志达到预设阈值(如预设阈值为1000条,即任务相关日志的条数达到1000条),将任务相关日志发送至服务器节点,服务器节点接收受到客户端节点发送的任务相关日志后,将任务相关日志保存至MongoDB集群。MongoDB集群还用于保存任务相关日志,从而通过MongoDB集群中的任务相关日志可以查询到各个定时任务的执行过程的情况。
本发明实施例中,由于通过ZooKeeper集群保存客户端节点的状态信息和心跳信息,并保存服务器节点的状态信息,通过MongoDB集群保存任务注册信息,以及定时任务对应的任务执行节点和服务器节点的标识,还可以保存任务相关日志,从而提供了双备策略看,当ZooKeeper集群不可用时,可以从MongoDB集群中获取定时任务在各个任务执行节点的情况,来确定客户端节点的状态信息,并可以根据该状态信息选取可用的客户端节点,以对定时任务进行调度。由于定时任务是需要周期性执行的,在周期性执行定时任务时,可以根据MongoDB集群各个定时任务的状态来防止执行叠加的情况。
在一个示例性的实施例中,所述定时任务的分布式调用***可以应用于租房业务中,在租房业务中,可以通过房本任务或缴纳保证金,对房源进行打标,使用户可以安心选房,有时候需要根据房源状态(未在线展示状态)给缴纳保证金的用户进行退款操作,该任务的执行逻辑为每小时将目前在线的百万级数据进行过滤,通过使用分布式调用***,将数据进行分片,将各分片数据指定给具体的各节点执行,任务注册到服务器集群后,由服务器集群统一调度。
本实施例提供的定时任务的分布式调用***,通过客户端集群来获取任务注册信息,并向服务器节点发送任务注册信息,服务器集群创建定时任务,将任务注册信息保存至MongoDB集群,还将客户端节点的心跳信息和状态信息保存至ZooKeeper集群,通过ZooKeeper集群中的节点的信息来对定时任务进行调度,选取合适的任务执行节点来执行定时任务,并且服务器节点还提供任务执行监控接口,通过任务执行监控接口接收客户端节点的操作指令,根据操作指令执行对定时任务的操作。通过服务器集群来对定时任务进行统一调度,而不需要客户端集群进行调度,实现了定时任务的分布式调度,而且在对任务进行调度时可以选取合适的节点进行执行,避免了所有节点同时执行相同任务,从而节省了本地服务资源,并可以充分利用集群资源,避免了单点故障,而且通过任务执行监控接口可以对任务执行过程进行监管。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种定时任务的分布式调用***,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (12)

1.一种定时任务的分布式调用***,其特征在于,包括:
客户端集群,包括多个客户端节点,客户端节点用于获取任务注册信息,向服务器节点发送与所在客户端集群标识对应的任务注册信息,并向服务器节点发送心跳信息,接收用户对定时任务的操作指令,并将所述操作指令发送至服务器节点;
服务器集群,包括多个服务器节点,用于接收所述任务注册信息,并创建与所述任务注册信息对应的定时任务,将所述任务注册信息保存至MongoDB集群;根据所述心跳信息确定客户端节点的状态信息,将所述客户端节点的状态信息和心跳信息保存至ZooKeeper集群,并将服务器节点的状态信息保存至ZooKeeper集群;在到达所述定时任务触发时间时,确定状态信息为可用状态的一个服务器节点或客户端节点,作为任务执行节点,并将所述定时任务发送至所述任务执行节点,由所述任务执行节点执行所述定时任务;提供任务执行监控接口,通过所述任务执行监控接口接收客户端节点的操作指令,并根据所述操作指令执行对定时任务的操作;
ZooKeeper集群,用于保存所述客户端集群中多个客户端节点的状态信息和心跳信息,并保存多个服务器节点的状态信息;
MongoDB集群,用于保存所述任务注册信息,并保存定时任务对应的任务执行节点和服务器节点的标识。
2.根据权利要求1所述的***,其特征在于,所述任务执行监控接口包括Console可视化操作平台和/或监控应用程序编程接口API,服务器节点用于根据通过Console可视化操作平台或监控API接收到的所述操作指令,执行与所述操作指令对应的操作。
3.根据权利要求2所述的***,其特征在于,所述与所述操作指令对应的操作包括创建定时任务、触发定时任务的执行、暂停定时任务的执行、重启定时任务、删除定时任务、显示定时任务分析报表、获取并显示定时任务的执行进度,以及获取并显示定时任务所在任务执行节点的性能指标中的至少一种。
4.根据权利要求2所述的***,其特征在于,所述Console可视化操作平台还用于在定时任务的执行过程中检测到异常问题时进行告警。
5.根据权利要求1所述的***,其特征在于,所述定时任务包括本地定时任务或远程定时任务;
所述确定状态信息为可用状态的一个服务器节点或客户端节点,作为任务执行节点,包括:
若根据所述任务注册信息确定定时任务为本地定时任务且为指定客户端节点执行,则确定所述指定客户端节点为任务执行节点;
若根据所述任务注册信息确定定时任务为本地定时任务且为服务器节点执行,则从所述多个服务器节点中确定状态信息为可用状态的一个服务器节点,作为任务执行节点;
若根据所述任务注册信息确定定时任务为远程定时任务,则确定所述定时任务对应的客户端集群标识,并从所述客户端集群标识对应的多个客户端节点中确定一个状态信息为可用状态的客户端节点,作为任务执行节点。
6.根据权利要求5所述的***,其特征在于,所述ZooKeeper集群还用于:在服务器节点处于不可用状态时,将该服务器节点作为第一服务器节点,触发对所述第一服务器节点中的定时任务的重新分配指令;
所述服务器集群中的其他服务器节点还用于:若接收到所述ZooKeeper集群触发的对所述第一服务器节点中的定时任务的重新分配指令,则从MongoDB集群中确定所述第一服务器节点对应的远程定时任务,并重新创建所述定时任务,对重新创建的远程定时任务进行调度。
7.根据权利要求5所述的***,其特征在于,所述服务器节点还用于:
在将指定客户端节点作为任务执行节点时,若根据心跳信息确定任务执行节点处于不可用状态时,标记定时任务的执行进度,并在任务执行节点恢复可用状态时,将所述定时任务的执行进度发送至所述任务执行节点,由所述任务执行节点从所述执行进度开始执行所述定时任务。
8.根据权利要求5所述的***,其特征在于,所述从所述客户端集群标识对应的多个客户端节点中确定一个状态信息为可用状态的客户端节点,作为任务执行节点,包括:
从所述客户端集群标识对应的多个客户端节点中确定状态信息为可用状态的至少一个客户端节点;
根据负载均衡策略,从所述至少一个客户端节点中确定一个客户端节点,作为所述任务执行节点。
9.根据权利要求8所述的***,其特征在于,所述负载均衡策略包括:客户端节点执行定时任务的次数、客户端节点的性能指标和客户端节点所在机房,其中,所述客户端节点的性能指标是根据ZooKeeper集群中保存的客户端节点的心跳信息确定的。
10.根据权利要求1所述的***,其特征在于,所述客户端节点和服务器集群中的服务器节点通过Netty进行通讯。
11.根据权利要求1所述的***,其特征在于,所述客户端节点在作为任务执行节点时还用于:在本地缓存中的任务相关日志达到预设阈值时,将所述任务相关日志发送至所述服务器节点;
所述服务器节点还用于:将所述任务相关日志保存至所述MongoDB集群;
所述MongoDB集群还用于:保存所述任务相关日志。
12.根据权利要求1所述的***,其特征在于,所述获取任务注册信息包括:通过动态代码、配置文件或注解方式获取任务注册信息。
CN202011273479.8A 2020-11-13 2020-11-13 定时任务的分布式调用*** Active CN112416581B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011273479.8A CN112416581B (zh) 2020-11-13 2020-11-13 定时任务的分布式调用***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011273479.8A CN112416581B (zh) 2020-11-13 2020-11-13 定时任务的分布式调用***

Publications (2)

Publication Number Publication Date
CN112416581A CN112416581A (zh) 2021-02-26
CN112416581B true CN112416581B (zh) 2022-02-18

Family

ID=74831269

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011273479.8A Active CN112416581B (zh) 2020-11-13 2020-11-13 定时任务的分布式调用***

Country Status (1)

Country Link
CN (1) CN112416581B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112597252B (zh) * 2021-03-04 2021-07-13 全时云商务服务股份有限公司 MongoDB服务器访问方法及***
CN113190274B (zh) * 2021-05-08 2022-09-27 杭州网易云音乐科技有限公司 节点处理方法及***、节点、介质、计算设备
CN113342492A (zh) * 2021-06-08 2021-09-03 杭州遥望网络科技有限公司 一种任务指令下发方法、装置、***、电子设备和介质
CN113742063A (zh) * 2021-08-06 2021-12-03 天津中新智冠信息技术有限公司 分布式定时调度***和方法
CN113687932A (zh) * 2021-08-30 2021-11-23 上海商汤科技开发有限公司 一种任务调度的方法、装置、***、电子设备及存储介质
CN114244794B (zh) * 2021-12-13 2024-01-26 统信软件技术有限公司 一种定时任务推送方法、计算设备及可读存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107092521A (zh) * 2016-12-30 2017-08-25 北京小度信息科技有限公司 一种分布式任务调度方法、装置及***
CN109831520A (zh) * 2019-03-07 2019-05-31 网宿科技股份有限公司 一种定时任务调度方法及相关装置
CN110213213A (zh) * 2018-05-30 2019-09-06 腾讯科技(深圳)有限公司 应用的定时任务处理方法及***
CN111338774A (zh) * 2020-02-21 2020-06-26 华云数据有限公司 分布式定时任务调度***及计算装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9164806B2 (en) * 2011-01-28 2015-10-20 Oracle International Corporation Processing pattern framework for dispatching and executing tasks in a distributed computing grid

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107092521A (zh) * 2016-12-30 2017-08-25 北京小度信息科技有限公司 一种分布式任务调度方法、装置及***
CN110213213A (zh) * 2018-05-30 2019-09-06 腾讯科技(深圳)有限公司 应用的定时任务处理方法及***
CN109831520A (zh) * 2019-03-07 2019-05-31 网宿科技股份有限公司 一种定时任务调度方法及相关装置
CN111338774A (zh) * 2020-02-21 2020-06-26 华云数据有限公司 分布式定时任务调度***及计算装置

Also Published As

Publication number Publication date
CN112416581A (zh) 2021-02-26

Similar Documents

Publication Publication Date Title
CN112416581B (zh) 定时任务的分布式调用***
US10348809B2 (en) Naming of distributed business transactions
CN109656782A (zh) 可视化调度监控方法、装置及服务器
CN111552556B (zh) 一种gpu集群服务管理***及方法
CN111324423B (zh) 容器内进程的监控方法、装置、存储介质和计算机设备
US20200186594A1 (en) Rule-based action triggering in a provider network
CN107451147A (zh) 一种kafka集群动态切换的方法和装置
CN111026602A (zh) 一种云平台的健康巡检调度管理方法、装置及电子设备
US11221943B2 (en) Creating an intelligent testing queue for improved quality assurance testing of microservices
CN111190732A (zh) 定时任务处理***及方法、存储介质和电子设备
CN113312153A (zh) 一种集群部署方法、装置、电子设备及存储介质
CN112688816B (zh) 提供商网络中的基于规则的动作触发方法和***
CN113422692A (zh) 一种K8s集群内节点故障检测及处理方法、装置及存储介质
US10122602B1 (en) Distributed system infrastructure testing
CN111611057B (zh) 分布式重试方法、装置、电子设备和存储介质
US11108638B1 (en) Health monitoring of automatically deployed and managed network pipelines
CN114090198A (zh) 分布式任务调度方法、装置、电子设备及存储介质
CN108243205B (zh) 一种用于控制云平台资源分配的方法、设备与***
CN106550002B (zh) 一种paas云托管***及方法
EP3721604B1 (en) Automatic subscription management of computing services
CN115373886A (zh) 服务群组容器停机方法、装置、计算机设备和存储介质
CN111176959B (zh) 跨域的应用服务器的预警方法、***及存储介质
CN112148420B (zh) 基于容器技术的异常任务处理方法、服务器及云平台
CN111163117B (zh) 一种基于Zookeeper的对等式调度方法和装置
CN109995617A (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