【问题标题】:What ways exist to distribute asynchronous batch tasks?有哪些方法可以分发异步批处理任务?
【发布时间】:2009-12-23 20:34:24
【问题描述】:

我目前正在研究存在哪些 Java 兼容解决方案来满足我的要求,如下所示:

  • 基于定时器/可调度任务到批处理
  • 分布式,并由此提供水平扩展能力
  • 弹性,请不要使用 SPF

这些任务的性质(大量的 XML 生成,以及交付到基于 Web 的接收节点)意味着使用 Quartz 之类的东西在单个服务器上运行它们是不可行的。

我听说过 Hadoop 和 JavaSpaces 等技术有效地解决了问题的可扩展性和弹性问题。不知道这些是否非常适合我的要求,很难知道其他技术可能适合什么。

我真的很想知道这个领域的人们觉得有哪些可用的选项,以及每个选项如何发挥其优势,或者比其他人更适合某些问题。

NB:值得注意的是,调度能力可能是我们目前做事方式的遗留问题。是的,有些任务应该在特定时间完成。它还被用于在没有规定时间的情况下限制吞吐量。

【问题讨论】:

    标签: java asynchronous distributed batch-processing


    【解决方案1】:

    异步总是让我想起 JMS。将请求消息发送到队列;从池中取出一个 MessageListener 来处理它。

    这可以扩展,因为队列和侦听器可以位于远程服务器上。监听线程池的大小可以配置。您可以为不同的任务设置不同的侦听器。

    更新:您可以通过集群和负载平衡来避免单点故障。

    您可以使用 ActiveMQ(开源)、JBOSS(可用的开源版本)或任何 Java EE 应用服务器免费获得 JMS,因此无需考虑预算。

    并且没有锁定,因为您使用的是 JMS,除了您使用的是 Java。

    我建议使用 Spring 消息驱动的 POJO。当然,社区版是开源的。

    如果这不适合您,请查看 Spring BatchSpring Integration。这两个都可能有用,而且社区版本是开源的。

    【讨论】:

    • 我过去曾使用过 JMS,虽然它非常适合异步,但我没有使用任何不容易成为单点故障的工具。当然,我不怀疑商业供应商提供可分发、弹性 MQ 集群的重金属版本。没有那种预算,也没有对供应商锁定的兴趣。我有点想远离大型商业框架,首选开源。
    • ActiveMQ 和 RabbitMQ 是两个流行的支持集群的开源队列,因此如果托管队列的服务器出现故障,您也不会受到影响。 rabbitmq.comactivemq.apache.org。两者都有 Java 客户端 API。
    【解决方案2】:

    你看过GridGain吗?我很确定它不会解决调度问题,但是你可以扩展它,它就像“魔术”一样发生,要执行的代码被发送到一个节点并在那里执行。当您没有要发送的数据库连接(或任何不可序列化的东西)时,它可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-18
      • 2012-03-29
      • 2013-02-13
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      相关资源
      最近更新 更多