0

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

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

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

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

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

4

2 回答 2

1

你应该考虑的事情:

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

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

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

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

于 2010-12-14T00:48:43.083 回答
0

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

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

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

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

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

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

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

于 2010-12-14T07:51:30.863 回答