3

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

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

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

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

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

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

4

2 回答 2

2

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

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

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

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

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

我建议使用 Spring 消息驱动的 POJO 来执行此操作。社区版当然是开源的。

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

于 2009-12-23T20:38:37.427 回答
1

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

于 2009-12-23T21:10:05.860 回答