我对Quartz集群有一些疑问,特别是关于如何在集群内执行触发器触发/作业。选择Quartz集群中的节点来执行作业
当执行作业时,石英是否给予节点任何偏好?比如总是或从不是最后一次执行相同任务的节点,还是仅仅是首先获得工作的节点?
是否可以指定应执行作业的节点?
我对Quartz集群有一些疑问,特别是关于如何在集群内执行触发器触发/作业。选择Quartz集群中的节点来执行作业
当执行作业时,石英是否给予节点任何偏好?比如总是或从不是最后一次执行相同任务的节点,还是仅仅是首先获得工作的节点?
是否可以指定应执行作业的节点?
对此的回答将是一个“取决于”的东西。
对于quartz 1.x,答案是作业的执行总是(仅)在一个或多或少的随机节点上。其中“随机性”实际上是基于哪个节点首先获得的。对于“繁忙”的调度程序(其中总是有很多作业要运行),这最终会在群集节点间提供相当均衡的负载。对于非繁忙的调度程序(只是偶尔的作业),它有时可能看起来像是一个单一的节点正在启动所有的作业(因为调度程序会在作业执行完成时寻找下一个要启动的作业 - 所以节点只需完成一次执行往往会找到下一份工作来执行)。
对于标准石英,石英2.0(测试版)的答案与上述相同。但是Terracotta人已经构建了他们的TerracottaJobStore企业版,它提供了更复杂的集群控制 - 当您安排作业时,您可以指定集群的哪些节点对作业的执行有效,或者您可以指定节点特性/必要条件等作为“至少有100 MB可用RAM的节点”。这也与ehcache一起使用,以便您可以指定要在“由X键入的数据在本地”的节点上运行的作业。
我使用Spring + AOP + memcached为我的web应用程序解决了这个问题。如果作业已经执行,我的作业可以从它们所传送的数据中知道,所以我唯一需要避免的是同时运行两个或多个节点。
你可以在这里阅读:
http://blog.oio.de/2013/07/03/cluster-job-synchronization-with-spring-aop-and-memcached/
感谢信息。 – ButterflyCoder 2011-02-02 01:25:04