分布异步批处理任务有哪些方法?

时间:2009-12-23 20:34:25

标签: java asynchronous distributed batch-processing

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

  • 基于计时器/可调度任务进行批处理
  • 分布式,并提供横向扩展的能力
  • 恢复力,请不要SPF

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

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

我真的很想知道这个空间里的人们认为什么是可用的选择,以及每个人如何发挥自己的优势,或者比其他人更好地适应某些问题。

NB:值得注意的是,进度能力可能是我们目前做事的一个宿醉。是的,有些任务应该在某些时候进行。当没有设定时间的授权时,它也被用于限制吞吐量。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

没有锁定,因为你使用的是JMS,除了你正在使用Java这一事实。

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

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

答案 1 :(得分:1)

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

相关问题