将计算任务分配到不同的机器上?

将计算任务分配到不同的机器上?

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

需要完成的大部分工作都是标准命令行工作,并带有一些 GhostScript 渲染。由于仅使用一个 CPU 渲染可能需要很长时间,因此我想将工作分成许多小部分,并让网络上的空闲机器协助完成工作。

以下是粗略的工作流程:

  1. 用户将大型 PDF 文件上传到 Web 前端
  2. PDF 被分割成小块或移动到所有机器都可以访问的 SAN。所有小块组成一个“主要任务”,用户必须先完成该任务才能看到结果。
  3. 为 PDF 文件的每一页安排一项作业并将其放入“队列”中。
  4. 空闲的机器从该队列中抓取作业并处理/呈现 PDF 文件的页面。
  5. 完成后,他们将生成的光栅数据放到 SAN 上并标记作业完成。
  6. 一旦“主要任务”的所有工作都完成后,用户将看到 Web 前端上所有呈现页面的概览。

我知道作业调度程序,但由于这对我来说是一个新领域,我甚至不确定用 Google 应该使用什么搜索词。

因此,我非常感激任何指点和建议。理想的做法是采用分散式结构,以避免所有机器出现单点故障。

答案1

我不确定开放SSI会对你有帮助,但我马上想到了它。它将多台服务器合并为单一系统映像,从管理员的角度来看,它只是一台服务器。可以将其视为 SMP 服务器,但不一定在一台服务器上有多个核心,而是在多台服务器上有多个核心。

OpenSSI 可以自动在集群中分散负载,并在负载最少的节点(或最快的节点)上运行新启动的进程。如果认为这样做有利,它还可以自动将当前正在运行的进程从一个节点迁移到另一个节点。当然,所有这些也可以使用命令行实用程序手动完成。

如果你不想用这种内核级方法解决问题,或者 OpenSSI 对你不起作用,那么扭矩在应用程序级别执行此调度。

相关内容