多台机器 - 同时处理多个文件?

时间:2010-12-14 00:35:09

标签: linux networking hardware hard-drive

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

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

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

当建立这样的行动时,有没有'做'和'做'?有30台机器同时读取(或写入)同一网络驱动器的信息是一个问题吗? (注意:现有文件只会被读取,不会被附加/写入;新文件将从头开始创建,因此不存在多次访问同一文件的问题......)。 我应该期待哪些瓶颈?

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

2 个答案:

答案 0 :(得分:1)

你应该考虑的事情:

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

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

尝试最小化磁盘访问:例如,在下载其他进程时下载文件并在本地生成结果,并在磁盘上的负载关闭时将结果发回。

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

答案 1 :(得分:0)

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

不幸的是,NFS文件系统没有允许您轻松执行此操作的语义。

所以我建议使用像Gearman和生产者/消费者模型这样的东西,其中一个过程为任何可用的人提供工作。

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

但是,如果您的进程主要受CPU约束,那么所有这些都是值得的。如果您尝试使用多个客户端从NAS中获取更多IO带宽(或操作),则无法正常工作。

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

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