【发布时间】:2011-06-15 21:31:28
【问题描述】:
我来自 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 之类的东西,我相信它可以让并发编程变得更简单。然而,虽然这是垂直可扩展的,但它不是集群/水平可扩展的解决方案。
无论如何,希望所有这些都是有意义的,非常感谢您提供的任何帮助。
【问题讨论】:
-
Akka 为 Scala 提供了强大的远程 actor 功能,所以我不确定说 Scala 不是水平可扩展的是否公平。 (事实上,即使是核心 Scala 库也提供了对远程参与者的一些支持。)
-
嗨,Rex,谢谢,这正是我想我不太了解的类型。那么,使用 scala 和 Akka 跨节点分配作业是否容易?你会推荐它而不是使用 JBoss 集群吗?
-
恐怕也不够了解推荐;我只知道这是一种可能。
标签: scala jakarta-ee architecture mapreduce cluster-computing