【问题标题】:Select node in Quartz cluster to execute a job在 Quartz 集群中选择节点执行作业
【发布时间】:2011-06-18 08:47:57
【问题描述】:

我对 Quartz 集群有一些疑问,特别是关于触发器如何在集群内触发/作业执行。

  1. quartz 在执行作业时是否优先考虑节点?例如总是或从不上一次执行相同作业的节点,或者只是首先到达作业的任何节点?

  2. 是否可以指定应该执行作业的节点?

【问题讨论】:

    标签: quartz-scheduler


    【解决方案1】:

    这个问题的答案将是“视情况而定”。

    对于石英 1.x,答案是作业的执行总是(仅)在或多或少的随机节点上。 “随机性”实际上取决于哪个节点首先到达它。对于“忙碌”的调度程序(总是有很多作业要运行),这最终会在集群节点之间提供相当平衡的负载。对于非繁忙的调度程序(仅偶尔触发一个作业),有时看起来单个节点正在触发所有作业(因为调度程序会在作业执行完成时寻找下一个要触发的作业 - 所以节点刚刚完成执行倾向于找到下一个要执行的工作)。

    对于石英 2.0(处于测试阶段),对于标准石英,答案与上述相同。但是 Terracotta 人已经构建了他们的 TerracottaJobStore 的企业版,它提供了更复杂的集群控制 - 当您安排作业时,您可以指定集群的哪些节点对作业的执行有效,或者您可以指定节点特征/必要条件,例如作为“具有至少 100 MB RAM 可用的节点”。这也可以与 ehcache 一起使用,这样您就可以指定作业“在 X 键入的数据为本地的节点上”运行。

    【讨论】:

      【解决方案2】:

      我使用 Spring + AOP + memcached 为我的 Web 应用程序解决了这个问题。我的作业确实从它们遍历的数据中知道作业是否已经执行,所以我唯一需要避免的是同时运行两个或多个节点。

      你可以在这里阅读:

      http://blog.oio.de/2013/07/03/cluster-job-synchronization-with-spring-aop-and-memcached/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多