定时任务知多少(三)——任务调度的集群方案

来源:互联网 发布:js随机函数 编辑:程序博客网 时间:2024/05/21 01:44

Quartz是Java领域最著名的开原任务调度工具。Quartz提供了即为广泛的特性,如前文讲的持久化任务、本文将要介绍的集群,以及分布式任务等等。Quartz有完全由Java编写,方面集成Spring;伸缩性、负载均衡和高可用的特点。


Quartz集群部署

Quartz集群中的每个节点是一个独立的Quartz应用,它又管理着其他的节点。该集群需要分别对每个节点分别启动或停止,不像应用服务器的集群,独立的Quartz节点并不与另一个节点或是管理节点通信。Quartz应用时通过数据库表来感知到另一个应用。只有使用持久化的JobStore才能完成Quartz集群。


PS:应用服务器的集群是每台服务器上,都部署相同的应用,通过类似于Apache这样的工具,来分摊应用服务器的访问压力;而Quartz的集群则不能使用类似的方式实现集群。


原理:

集群通过故障切换和负载平衡的功能,能给调度器带来高可用性和伸缩性。目前集群只能工作在JDBC-JobStore(JobStore TX 或者JobStoreCMT)方式下,从本质上来说,是使集群上的每一个节点通过共享一个数据库来工作的。(Quartz启动两个维护线程,来维护数据库状态实现集群管理,一个是检测节点状态的线程,一个是恢复任务线程)。

负载平衡是自动完成的,集群的每个节点会尽快触发任务。当一个触发器的出发时间达到时,第一个节点将会获得任务(通过锁定),称为执行任务的节点。

故障切换的发生是在当一个节点正在执行一个或多个任务失败的时候。当一个节点失败了,其他的节点检测到,并且标识在失败节点上正在进行的数据库中的任务。任何被标记为可恢复的任务都是被其他的节点重新执行。没有标记可恢复的任务只会被释放出来,将会在下次相关触发器触发时执行。


未完待续。。。













0 0