在不同的机器上分配计算作业?

我正在寻找一种方法来在networking上的多个闲置机器上分配计算作业(主要是光栅化工作)。 这些服务器现在正在运行Debian 6。

大部分需要完成的工作是使用一些GhostScript渲染的标准命令行工作。 由于渲染花费很长时间只用一个CPU,所以我想将工作分成许多小块,networking上有空闲的机器帮助工作。

这是一个粗略的工作stream程:

  1. 用户上传一个大的PDF文件到网页前端
  2. PDF被拆分成更小的部分或移动到可以被所有机器访问的SAN。 所有较小的部分构成了在用户看到任何结果之前需要完成的“主要任务”。
  3. 为PDF文件的每个页面安排一个作业并放在一个“队列”上。
  4. 空闲的机器从该队列中获取作业并处理/呈现PDF文件的页面。
  5. 完成后,他们将产生的栅格数据放到SAN上,并标记作业完成。
  6. 一旦完成了“主要任务”的所有工作,用户将在networking前端看到所有呈现的页面的概览。

我意识到工作安排,但是因为这对我来说是一个新的领域,我甚至不知道什么search条件用于谷歌。

所以,我会很感激任何指针和build议。 为了避免所有机器出现单点故障,采用分散结构是理想的。

我不确定OpenSSI是否能够帮到你,但是我立即想到了。 它将多个服务器组合为一个单一的系统映像 ,从pipe理员的angular度来看,它只是一台服务器。 把它看作是一个SMP服务器,但是在一台服务器上必须有多个核心,而在多台服务器上则需要多个核心。

OpenSSI可以自动在集群间传播负载,并在最小负载节点(或最快节点)上运行新启动的进程。 它也可以自动地将当前正在运行的进程从一个节点迁移到另一个节点,如果它看到它的好处。 当然,所有这些也都可以通过命令行utils手动完成。

如果你不想要这样的内核级别的方法来解决你的问题,或者OpenSSI不适合你,那么在应用程序级别上有这样的调度。