2012-04-03 96 views
3

我已经通过Quartz文档看了,我似乎无法找到问题的明确答案:如果我在集群环境中使用Quartz Scheduler但机器脱离同步会发生什么(我们会使用JobStoreTX)? Quartz会关闭多个工作吗?它只会通过锁定数据库行条目来触发一个条目?石英调度程序集群时间同步

回答

1

不幸的是,我不认为这是记录,但我相信结果不是那么具有破坏性和错误。

集群轮询每个Quartz调度实例的数据库每隔几秒钟试图寻找新的就业机会开火(我认为在默认情况下它会搜索与now - 30now + 60秒之间下次预定时间的所有作业 - 但这是无关紧要的,取决于在配置上)。此操作在群集中显然是安全的,因为很可能多个实例同时轮询新作业。

如果服务器时间在群集中不同步,假定其中一台服务器将来有时钟。这台服务器认为它比实际时间晚,所以它太早提取和启动作业 - 或者至少比所有其他作业早。这意味着单个服务器将运行更多(如果不是全部)作业,从群集的其余部分窃取工作。这不是不安全本身,但会造成不对称的群集负载。

我在考虑提出一个问题,提出在所有服务器中使用数据库时间以避免这些问题。然而,的流行以及使用外部时间源的复杂性使其成为一个糟糕的主意。