【问题标题】:Quartz Scheduler Cluster Time SyncQuartz 调度器集群时间同步
【发布时间】:2012-04-03 17:48:13
【问题描述】:

我查看了 Quartz 文档,但似乎无法找到问题的明确答案:如果我在集群环境中使用 Quartz Scheduler 但机器不同步会发生什么(我们将使用 JobStoreTX )? Quartz 会解雇多项工作吗?它会只通过锁定数据库行条目来触发一个吗?

【问题讨论】:

  • tutorial 只是说:“永远不要在单独的机器上运行集群,除非它们的时钟使用某种形式的时间同步服务(守护程序)进行同步,这种服务非常定期运行(时钟必须彼此相差不到一秒钟)。

标签: java database quartz-scheduler sync cluster-computing


【解决方案1】:

很遗憾,我认为它没有被记录在案,但我相信结果并没有那么具有破坏性和错误性。

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

如果服务器时间未跨集群同步,则假设其中一台服务器具有未来的时钟。该服务器认为它比实际时间晚,因此它太早地获取和启动作业 - 或者至少比所有其他服务器都早。这意味着单个服务器将运行更多(如果不是全部)作业,从集群的其余部分窃取工作。这并不是不安全本身,但会导致不对称的集群负载。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多