【问题标题】:Multiple Machines -- Process Many Files Concurrently?多台机器——同时处理多个文件?
【发布时间】:2011-05-25 00:09:13
【问题描述】:

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

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

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

在构建这样一个操作时,是否有任何“做”和“不做”?有 30 台左右的机器同时读取(或写入)信息到同一个网络驱动器是否有问题? (注意:现有文件只会被读取,不会被追加/写入;新文件将从头开始创建,因此不存在多次访问同一文件的问题......)。 有没有我应该预料到的瓶颈?

(如果重要的话,我在所有机器上都使用 Linux、Ubuntu 10.04 LTS)

【问题讨论】:

  • 这实际上取决于您对每个文件执行多少处理 - 太少,磁盘访问将成为您的瓶颈。

标签: linux networking hardware hard-drive


【解决方案1】:

你应该考虑的事情:

如果要对每个文件进行的处理很简单,那么真正的瓶颈不是读取的并行文件数量,而是硬盘驱动器的容量。

除非处理需要很长时间(例如,每个文件需要几秒钟),否则添加更多进程只会减慢爬网速度,因为每个进程都在读取和写入结果,而磁盘只能做这么多。

尽量减少磁盘访问:例如,在其他进程正在下载的同时,在本地下载文件并生成结果,并在磁盘负载下降时将结果发回。

我写的越多,归结为每个文件需要进行多少处理。如果是简单的解析,需要几毫秒的东西,1 台机器或 30 台机器差别不大。

【讨论】:

  • 感谢您的回答。仅让 30 台机器同时“读取”(没有“写入”)是一个瓶颈吗?我可以(大致)运行多少台机器而不会造成瓶颈?
  • 没有系统详细信息就无法判断。运行测试,让进程同时从驱动器请求数据,并查看性能如何扩展。
  • 谢谢。有什么工具可以用来监控网络性能?
  • 最有可能,但我不知道 :( 只是计算你可以读写的字节数应该会给你一个想法,不过
【解决方案2】:

您需要注意不要让两个工作进程同时执行(并尝试执行)同一工作。

不幸的是,NFS 文件系统没有让您轻松做到这一点的语义。

所以我建议使用类似 Gearman 和生产者/消费者模型的东西,其中一个流程将工作分配给任何有空的人。

另一种可能性是拥有一个包含所有任务表的数据库(例如 mysql),并让进程自动地为自己“声明”任务。

但只有当您的进程主要受 CPU 限制时,所有这些都是值得的。如果您试图通过使用多个客户端从 NAS 中获取更多 IO 带宽(或操作),那将是行不通的。

我假设您将在这里至少运行千兆以太网(或者可能不值得)。

您是否尝试过在同一台机器上运行多个进程?

【讨论】:

  • 谢谢。我还没有尝试(还)在同一台机器上运行多个进程。你能估计我可以(大致)运行多少台机器而不会造成瓶颈?
猜你喜欢
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多