【问题标题】:Hazelcast best practices to failover in parallel processingHazelcast 在并行处理中故障转移的最佳实践
【发布时间】:2015-02-12 17:09:34
【问题描述】:

我是 Hazelcast 的新手。所以有一个关于并行处理期间的最佳故障处理实践的问题:

掌握 Hazelcast,第 6.6 节,p。 96:

工作队列没有高可用性:每个成员将创建一个或 更多具有普通工作队列的本地 ThreadPoolExecutors 真正的工作。当一个任务被提交时,它会被放到工作队列中 该 ThreadPoolExecutor 并且不会被 Hazelcast 备份。如果 该成员将发生某些事情,所有未处理的工作将 丢了。

任务:

假设我有 1 个主节点和 2 个从节点。我用

启动耗时的任务
executor.submitToAllMembers (new TimeConsumingTask())

所以每个节点都在处理一些东西。当他们都在处理某些事情时,其中一个奴隶失败了

问题:

  1. 不可能在另一个节点上重新运行失败的成员工作,对吧?
  2. 除了在整个集群中重新运行整个作业集之外,还有其他(最好是更好的)方法吗?(如果 TimeConsumingTaskRunnable
  3. 除了在整个集群中重新运行整个作业集之外,还有其他(最好是更好的)方法吗?(如果 TimeConsumingTaskCallable 并且我想获得一个 Future 作为集群计算结果)

【问题讨论】:

    标签: java hazelcast


    【解决方案1】:

    我假设“故障处理”是指集群中的某个节点出现故障的情况......

    问题 1 不是自动的。您假设 Hazelcast 的执行任务不是容错的是正确的。但是,如果您能够处理失败的任务,我看不出您无法将工作重新提交给集群中的其他成员的原因。

    问题 2 很难知道您的 TimeConsumingTask 实际在做什么 - 与任何分布式执行引擎一样,通常最好将长时间运行的任务组合成一系列较小的任务。如果你不能将你的任务组合成更小的元素,那就不行——没有比重新提交整个工作更好的方法了

    问题 3 此问题与问题 2 相同。如果节点失败,从任务提交中返回 Future 不会对您有很大帮助。 Futures 使您能够等待(可选地等待指定的超时期限)结果并提供取消任务的可能性。


    一般来说,为了处理节点故障,我会看看 ExecutionCallback 是否会有所帮助 - 在这种情况下,您会收到有关故障的通知,我目前假设节点故障属于此范围。当您的回调收到失败通知时,您可以重新提交作业。

    您可能还想查看核心 Hazelcast API 之外的其他一些方法。 Hazeltask 是 GitHub 上的一个项目,它承诺故障转移处理和任务重新提交 - 所以值得一看吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      相关资源
      最近更新 更多