使用集群计算机运行任意二进制程序

使用集群计算机运行任意二进制程序

我有 3 个 VPS。假设master、slave1、slave2。

它们的规格是相同的。

  • 处理器:1CPU
  • 内存:1GB
  • 磁盘:10GB
  • 网络:局域网内互相运行

我希望在主 VPS 上运行的任何任意二进制程序(进程)都被视为一个 VPS。这意味着主 VPS 的工作负载将通过网络分担给从属 VPS。

所以程序将看到的是,它在具有规范的计算机上运行:

  • 处理器:3CPU
  • 内存:3GB
  • 磁盘:30GB

问题是,有没有任何协议或服务可以像这样结合计算能力?

组合内存 (RAM) 或存储 (SSD)。我正在考虑将 ramfs 安装到每个从站的安装点中。然后为每个从站使用 NFS 服务器并使其可用,以便主站的 NFS 客户端可以将其挂载到本地。在 master 中,将挂载点组合成单个挂载点/mnt/shm_from_slave1/mnt/shm_from_slave2单个挂载点/mnt/shm_combined。然后在 master 的组合共享内存中,我将创建交换文件/mnt/shm_combined/swapfile。然后配置主操作系统以使交换文件频繁使用。请注意,这是我合并内存的计划。要结合处理器能力,我不知道。

答案1

听起来您正在寻求跨多个 Linux 实例合并系统资源。这并不完全可能,特别是对于 RAM 和 CPU 而言。对于磁盘空间,NFS 和其他网络共享可以提供帮助。

假设可以在另一台 Linux 机器上生成进程,以便它们消耗另一台机器上的资源,并且可以通过网络模拟管道等其他事物。但由于共享内存,该模型崩溃了。在 Linux 中,共享内存是通过进程直接访问也映射到另一个进程的物理 RAM 页面来实现的。尝试模拟这种情况意味着需要某种锁定机制,这很可能会导致性能严重下降,从而使解决方案变得不可行。

更一般地说,您所问的问题是在超级计算机方面讨论的,超级计算机可以用非常不同的能力和能力来表达。

“容量”是整个系统可以实现的总吞吐量的度量。如果系统用于处理非常多类似的作业,那么这是一个有用的指标,每个作业都可以传递到单个节点。扩展系统的容量可以通过简单地添加更多节点来实现,从而允许系统在相同的时间空间内处理更多的作业。 VPS 服务中的高容量系统通常使用 Kubernetes 等工具来编排大量节点上的大量作业和服务。

“能力”是对系统可以完成的单个作业的大小的衡量。这不能简单地通过添加新节点来扩展。当您添加新节点来处理相同的作业时,您也会增加网络通信开销,这样尝试将作业分散到越来越多的节点实际上会使处理速度变慢而不是更快。

因此,当您达到单个节点的能力极限时,您唯一能做的就是尝试更改软件,以便将工作分解为更小的部分。通过将其分解为更小的部分,您可以将这些部分分布到许多节点上,从而将能力问题转变为容量问题。

只是为了说明,这就是达斯克用于Python编程语言。它需要指令在数据集上执行,然后自动分解数据集和指令,以便可以将其拆分到许多节点上。

不过,根据您的需求,某些计算问题根本无法以这种方式拆分。只有当您自己编写软件时,拆分才有可能。

相关内容