多個 Web 服務是否可以同時寫入一個集中的網路目錄/文件夾位置?
我在網路驅動器(傳統硬碟)上有一個集中的文件夾位置,由執行在不同應用程序伺服器上的幾個 Web 服務共享。服務將通過 HTTP 請求不斷處理傳入的文件,並將寫入此位置。
每個請求都將獲得其自己的具有唯一名稱的子文件夾。保存特定請求的所有文件後,保存文件的服務將通知另一個內部服務,該服務將從該請求文件夾中讀取這些文件並執行進一步的任務。
例如,
如果
D:/MyNetworkFolder/
是父目錄,並且如果 ServiceA 正在處理 Request1 並且 ServiceB 正在處理 Request2,則這兩個服務都將嘗試分別保存該請求的傳入文件(總大小高達 2GBD:/MyNetWorkFolder/Request1
)D:/MyNetworkFolder/Request2
。一旦為請求保存了所有文件,另一個服務將從中讀取文件D:/MyNetworkFolder/RequestNumber.
並執行其任務。因此,在高峰時段,總會有一組服務嘗試將新文件寫入網路文件夾,而另一組服務則嘗試從網路文件夾中保存的文件中讀取。並且可能,另一個服務試圖刪除已完全處理的文件。
這種類型的並行文件處理可能嗎?它會因為多個服務同時嘗試從同一個父位置讀取/寫入而影響應用程序的 I/O 性能或硬碟的健康狀況嗎?我們的另一個選擇是確保每個服務都有自己的物理網路驅動器或考慮使用 SSD。
所有伺服器都在 Windows Server 2008 及更高版本上執行,並且 Web 服務使用 C# 和 .NET 編寫。
多個 Web 服務是否可以同時寫入一個集中的網路目錄/文件夾位置?
簡而言之,是的。
在實踐中,您需要對您的應用程序和儲存進行基準測試,並正確調整它們的大小。
您可能還需要考慮:
- 單個目錄中的大量文件或目錄可能不利於性能。多少會有問題取決於…再次進行基準測試。(幾千,沒問題,幾百萬,通常是個壞主意。)
- 您需要確保生成/使用唯一的文件/目錄名稱。
- 如果文件系統是您的隊列,您需要防止處理仍處於前一階段的文件(即不對尚未完成上傳的文件進行進一步處理,在處理完成之前不應刪除文件等)當您的文件位於單個文件系統上時,您可以通過在每個階段的開頭和結尾重命名文件/目錄來實現這一點,這是原子的並且與瞬時一樣好,但是如果您需要將這些 2GB 文件複製或移動到不同的文件系統會花費更多的時間和 IO。
附帶說明一下,在 2016 年,我不會以 Windows Server 2008 作為目標平台建構新的自定義應用程序……