我来自java背景并且遇到了CPU限制问题,我正在尝试并行化以提高性能。我已经将我的代码分解为以模块化方式执行,以便它可以以并行方式分发和运行(希望如此)。
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void runMyJob(List<String> some params){
doComplexEnoughStuffAndWriteToMysqlDB();
}
现在,我一直在考虑以下选项来并行化这个问题,我想了解这个领域人们的想法/经验。
我目前正在考虑的选项:
1)使用Java EE(例如JBoss)集群和MessageDrivenBeans。 MDB位于群集中的从属节点上。每个MDB都可以选择一个如上所述开始工作的事件。 AFAIK Java EE MDB由应用服务器进行多线程处理,因此希望能够利用多核。因此,它应该是垂直和水平可扩展的。
2)我可以看一下像Hadoop和Map Reduce这样的东西。我在这里担心的是我的工作处理逻辑实际上是相当高的水平,所以我不确定Map Reduce的可译性。另外,我是MR的新手。
3)我可以看看像Scala这样的东西,我认为这使得并发编程变得更加简单。但是,虽然这是可垂直扩展的,但它不是集群/水平可扩展的解决方案。无论如何,希望所有这些都有意义,非常感谢你提供的任何帮助。
答案 0 :(得分:0)
您正在寻找的解决方案是Akka。聚类是一个正在开发的功能,通常会包含在Akka 2.1
中如果你还准时,请摆脱J2EE。非常欢迎您加入Akka邮件列表来提出您的问题。
答案 1 :(得分:0)
你应该看看spark。 它是一个用Scala编写的集群计算框架,旨在成为Hadoop的可行替代方案。 它有许多不错的功绩:
如果我理解你的问题,Spark会把你的选择2)和3)结合起来。