代码执行的并行化/集群选项

Bri*_*ian 6 architecture scala mapreduce cluster-computing java-ee

我来自java背景,并且有一个CPU限制问题,我正在尝试并行化以提高性能.我已经将我的代码分解为以模块化方式执行,以便它可以以并行方式分发和运行(希望如此).

@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void runMyJob(List<String> some params){
  doComplexEnoughStuffAndWriteToMysqlDB();
}
Run Code Online (Sandbox Code Playgroud)

现在,我一直在考虑以下选项来并行化这个问题,我想了解这个领域的人们的想法/经验.

我目前正在考虑的选项:

1)使用Java EE(例如JBoss)集群和MessageDrivenBeans.MDB位于群集中的从属节点上.每个MDB都可以选择一个如上所述开始工作的事件.AFAIK Java EE MDB由应用服务器进行多线程处理,因此希望能够利用多核.因此它应该是垂直和水平可伸缩的.

2)我可以看看使用Hadoop和Map Reduce之类的东西.我在这里担心的是我的工作处理逻辑实际上是相当高的水平,所以我不确定Map Reduce的可译性.另外,我是MR的新手.

3)我可以看看像Scala这样的东西,我认为这使得并发编程变得更加简单.但是,虽然这是可垂直扩展的,但它不是集群/水平可扩展的解决方案.

无论如何,希望所有这些都有意义,非常感谢你提供的任何帮助.

Edm*_*984 0

您正在寻找的解决方案是 Akka。集群是一个正在开发的功能,通常会包含在 Akka 2.1 中

  • 优秀的Scala和Java Api,极其完整
  • 纯粹面向消息的模式,没有共享状态
  • 抗故障且可扩展
  • 极其容易分配工作

如果您还赶时间,请摆脱 J2EE。非常欢迎您加入 Akka 邮件列表来提问。