布式存儲的目標是利用多臺服務器的存儲資源來滿足單臺服務器所不能滿足的存儲需求。分布式存儲要求存儲資源能夠被抽象表示和統一管理,并且能夠保證數據讀寫操作的安全性、可靠性、性能等各方面要求。
隨著過去幾十年互聯網技術的發展,越來越多的互聯網應用需要存儲海量數據,比如搜索引擎和互聯網視頻網站,這些需求催生了一系列優秀的大規模分布式存儲技術。分布式存儲技術可以通過多種方式實現,一種比較典型的實現方式是分布式文件系統。分布式文件系統允許用戶像訪問本地文件系統一樣訪問遠程服務器的文件系統,用戶可以將自己的數據存儲在多個遠程服務器上,分布式文件系統基本上都有冗余備份機制和容錯機制來保證數據讀寫的正確性。云環境的存儲服務基于分布式文件系統并根據云存儲的特征做了相應的配置和改進。另一類分布式存儲的實現方式是分布式存儲軟件或服務,例如著名的Ryze存儲服務,以及很多P2P文件存儲系統。下面分別介紹分布式文件系統和云存儲服務。
首先介紹幾個典型的分布式文件系統。Frangipani是一個伸縮性很好的高性能分布式文件系統,該系統采用了兩層的服務體系架構:底層是一個分布式存儲服務,該服務能夠自動管理可伸縮、高可用的虛擬磁盤;在這個分布式存儲服務上層運行著Frangipani分布式文件系統。JGtFile是一個基于P2P的組播技術、支持在Internet這樣的異構環境中分享文件的分布式文件系統。Ceph是一個高性能并且可靠的分布式文件系統,它通過把數據和對數據的管理在最大程度上分開來獲取極佳的I/O性能。
Google File System(GFS)是Google公司設計的可伸縮的分布式文件系統。Google公司的工程師在考慮了分布式文件系統的設計準則的基礎上,又發現了以下幾個不同于傳統分布式文件系統的需求:第一,PC服務器極易發生故障,造成節點失效,故障的原因多種多樣,有機器本身的、網絡的、管理員引起的及外部環境引起的,因此需要對整個系統中的節點進行監控,檢測出現的錯誤,并開發相應的容錯和故障恢復機制;第二,在云計算環境中,海量的結構化數據被保存為非常大的文件,一般為GB量級,因此需要改變原有的基于對中小文件(KB或者MB雖級)進行管理的文件系統設計準則,以適應對超大文件的訪問;第三,系統中對文件的寫操作絕大多數是追加操作,也就是在文件的未尾寫入數據,在文件中間寫入數據的情況其實很少發生,而且數據一且被寫入,絕大多數情況下都是被順序地讀取,不會被修改,因此在設計系統時把優重點放在追加操作上,就可以大幅度提高系統的性能;第四,設計系統時要考慮開放的、標準的操作接口,并隱藏文件系統下層的負載均衡、冗余復制等細節,這樣才可以方便地被上層系統大規模地使用。因此,GFS能夠很好地支持大規模海量數據處理應用程序。圖5.7展示了GFS的系統架構。
云計算的出現給分布式存儲帶來不新的需求和挑戰。在云計算環境中,數據的存儲和操作都是以服務的形式提供的;數據的類型多種多樣,包括了普通文件、虛擬機鏡像文件這樣的二進制大文件、類似XML的格式化數據,甚至數據庫的關系型數據等;云計算的分布式存儲服務設計必須考慮到各種不同數據類型的大規模存儲機制,以及數據操作的性能、可靠性、安全性和簡單性。
目前,在云計算環境下的大規模分布式存儲領域已經有了一些研究成果和應用。BigTable是Google公司設計的用來存儲海量結構化數據的分布式存儲系統,Google公司使用該系統來將網頁存儲成分布式的、多維的、有序的圖。Dynamo是Amazon公司設計的一種基于key/value(鍵值)對的分布式存儲系統,該系統在設計之初的一個主要考慮就是Amazon公司的大規模數據中心時時刻刻都可能發生大大小小的部件失效,因此Dynamo能夠提供非常高的可用性。Amazon公司的Simple Storage Service(S3)是一個支持大規模存儲多媒體的二進制文件的云計算存儲服務。Amazon公司的Simple DB是建立在S3和AmazonEC2之上的用來存儲結構化數據的云計算服務。