序
從最初的檔案系統雛形到現在,檔案系統已經發展六七十年了。檔案系統的特性變得越來越豐富,適用的場景也越來越多。目前,傳統檔案系統除個別網際網路業務外,基本上能滿足現有各種類型業務的需求。同時,很多應用也都直接建構在檔案系統之上。特別是非結構化的資料,通常都是以檔案的形式儲存在檔案系統中的,如音訊、視訊和日誌等。
隨著網際網路技術的發展,網際網路應用對傳統檔案系統提出更高的要求,傳統檔案系統很難滿足網際網路業務的需求。很多網際網路公司基於自身業務特性建構了自己的儲存系統。網際網路儲存系統更多的是基於自己業務特點簡化儲存系統的某些方面,而增強另外一些方面的。比如,對檔案系統附加特性進行弱化,而對性能和擴充性進行增強等。雖然網際網路公司的儲存系統都是一些私有化的儲存系統,但核心技術並沒有太大變化。
網際網路領域有很多典型的儲存系統,其中比較著名的有Google 的GFS、開放原始碼產品HDFS、Facebook 的Haystack 及淘寶的TFS等。每一種儲存系統都是針對其應用進行了特殊的最佳化,通常只能應用在某種特定的業務模式中。
以Haystack 儲存系統為例,其主要應用在Facebook 社交軟體的照片應用中。照片應用有一個非常典型的特徵是一次寫入、多次讀取、不會修改。而該應用對檔案系統的其他特性則沒有要求,如擴充屬性和快照等。
雖然檔案系統具有非常廣泛的應用,但是目前中文並沒有一本系統介紹檔案系統的書籍。作者在學習檔案系統時曾經閱讀很多電腦書籍,發現它們大多只是對檔案系統進行了比較簡要的介紹。比如,一些作業系統類的書籍,其中某些章節對檔案系統的概念和原理進行了介紹,但距離實踐還有一些差距,特別是與現在網際網路相關的技術相差甚遠。
透過學習本書內容,希望讀者能夠對檔案系統技術有一個全面深入的了解,並結合原始程式碼進行實例解析。同時,本書對檔案系統在網際網路和雲端運算等領域的應用進行了進一步的介紹和原理分析,讓讀者對檔案系統技術在最先進的應用有所了解。
? 主要內容
本書分為七章,第一章和第二章主要介紹檔案系統的概念、原理和基本使用,希望讀者能夠對檔案系統有整體、基本的認識。第三章和第四章主要對本地檔案系統的關鍵技術、原理介紹,並且結合實例進行程式分析。本地檔案系統是學習其他檔案系統的基礎,因此這兩章進行了詳細的介紹。第五章主要對傳統網路檔案系統介紹,並結合NFS 的程式介紹了實現細節。第六章主要對分散式網路檔案系統介紹,並結合目前常用的分散式檔案系統CephFS 和GlusterFS 介紹了具體實現。第七章主要介紹了檔案系統的其他形態,對目前網際網路應用最廣的物件儲存進行深入的介紹。
? 適合讀者群
雖然本書是介紹檔案系統知識的專業書籍,但是並非只針對儲存系統開發人員。軟體開發人員、運行維護人員和系統架構師等都可以從本書獲得有用的知識。
■軟體開發人員:了解檔案系統的原理對軟體開發人員如何合理使用檔案系統的相關API 會非常有幫助。比如,軟體開發人員不清楚檔案系統快取的存在,那麼在使用API 時可能就不知道如何保證停電時資料不遺失。
■運行維護人員:有一些系統參數是與檔案系統相關的,如當處理程序打開時最大檔案的數量。如果能夠對檔案系統的原理有所了解,相信可以幫助運行維護人員合理地設定系統參數。
■系統架構師:檔案系統中的很多技術是通用技術,了解這些技術可以說明系統架構師進行其他系統的設計,還可以說明系統架構師將檔案系統中的一些技術遷移到其他軟體設計中。
? 軟體及程式版本
本書涉及的軟體比較多,分別是Linux 核心、Ceph、GlusterFS 和NFSGanesha等。本書涉及的Linux 核心程式為5.8 版本,涉及的Ceph 相關程式為13.2(Mimic)版本,涉及的GlusterFS 相關程式為release-8版本,涉及的NFS-Ganesha 的程式為2.8.3 版本。本書介紹從本地檔案系統到分散式檔案系統等許多技術,涉及的技術點比較多。作者在說明時儘量結合原始程式碼和圖示將相關內容解釋清楚。由於作者水準有限,書中難免存在一些疏漏和不足,希望同行專家和讀者們給予批評與指正。
特別要感謝電子工業出版社的林瑞和編輯,沒有他的鼓勵和指導,就沒有本書的問世。在撰寫本書的過程中,林瑞和編輯給予了很多非常專業的建議。還要感謝我的好友劉佔甯,他對整本書稿進行了很認真的閱讀,無論是遣詞造句,還是技術內容的準確性方面都提出了很多建議,使得本書的內容更加精準。我在撰寫本書時獲得了家人,特別是我的妻子路歡歡的很大支持,她承擔了很多的家務,讓我有更多的時間專注寫作。另外,還有很多其他朋友和同事對本書提了建議,在此一併表示感謝!
張書寧