2010-12-15 58 views
2

我需要同時處理大量文件(數千個不同的文件,每個文件的平均大小爲2MB)。並行處理多個文件 - 複製文件或通過NFS讀取?

所有的信息存儲在一個(1.5TB)的網絡硬盤驅動器上,並將由大約30個不同的機器處理。爲了提高效率,每臺機器都會讀取(和處理)不同的文件(有數千個需要處理的文件)。

每臺機器 - 在從1.5TB硬盤驅動器上的「傳入」文件夾中讀取文件後 - 將處理信息並準備好將處理後的信息輸出回到處理過的信息文件夾1.5TB的驅動器。每個文件的處理信息與輸入文件的平均大小大致相同(每個文件大約2MB)。

什麼是更好的事:

(1)對於每一個加工機器中號,複製將被中號被加工成其本地硬盤驅動器,然後將所有文件中讀取&過程在機器上本地文件M。 (2)不是將文件複製到每臺機器,而是每臺機器直接(使用NFS)訪問「傳入」文件夾,並從那裏讀取文件,然後在本地處理它們。

哪個想法更好?當有人做這樣的事情時,有沒有「做」和「不做」?

如果30臺機器同時讀取(或寫入)信息到同一個網絡驅動器是一個問題,我大多好奇嗎? (注意:現有文件只能被讀取,不能被附加/寫入;新的文件將從頭開始創建,因此不存在多次訪問同一文件的問題...)。我應該期待什麼瓶頸?

(我使用Linux,Ubuntu的10.04 LTS上的所有機器,如果一切事宜)

回答

2

我肯定會做#2 - 與如下我會做到這一點:

運行Apache的主服務器上與所有文件。 (或者其他一些HTTP服務器,如果你真的想的話)。有幾個原因我會這樣做:

  1. HTTP基本上是純粹的TCP(有一些頭)。一旦發送請求 - 這是一個非常「單向」的協議。低開銷,不健談。高性能和高效率 - 低開銷。

  2. 如果您(無論出於何種原因)決定您需要移動或擴展它(例如使用罐頭服務),HTTP將是一種更好的方法,通過開放的Internet在NFS上移動數據。你可以使用SSL(如果需要)。你可以通過防火牆(如果需要)。 etc..etc..etc ......根據你的文件的訪問模式

  3. ,並假設整個文件需要被讀取 - 它更容易/更快只是做一個網絡操作 - 拉整個文件在一個重擊中 - 而不是每次讀取文件的一小部分時不斷地通過網絡請求I/O。

  4. 它可以很容易地分發和運行一個應用程序,它可以完成所有這些工作 - 並且不依賴於網絡掛載的存在 - 特定的文件路徑等。如果你有URL的文件 - 客戶端可以這是工作。它不需要建立掛載,硬目錄 - 或成爲安裝此類掛載的根。

  5. 如果您有NFS連接問題 - 當您嘗試訪問掛載並掛起時,整個系統可能會出現故障。由於HTTP運行在用戶空間的上下文中,你只會遇到一個超時錯誤 - 你的應用程序可以採取任何它選擇的動作(比如頁面 - 記錄錯誤等)。

+0

謝謝布拉德。 – user3262424 2010-12-16 01:36:38

相關問題