定时任务集群方法及其装置制造方法
【专利摘要】本发明提供一种定时任务集群方法及其装置,该方法包括:将集群内的节点分布式部署在至少三个的奇数个服务器节点上;将定时任务实例分布式部署在各个定时任务节点上;各个定时任务实例按照计划时间点从集群内获取定时任务执行权利,获得写入权的定时任务实例将执行定时任务,未获得写写入权的定时任务实例则放弃执行定时任务,直至下一个计划时间点,再循环执行获取定时任务执行权利。本发明的技术方案可以解决定时处理技术的单点问题,实现定时集群的高可用。
【专利说明】定时任务集群方法及其装置
【技术领域】
[0001]本发明属于计算机【技术领域】,具体涉及一种定时任务集群方法及其装置。
【背景技术】
[0002]在Iinux环境下,通常采用Crontab技术执行定时任务。但这种技术方案存在单点问题,即某一台Iinux服务器上,如果crontab进程工作异常或者Iinux服务器本身岩机损坏,会导致目标任务不能按预期定时执行;如果使用多个Iinux服务器部署crontab任务,又存在相同任务被重复执行的问题。
[0003]Spring quartz是JAVA领域一项与crontab相类似的定时处理技术,存在和crontab相同的执行机制和缺陷。无法解决单点问题,达不到高可用。
[0004]针对crontab等简单集群技术所遇到的单点问题,Quartz集群技术实现了定时任务的高可用,使用多个定时任务实例通过争锁机制决定某时间点由其中一个定时任务实例来执行定时任务。由于现有的quartz集群技术通常使用数据库作为锁介质,集群方案十分笨重,且由于定时集群的高可用依赖于数据库的高可用,实际加大了定时集群实现高可用的难度。
【发明内容】
[0005]本发明提供一种定时任务集群方法及其装置,其可以解决解决现有技术中定时任务方案的单点问题,从而实现定时集群的高可用。
[0006]为实现上述目的,本发明提供一种定时任务集群方法,该定时任务集群方法包括:
[0007]将集群内的节点分布式部署在至少三个的奇数个服务器节点上;
[0008]将定时任务实例分布式部署在各个定时任务节点上;
[0009]各个定时任务实例按照计划时间点从集群内获取定时任务执行权利,获得写入权的定时任务实例将执行定时任务,未获得写写入权的定时任务实例则放弃执行定时任务,直至下一个计划时间点,再循环执行获取定时任务执行权利。
[0010]进一步地,还包括:
[0011 ] 各定时任务实例按照相同的路径命名规则向集群内申请写入相同的路径信息。
[0012]进一步地,所述路径命名规则包括:
[0013]根据定时任务包名、类名、当前时间戳,生成节点路径。
[0014]进一步地,还包括:
[0015]各个定时任务执行定时计算时,采用分布式锁机制,按照相同的路径命名规则,向集群内申请创建一个临时节点,并获得所述临时节点下的所有创建节点的序号,根据所述临时节点的序号,判断是否获得锁成功以确定是否执行定时计算。
[0016]进一步地,判断是否获得锁成功以确定是否执行定时计算具体包括:
[0017]判断所述临时节点的序号是否为最小,若是,则获得锁,继续执行定时计算,计算完毕删除临时节点;若否,则获得锁失败,删除临时节点,取消本次定时计算。
[0018]进一步地,各个定时任务节点启动时保持时间同步。
[0019]进一步地,还包括:
[0020]根据对定时任务的包名以及类名进行区分,以实现不同的定时任务共享集群。
[0021]为实现上述目的,本发明提供一种实现定时任务集群的装置,该装置包括:
[0022]节点设置单元,用于将集群内的节点分布式部署在3个以上的单数个服务器节点上;
[0023]定时任务实例设置单元,用于将定时任务实例分布式部署在各个定时任务节点上;
[0024]定时任务执行单元,用于各个定时任务实例按照计划时间点从集群内获取定时任务执行权利,获得与入权的定时任务实例将执行定时任务,未获得与与入权的定时任务实例则放弃执行定时任务,直至下一个计划时间点,再循环执行获取定时任务执行权利。
[0025]进一步地,还包括:
[0026]各个定时任务执行定时计算时,采用分布式锁机制,按照相同的路径命名规则,向集群内申请创建一个临时节点,并获得所述临时节点下的所有创建节点的序号,根据所述临时节点的序号,判断是否获得锁成功以确定是否执行定时计算。
[0027]进一步地,判断是否获得锁成功以确定是否执行定时计算具体包括:
[0028]判断所述临时节点的序号是否为最小,若是,则获得锁,继续执行定时计算,计算完毕删除临时节点;若否,则获得锁失败,删除临时节点,取消本次定时计算。
[0029]本发明提供的定时任务集群方法及其装置,通过定时任务多点部署,解决现有技术中定时任务方案的单点问题。本发明中多个定时任务实例同时运行,在预期时间点,只有一个定时任务实例执行任务;即使其中一个实例因为意外故障无法运行,仍有其他实例保证定时任务得到执行;采用zookeeper分布式锁机制,在同时具有多个定时任务实例的情况下,保证只有一个实例获得执行权限。它避免了采用数据库这样笨重的锁方案,使定时任务集群在部署及维护上更加简单便捷。
【专利附图】
【附图说明】
[0030]图1为本发明实施例一提供的定时任务集群方法的流程示意图;
[0031]图2为本发明实施例二提供的实现定时任务集群的装置的结构示意图;
[0032]图3为实施例二中的实现定时任务集群的装置的应用示意图。
【具体实施方式】
[0033]为使本领域技术人员更好地理解本发明的技术方案,下面结合附图和【具体实施方式】对本发明作进一步详细描述。
[0034]图1为本发明实施例一提供的定时任务集群方法的流程示意图,如图1所示,该定时任务集群方法包括:
[0035]步骤S1、将集群内的节点分布式部署在至少三个的奇数个服务器节点上。
[0036]具体地,Zookeeper节点分布式部署在单数个服务器节点上,部署得越多,可靠性就越高,部署奇数个,Zookeeper集群是以岩机个数过半才会让整个集群岩机的,奇数个集群更佳。
[0037]步骤S2、将定时任务实例分布式部署在各个定时任务节点上。
[0038]步骤S3、各个定时任务实例按照计划时间点从集群内获取定时任务执行权利,获得与入权的定时任务实例将执行定时任务,未获得与与入权的定时任务实例则放弃执行定时任务,直至下一个计划时间点,再循环执行获取定时任务执行权利。
[0039]具体地,各定时任务为永驻进程,到计划时间点,各个定时任务实例程序按照相同的路径命名规则向Zookeeper集群申请写入相同的路径信息,获得写入权的定时任务实例将执行定时任务;未获得写入权的定时实例则放弃执行定时任务,等到下一个计划时间点,各定时任务再重复上述操作。 [0040]优选地,实例按照相同的路径命名规则向集群内申请写入相同的路径信息。路径命名规则包括:根据定时任务包名、类名、当前时间戳,生成节点路径。例如:“cn.knet.timing.TcpTask”,按计划要在2010年8月5号20点30分执行定时计算,则生成路径应为“/cn/knet/timing/tcptask/201008052030”。
[0041]各个定时任务执行定时计算时,采用分布式锁机制,按照相同的路径命名规则,向集群内申请创建一个临时节点,并获得临时节点下的所有创建节点的序号,根据临时节点的序号,判断是否获得锁成功以确定是否执行定时计算。
[0042]进一步地,判断是否获得锁成功以确定是否执行定时计算具体包括:
[0043]判断临时节点的序号是否为最小,若是,则获得锁,继续执行定时计算,计算完毕删除临时节点;若否,则获得锁失败,删除临时节点,取消本次定时计算。
[0044]本实施例中,各个定时任务节点启动时保持时间同步。根据对定时任务的包名以及类名进行区分,以实现不同的定时任务共享集群。各定时任务执行定时计算时,先按照相同的路径命名规则,向zookeeper申请创建一个临时节点,并获得这个节点下所有创建节点的序号,如果自己的节点序号最小,则视为获得锁,继续执行定时计算,计算完毕删除临时节点;如果自己节点序号并非最小,则视为获得锁失败,删除临时节点,取消本次定时计笪
ο
[0045]本实施例提供的定时任务集群方法中,多个定时任务实例同时运行,在预期时间点,只有一个定时任务实例执行任务;即使其中一个实例因为意外故障无法运行,仍有其他实例保证定时任务得到执行;采用zookeeper分布式锁机制,在同时具有多个定时任务实例的情况下,保证只有一个实例获得执行权限。它避免了采用数据库这样笨重的锁方案,使定时任务集群在部署及维护上更加简单便捷。
[0046]图2为本发明实施例二提供的实现定时任务集群的装置的结构示意图,如图2所示,该实现定时任务集群的装置包括:节点设置单元21、定时任务实例设置单元22和定时任务执行单元23,其中,节点设置单元21用于将集群内的节点分布式部署在3个以上的单数个服务器节点上;定时任务实例设置单元22用于将定时任务实例分布式部署在各个定时任务节点上;定时任务执行单元23用于各个定时任务实例按照计划时间点从集群内获取定时任务执行权利,获得与入权的定时任务实例将执行定时任务,未获得与与入权的定时任务实例则放弃执行定时任务,直至下一个计划时间点,再循环执行获取定时任务执行权利。
[0047]优选地,各个定时任务执行定时计算时,采用分布式锁机制,按照相同的路径命名规则,向集群内申请创建一个临时节点,并获得所述临时节点下的所有创建节点的序号,根据所述临时节点的序号,判断是否获得锁成功以确定是否执行定时计算。
[0048]进一步地,判断是否获得锁成功以确定是否执行定时计算具体包括:
[0049]判断所述临时节点的序号是否为最小,若是,则获得锁,继续执行定时计算,计算完毕删除临时节点;若否,则获得锁失败,删除临时节点,取消本次定时计算。
[0050]本实施例提供的定时任务集群装置中,多个定时任务实例同时运行,在预期时间点,只有一个定时任务实例执行任务;即使其中一个实例因为意外故障无法运行,仍有其他实例保证定时任务得到执行;采用Zookeeper分布式锁机制,在同时具有多个定时任务实例的情况下,保证只有一个实例获得执行权限。它避免了采用数据库这样笨重的锁方案,使定时任务集群在部署及维护上更加简单便捷。
[0051]图3为实施例二中的实现定时任务集群的装置的应用示意图,如图3所示,该集群系统包括:Zookeeper集群、定时任务实例I和定时任务实例2。
[0052]具体地,将Zookeeper集群内的节点分布式部署在至少三个的奇数个服务器节点上;将定时任务实例分布式部署在各个定时任务节点上;各个定时任务实例按照计划时间点从集群内获取定时任务执行权利,获得与入权的定时任务实例将执行定时任务,未获得写写入权的定时任务实例则放弃执行定时任务,直至下一个计划时间点,再循环执行获取定时任务执行权利。
[0053]本发明采用分布式锁机制,各个定时任务节点启动时保持时间同步。根据对定时任务的包名以及类名进行区分,以实现不同的定时任务共享集群。各个定时任务执行定时计算时,采用分布式锁机制,按照相同的路径命名规则,向集群内申请创建一个临时节点,并获得所述临时节点下的所有创建节点的序号,根据所述临时节点的序号,判断是否获得锁成功以确定是否执行定时计算。
[0054]具体地,各定时任务执行定时计算时,先按照相同的路径命名规则,向zookeeper申请创建一个临时节点,并获得这个节点下所有创建节点的序号,如果自己的节点序号最小,则视为获得锁,继续执行定时计算,计算完毕删除临时节点;如果自己节点序号并非最小,则视为获得锁失败,删除临时节点,取消本次定时计算。
[0055]本发明中。定时任务的高可用由多实例部署保证;分布式锁的高可用由Zookeeper本身携带的高可用特性保证。对定时任务包名及类名进行区分,则可以实现不同的定时任务共享集群。即只需要搭建一套zookeeper运行环境,供企业内部所有定时任务共享使用。
[0056]本实施例提供的定时任务集群系统中,多个定时任务实例同时运行,在预期时间点,只有一个定时任务实例执行任务;即使其中一个实例因为意外故障无法运行,仍有其他实例保证定时任务得到执行;采用zookeeper分布式锁机制,在同时具有多个定时任务实例的情况下,保证只有一个实例获得执行权限。它避免了采用数据库这样笨重的锁方案,使定时任务集群在部署及维护上更加简单便捷。
[0057]可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。
【权利要求】
1.一种定时任务集群方法,其特征在于,包括: 将集群内的节点分布式部署在至少三个的奇数个服务器节点上; 将定时任务实例分布式部署在各个定时任务节点上; 各个定时任务实例按照计划时间点从集群内获取定时任务执行权利,获得写入权的定时任务实例将执行定时任务,未获得写写入权的定时任务实例则放弃执行定时任务,直至下一个计划时间点,再循环执行获取定时任务执行权利。
2.根据权利要求1所述的定时任务集群方法,其特征在于,还包括: 各定时任务实例按照相同的路径命名规则向集群内申请写入相同的路径信息。
3.根据权利要求2所述的定时任务集群方法,其特征在于,所述路径命名规则包括: 根据定时任务包名、类名、当前时间戳,生成节点路径。
4.根据权利要求3所述的定时任务集群方法,其特征在于,还包括: 各个定时任务执行定时计算时,采用分布式锁机制,按照相同的路径命名规则,向集群内申请创建一个临时节点,并获得所述临时节点下的所有创建节点的序号,根据所述临时节点的序号,判断是否获得锁成功以确定是否执行定时计算。
5.根据权利要求4所述的定时任务集群方法,其特征在于,判断是否获得锁成功以确定是否执行定时计算具体包括: 判断所述临时节点的序号是否为最小,若是,则获得锁,继续执行定时计算,计算完毕删除临时节点;若否,则获得锁失败,删除临时节点,取消本次定时计算。
6.根据权利要求5所述的定时任务集群方法,其特征在于,各个定时任务节点启动时保持时间同步。
7.根据权利要求6所述的定时任务集群方法,其特征在于,还包括: 根据对定时任务的包名以及类名进行区分,以实现不同的定时任务共享集群。
8.一种实现定时任务集群的装置,其特征在于,包括: 节点设置单元,用于将集群内的节点分布式部署在3个以上的单数个服务器节点上; 定时任务实例设置单元,用于将定时任务实例分布式部署在各个定时任务节点上; 定时任务执行单元,用于各个定时任务实例按照计划时间点从集群内获取定时任务执行权利,获得与入权的定时任务实例将执行定时任务,未获得与与入权的定时任务实例则放弃执行定时任务,直至下一个计划时间点,再循环执行获取定时任务执行权利。
9.根据权利要求8所述的实现定时任务集群的装置,其特征在于,还包括: 各个定时任务执行定时计算时,采用分布式锁机制,按照相同的路径命名规则,向集群内申请创建一个临时节点,并获得所述临时节点下的所有创建节点的序号,根据所述临时节点的序号,判断是否获得锁成功以确定是否执行定时计算。
10.根据权利要求9所述的实现定时任务集群的装置,其特征在于,判断是否获得锁成功以确定是否执行定时计算具体包括: 判断所述临时节点的序号是否为最小,若是,则获得锁,继续执行定时计算,计算完毕删除临时节点;若否,则获得锁失败,删除临时节点,取消本次定时计算。
【文档编号】G06F9/46GK103744724SQ201410055769
【公开日】2014年4月23日 申请日期:2014年2月19日 优先权日:2014年2月19日
【发明者】高雷 申请人:互联网域名系统北京市工程研究中心有限公司, 北龙中网(北京)科技有限责任公司