如何在不可靠的集群上分发程序?

时间:2009-05-30 09:18:01

标签: c++ cluster-computing distributed-computing

我正在寻找的是以下任何/所有内容:

  • 自动发现工人失败(例如关闭计算机)
  • 检测给定IP地址范围内的所有正在运行的(Linux)PC(计算机开启)
  • ...和自动工作人员产生(ping + ssh?)
  • 负载均衡,以便工作人员不会减慢其他进程(很好吗?)
  • 某种形式的消息传递

......并且不想重新发明轮子。

C ++库,bash脚本,独立程序......欢迎所有人。

如果你举一个软件的例子,那么请告诉我们它有什么功能。

5 个答案:

答案 0 :(得分:4)

查看Spread Toolkit,一个C / C ++组通信系统。它允许您以允许您重新平衡分布式工作负载的方式检测节点/进程故障和恢复/启动。

答案 1 :(得分:2)

您正在寻找的是“工作调度程序”。市场上有许多工作调度员,这些是我熟悉的:

  • SGE处理与多台计算机上的作业调度相关的所有问题(恢复,监视,优先级,排队)。您的软件不必具有SGE感知能力,因为SGE只提供了一个提交批处理作业的环境。
  • LSF是一个更好的选择,但不是免费的。

要支持消息传递,请参阅MPI规范。 SGE完全支持基于MPI的分发。

答案 2 :(得分:1)

根据您的应用要求,我会查看BOINC基础设施。他们在最新版本中实现了一种客户端/服务器通信形式,并不清楚您需要什么样的通信方式。他们的API在C中,我们很容易用C ++编写它的包装器。

BOINC的另一个优势是它可以扩展用于大型分布式计算项目,如SETI或Rosetta @ Home,因此它支持诸如验证,作业分配以及针对不同平台管理不同应用程序版本等内容。

这是链接:

BOINC website

答案 3 :(得分:1)

Hadoop。它有Map Reduce,但我不确定它是否还有我需要的任何其他功能。有人知道吗?

答案 4 :(得分:0)

您确实在寻找“工作安排员”。节点“静态”注册到作业调度程序。这允许作业调度程序检查节点并确定核心数,RAM,可用的暂存盘空间,操作系统等等。所有这些信息都可用于为作业选择所需的资源。

作业调度程序还提供群集的基本运行状况监视。已关闭的节点将自动从可用节点列表中删除。正在运行作业的节点(通过调度程序)也将从可用节点列表中删除。

SLURM是资源经理&您可能会考虑的作业调度程序。 SLURM具有LSF和PBSPro的集成挂钩。几个MPI实现是“SLURM aware”,可以使用/设置环境变量,允许MPI作业在SLURM分配给它的节点上运行。