【问题标题】:Process Many Files Concurrently — Copy Files Over or Read Through NFS?同时处理多个文件——通过 NFS 复制文件还是读取文件?
【发布时间】:2011-05-26 03:43:34
【问题描述】:

我需要同时处理大量文件(数千个不同的文件,每个文件的平均大小为 2MB)。

所有信息都存储在一个 (1.5TB) 网络硬盘上,将由大约 30 台不同的机器处理。为了提高效率,每台机器都将读取(和处理)不同的文件(有数千个文件需要处理)。

每台机器——在从 1.5TB 硬盘上的“传入”文件夹中读取文件后——将处理信息并准备将处理后的信息输出回 1.5 上的“已处理”文件夹TB驱动器。每个文件的处理信息与输入文件的平均大小大致相同(每个文件约 2MB)。

做什么比较好:

(1) 对于每一台处理机M,将所有将要被M处理的文件复制到其本地硬盘,然后在本地读取和处理文件机器M

(2) 不是将文件复制到每台机器,而是每台机器将直接访问“传入”文件夹(使用 NFS),并从那里读取文件,然后在本地处理它们。

哪个想法更好?当一个人做这样的事情时,是否有任何“做”和“不做”?

我很好奇,让 30 台左右的机器同时读取(或写入)信息到同一个网络驱动器是否有问题?

(注意:现有文件只会被读取,不会被追加/写入;新文件将从头开始创建,因此不会出现多次访问同一文件的问题...)。有没有我应该预料到的瓶颈?

(如果一切都很重要,我会在所有机器上使用 Linux、Ubuntu 10.04 LTS)

【问题讨论】:

    标签: linux networking hard-drive nfs


    【解决方案1】:

    我肯定会做 #2 - 我会这样做:

    在您的主服务器上运行 Apache 并使用所有文件。 (或者其他一些 HTTP 服务器,如果你真的想要的话)。我这样做有几个原因:

    1. HTTP 基本上是纯 TCP(上面有一些标头)。一旦发送请求 - 这是一个非常“单向”的协议。低开销,不健谈。高性能和高效率 - 低开销。

    2. 1234563 .您可以使用 SSL(如果需要)。您可以通过防火墙(如果需要)。等等……等等……等等……
    3. 取决于文件的访问模式,并假设需要读取 整个 文件 - 只需执行一次网络操作会更容易/更快 - 并将整个文件拉入一次重击 - 而不是每次读取较小的文件时都通过网络不断请求 I/O。

    4. 分发和运行执行所有这些操作的应用程序可能很容易 - 并且不依赖于网络安装的存在 - 特定文件路径等。如果您有文件的 URL - 客户端可以完成它的工作。它不需要建立挂载、硬目录或成为 root 来设置此类挂载。

    5. 如果您遇到 NFS 连接问题 - 当您尝试访问挂载时,整个系统可能会变得异常且挂起。在用户空间上下文中运行 HTTP - 您只会收到超时错误 - 您的应用程序可以执行它选择的任何操作(例如您的页面 - 记录错误等)。

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多