遠離 NFS
我一直致力於讓越來越多的服務擺脫對 NFS 的依賴,我想知道其他人在這個問題上做了什麼。我知道那裡有分佈式文件系統,並且我有一些使用其中之一(mogilefs)的經驗。我很想知道其他人曾經使用過什麼來遠離 NFS,尤其是在使用者上傳的內容方面。特別是在 Web 域中,假設使用者將內容上傳到特定的 Web 伺服器——您如何使該內容在您的集群中可用?我考慮過 rsync 到集群中的其餘機器,或者只是到單個內容伺服器,但很好奇其他人為解決這個問題做了什麼。
在花了一年時間嘗試(並且失敗)讓 GFS 以任何一種理智的方式執行之後,我一直遠離任何類型的集群文件系統。它非常複雜,並且在負載下表現得不值一提。這種評估通過關聯擴展到我研究過的所有其他集群文件系統——移動元件的數量、缺乏有效的文件以及整個 Rube Goldberg 裝置的普遍脆弱性讓我的每一部分都“哎呀呀!”
另一方面,我在使用更高級別的、特定於應用程序的抽象方面取得了巨大的成功——思考應用程序具體需要對所涉及的數據做什麼,然後提供一種方法來做到這一點。Web 應用程序中的數據實際上需要對應用程序中的數據進行完整的 POSIX 文件系統抽象,這種情況並不常見。相反,它可以擺脫一些功能性更強的動詞。 那是您的 Web 層和數據之間的訪問層。
例如,拍攝圖像。如果你有它們,你可能目前將它們推送到你的 NFS 伺服器上,然後網路伺服器將它們拉下來並根據需要對其進行操作。但你實際上對他們做了什麼?它們每個都由一個唯一的鍵標識,您儲存它們(一個 PUT 請求)、檢索它們(一個 GET 請求)、刪除它們(一個 DELETE 請求),並且可能以不同的大小獲取它們(一個帶有幾個參數)——嘿,有一個 REST API 可以解決這個問題。不喜歡 REST?SOAP、XML-RPC,隨心所欲。見鬼,你甚至不必使用 HTTP(儘管它是 Web 應用程序的自然選擇,因為你的 GET 請求可以直接發送到文件伺服器)。無論您可能執行的調整大小的方式(以及這些調整大小的記憶體)都可以在儲存伺服器上處理,從而節省了網路頻寬,
擴展這些儲存系統通常也比擴展通用文件伺服器更容易。它們不需要快速擴展,因為它們更有效,但是當它們這樣做時,確定分片算法並在幾個關鍵位置實現它是一件簡單的事情。我喜歡確定單個伺服器可以支持多少(例如)圖像的簡單性,然後使用它
id / capacity
來獲取用於任何給定圖像請求的伺服器的數量。這不是我第一次寫這個答案。看到這個問題對這個問題略有不同的看法。