資料共享是分散式系統的根本需求,因此分散式檔案系統(distributed file system)成為許多分散式應用的基礎並不令人意外。分散式檔案系統讓多個行程能夠長期、安全且可靠地共享資料,長久以來一直作為分散式系統與應用的基礎層。本章把分散式檔案系統當作一種**通用分散式系統的典範(paradigm)**來考察:依序檢視其架構、行程、通訊、命名、同步、一致性與複製、容錯與安全,並以 NFS 與 Coda 等系統為主要案例。
本章重點#
- 架構:多數系統採主從式(client-server)架構,輔以用戶端快取與伺服器複製來滿足擴展性與可用性;也出現對稱式的點對點(peer-to-peer)架構,此時關鍵議題是分發整個檔案還是資料區塊。
- 通訊:實務上通常假設底層有 RPC 層,讓所有操作都能表達為對檔案伺服器的 RPC,而非原始的訊息傳遞;Coda 的 MultiRPC 等變體可平行呼叫多台伺服器。
- 共享語意:分散式與非分散式檔案系統的根本差異在於檔案共享語意。UNIX 語意(讀取永遠看到最新寫入)在分散式環境很難有效率地實作;NFS 支援較弱的作業階段語意(session semantics),Coda 則採交易式語意(但不涵蓋完整 ACID)。允許並行更新必然帶來相當複雜的鎖定與保留機制。
- 快取:為了效能,分散式檔案系統通常允許用戶端快取整個檔案,操作在本地執行,關檔時才把更新沖回伺服器。
- 複製:在點對點系統中複製同樣重要,但因檔案多半唯讀而大幅簡化;重點反而是負載平衡,避免熱點節點成為瓶頸。
- 容錯:多以傳統方法處理,但也能建構在網際網路上運作、可容忍拜占庭失效(Byzantine failure)的檔案系統;若只追求高可用性,應考慮抹除碼(erasure coding)以降低整體冗餘度。
- 安全:NFS 本身幾乎不提供安全機制,而是實作標準化介面以接入 Kerberos 等既有系統;SFS 把伺服器公鑰資訊編入檔名(等於用檔名散布金鑰),簡化大規模金鑰管理,並可實現去中心化認證。點對點檔案共享系統的安全則因節點自利行為、以及安全查找需要中央權威發放識別碼,而格外困難。