HPC 数据访问和存储设计

HPC 数据访问和存储设计

我目前正在使用一个集群配置的应用程序,该应用程序将每个子节点的所有数据都存储在本地。我们在正确扩展方面遇到了问题,因此正在研究传统的 SAN 和基于消息的集群配置。

我对如何正确配置子节点/工作节点和单个 SAN 的数据访问感兴趣。我的管理节点是否会限制一次只能访问一个子节点的数据,或者所有子节点是否能够同时以高性能的方式读取/写入 SAN 上的同一卷?似乎最好的选择是通过管理节点限制一次只能访问一台机器,但这会限制一次只能从单个子节点访问数据;这很难扩展。

这个想法是能够启动一个作业,管理节点会提醒所有子节点运行该作业。每个节点都会从 SAN 中抓取一部分数据进行处理。

我对这个领域还很陌生,非常感谢任何可能的反馈/回应。

谢谢。

[附注:这是基于 Windows 的服务器设置。我们正考虑试用 Windows Server 2008 HPC,但目前没有使用它。]

答案1

从长远来看,拥有可直接访问 SAN 和某种集群文件系统的工作节点无法扩展。您可能能够获得多达十几个或几十个节点,具体取决于所涉及的文件系统,但最终您将达到极限并陷入困境。

在更典型的场景中,节点会拥有某种本地存储,用于暂存需要处理的数据。然后,您将拥有 f 个存储节点,它们使用某种形式的网络文件系统(NFS、CIFS 或更奇特的文件系统)与工作人员共享数据。然后,工作人员在作业开始时或需要时将需要处理的数据子集复制到本地存储中,并在作业结束时或创建作业时将其输出写回。

你会注意到我的回答非常笼统,因为,这种事情极其特定于应用程序。您可能有一个分布式应用程序,它执行很少的 I/O,每隔几分钟向共享文件系统写入一些数据。在这种情况下,您可以从所有节点直接写入共享文件系统,而不必担心性能。另一方面,如果节点每秒输出 10 兆字节,您肯定不希望(或无法)将它们全部同时写入共享文件系统。

设置 HPC 集群是非常特定于领域的,这里当然没有一刀切的答案。

答案2

我认为这个问题的答案取决于应用程序如何处理多个 worker 同时写入同一位置的情况。您不会希望 2 个 worker 同时写入同一个文件,也不会希望一个 worker 覆盖另一个 worker 创建的文件(至少,我认为您不会这样做)。

我无法专门回答您的应用程序,但在数据库世界中,我们通常允许多个并发读取和单个线程/访问/工作者写访问(无论是表级,行级还是页面级锁。)

相关内容