【淘淘】Quartz之集群利弊
一、前言:
虽然单个Quartz实例能给予我们很好的任务job调度能力,但它不能满足典型的企业需求,如可伸缩性、高可靠性满足。假如你需要故障转移的能力并能运行日益增多的 Job,Quartz集群势必成为你应用的一部分了。使用 Quartz 的集群能力可以更好的支持你的业务需求,并且即使是其中一台机器在最糟的时间挂掉了也能确保所有的 Job 得到执行。
二、Quartz集群框架效果图:
一个 Quartz 集群中的每个节点是一个独立的 Quartz 应用,它又管理着其他的节点。也就是你必须对每个节点分别启动或停止。不像许多应用服务器的集群,独立的Quartz 节点并不与另一其的节点或是管理节点通信。Quartz 应用是通过数据库表来感知到另一应用的。
spring中quartz.properties配置quartz集群功能:
- org.quartz.jobStore.isClustered= true
- org.quartz.jobStore.clusterCheckinInterval =20000
三、Quartz集群的好处优势:
1、Quartz能完成较为复杂的定时任务
2、 Quartz的集群功能保证了任务可靠、高效的正常执行,当集群中其中的一个节点出问题时,另外的节点接手任务,继续工作。确保所有的job的到执行。
3、 Quartz功能强大但配置较为简单
4、 无环境依赖性,Java的普通应用均能使用
四、Quartz集群的缺点:
Quartz一点都不明确你是在同一台机器上运行所有节点,还是在不同的机器上运行所有节点。当集群是放置在不同的机器上时,我们称之为水平集群。如果所有节点是跑在同一台机器的时候,我们称之为垂直集群。对于垂直集群,存在着单点故障的问题。这对高可用性的应用来说是个坏消息,因为一旦机器宕掉了,所有的节点也就被有效的终止了。而当你运行水平集群时,一个严格的要求就是我们的时钟时间必须要同步,以免出现离奇且不可预知的行为。假如时钟没能够同步,Scheduler 实例将对其他节点的状态产生混乱,造成难以估计得麻烦。
怎么解决这个问题呢?
俗话说,不能把所有的鸡蛋放在一个篮子里。在能满足业务或者性能要求的条件下,尽量使用水平集群。我们有很多方法可以来保证时间的同步。其中最简单额就是把时间抽出来,单独使用一个internet时间服务器(Internet Time Server ITS)来做标准时间,所有的节点都已这上面的时间为准,时间就统一了。
Trigger配置文件更改时当数据库qrtz_cron_triggers中cron_expression未更改,则触发器的运行触发规则未改变。
所以quartz集群缺陷总结以下几点:
1、时间规则更改不方便,需同步更改数据库时间规则描述
2、Quartz集群当所有节点跑在同一台服务器上,当服务器崩溃时所有节点将终止,定时任务将不能正常执行
3、Quartz集群当节点不在同一台服务器上时,因时钟的可能不同步导致节点对其他节点状态的产生影响。
而我们的解决方案,参考本博客内容选用。慎用!
【淘淘】Quartz之集群利弊的更多相关文章
- 定时组件quartz系列<二>quartz的集群原理
1.基本信息: Quartz是一个开源的作业调度框架,它完全由java写成,并设计用于J2Se和J2EE应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它 来为执行一个作业而创建简单的或 ...
- 浅析Quartz的集群配置
浅析Quartz的集群配置(一) 收藏人:Rozdy 2015-01-13 | 阅:1 转:22 | 来源 | 分享 1 基本信息 摘要:Quar ...
- 如何解决quartz在集群下出现的资源抢夺现象
Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度,简单的说就是可以 ...
- quartz在集群环境下的最终解决方案
在集群环境下,大家会碰到一直困扰的问题,即多个 APP 下如何用 quartz 协调处理自动化 JOB . 大家想象一下,现在有 A , B , C3 台机器同时作为集群服务器对外统一提供 SERVI ...
- Spring Boot Quartz 分布式集群任务调度实现
Spring Boot Quartz 主要内容 Spring Scheduler 框架 Quartz 框架,功能强大,配置灵活 Quartz 集群 mysql 持久化定时任务脚本(tables_mys ...
- (转) 淘淘商城系列——Redis集群的搭建
http://blog.csdn.net/yerenyuan_pku/article/details/72860432 本文我将带领大家如何搭建Redis集群.首先说一下,为何要搭建Redis集群.R ...
- (转)淘淘商城系列——Solr集群搭建
http://blog.csdn.net/yerenyuan_pku/article/details/72957201 我们之前做的搜索使用的是Solr的单机版来实现的,正是由于我们现在商品数据量不多 ...
- spring结合Quartz的集群功能实现
一:前沿 在上一篇(http://www.cnblogs.com/wuhao1991/p/4331613.html)的博客中记载了定时的功能,但是集成是没有成功的,在这篇中,我在解释下这里的”集成的含 ...
- Quartz的集群模式和单机模式共存-让一个非集群的Quartz与集群节点并行着运行
假如你让一个非集群的 Quartz 应用与集群节点并行着运行,设法使用 JobInitializationPlugin和 RAMJobStore Quartz支持可选节点执行jobquartz集群,会 ...
随机推荐
- 如何判断自己的VPS是那种虚拟技术实现的
我们知道VPS的虚拟技术有许多种,如Openvz.Xen.VMware vSphere.Hyper-V.KVM及Xen的HVM与PV等.在Xen中pv是半虚拟化,hvm是全虚拟化,pv只能用于linu ...
- Java 正则表达式详解
Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索 ...
- PL/SQL设置主键自增
oracle没有设置主键auto increment的功能,需要自己编写序列和触发器实现主键自动递增. 示例: 创建表menu: 一.创建表 create table menu( menuId n ...
- ArcGIS Server开发教程系列(3)切片
切片工作,我们可以一级一级的切,也可以,所有的一块切,Recreate All Tiles这项是说,在没有进行任何的切片工作时,可以选用这项:Recreate Empty Tiles这项是说,如果之前 ...
- C++ 11 中的右值引用
C++ 11 中的右值引用 右值引用的功能 首先,我并不介绍什么是右值引用,而是以一个例子里来介绍一下右值引用的功能: #include <iostream> #include &l ...
- Angular-Chart.js 初接触;;;
可以先看下下面的链接,了解下, 推荐链接 准备工作 JS文件{angular.js.Chart.js.angular-chart.js} 这3个文件我的获取难易程度:Chart.js > ang ...
- 大组合数:Lucas定理
最近碰到一题,问你求mod (p1*p2*p3*……*pl) ,其中n和m数据范围是1~1e18 , l ≤10 , pi ≤ 1e5为不同的质数,并保证M=p1*p2*p3*……*pl ≤ 1e18 ...
- Windows下图文详解PHP三种运行方式(php_mod、cgi、fastcgi)
PHP能不能成功的在Apache服务器上运行,就看我们如何去配置PHP的运行方式.PHP运行目前为止主要有三种方式: a.以模块加载的方式运行,初学者可能不容易理解,其实就是将PHP集成到Apache ...
- mysql连接超时与jndi数据源配置
昨天有运营说添加活动不能用了,我就看了一下后台日志,发现访问数据库是报错: at java.lang.Thread.run(Thread.java:722) Caused by: com.mysql. ...
- Linux下c开发 之 线程通信(转)
Linux下c开发 之 线程通信(转) 1.Linux“线程” 进程与线程之间是有区别的,不过Linux内核只提供了轻量进程的支持,未实现线程模型.Linux是一种“多进程单线程”的操作系统.Linu ...