将工作分配给一组远程计算机的好方法是什么?考虑一个示例,其中任务是CPU和RAM密集型,但实际上并不处理大型数据集。选择的语言是Java。我认为Hadoop是一个不错的选择,但在远程机器之间传递的数据集相当小,Hadoop似乎主要关注数据的分布而不是工作的分配。
有哪些好技术可以提供帮助?
编辑:我主要对负载均衡感兴趣。将会有一系列具有小(<3MB)数据集的作业,但需要大量的处理和内存。答案 0 :(得分:3)
MPI可能是一个不错的选择,甚至还有一个JAVA implementation。
答案 1 :(得分:1)
MPI可能是你答案的一部分,但是看看这个问题,我不确定它是否解决了你所关心的问题部分。
MPI在处理组件之间提供通信层。它是低级别的,需要你做大量的工作,但从我在介绍演示文稿中看到的,它还带有一些常见的矩阵数据操作函数。
在您的问题中,您似乎对问题的负载平衡/作业处理方面更感兴趣。如果真的是你的焦点,那么在Servlet或RMI服务器中托管的小程序可能就足够了。让每个程序转到服务器以获取下一个工作单元,然后将结果提交回来(您甚至可以使用数据库/文件共享,但要注意锁定问题)。换句话说,拉动机制与推动机制。
这种方法实现起来相当简单,只需运行更多分布式客户端,就可以扩展。如果您打算允许您的进程完全控制机器,则负载平衡不是太重要。您可以尝试在具有多个核心的计算机上运行多个客户端,以查看是否可以提高节点的整体吞吐量。多线程客户端会更高效,但会根据您用来解决问题的代码结构来增加复杂性。