從本地文件系統到分散式文件系統
來自專欄編碼人談存儲4 人贊了文章
工作一直很忙,所以好長時間都沒有寫專欄文章了。不經意發現已經有幾十個訂閱者了。考慮到經常有人在問一些概念,所以我還是用文章的形式把我的看法表示出來吧。
《三言兩語談文件系統》提到了文件系統的基本概念。因為工作的關係,我們一直在研究和改進GlusterFS,基於它的商業產品也廣泛應用在各種存取非結構化數據的商業項目中。一些人會問到,為什麼你用了GlusterFS,還用XFS?雖說都是文件系統,但它們的概念和作用有很大的區別。文件系統的目的是通過特定的機制快速找到用戶需要的內容。在這個查找的過程中,需要經過的步驟不止一個,因此,就要不同的模塊來實現。可以簡單地這麼理解:
分散式文件系統(比如GlusterFS):確定文件在哪些節點的哪些盤上面。
本地文件系統(比如XFS):確定文件在硬碟上的具體位置,獲取原始的數據。
大多數分散式文件系統都是這麼處理的。只是細節差別較大而已,比如,有的架構比較複雜,帶有元數據伺服器;有的為了維護性和擴展性,不採用元數據伺服器。GlusterFS採用的是無元數據架構,理解起來比較簡單,且實際應用起來,穩定性也非常好。對於客戶端的請求,首先是通過彈性HASH演算法,定位到文件應該在哪些節點上,在哪些brick上。Brick為基本的存儲單元,可以是一個硬碟,也可以是一個RAID設備,它會被格式化成本地文件系統(一般是XFS),和GlusterFS進行對接。在brick裡面定位到具體的文件,就是本地文件系統的事情了,GlusterFS也用不著這些底層的事情。
XFS等本地文件系統十分穩定,經過了超過十年的大規模部署的考驗,但是,它們畢竟不是專門為分散式而生。所以,現在就有一個比較重要的觀點,如果分散式存儲採用這種傳統的兩層架構,其性能不會得到特別的優化,需要想辦法來突破這個障礙。Ceph以前的本地文件系統主要也是XFS,它的基本存儲單位OSD和GlusterFS的brick類似,都需要格式化成XFS。但新的版本採用了bluestore,完全拋棄了XFS。可以認為,bluestore的確是一種創新的架構,讓ceph能夠直接操作硬碟;但另外一個角度來說,bluestore其實是ceph專門為自己定製的一款本地文件系統,能結合本地資料庫和SSD的優化,加快其性能。bluestore剛出來不久,勢頭兇猛,不過,結合CephFS提供文件功能,其穩定性還需要進一步提升。使用bluestore的Ceph的架構並不簡單,相對來說,GlusterFS的文件處理流程就要簡潔許多。
從上面的描述可以看出,常規情況下,如果就單個節點來說,分散式文件系統的性能是弱於單機用的本地文件系統的性能的。畢竟分散式文件系統底層會用到單機文件系統,且自身需要額外處理很多分散式相關的邏輯,還涉及到不同節點之間的數據同步等問題。但分散式帶來的最大好處就是統一命名空間,且節點可以橫向擴展。統一命名空間給我們帶來了PB級數據卷的功能,可以認為不同的節點,其所有的硬碟容量疊加在一起,給用戶提供了一個虛擬的大硬碟,我們是對這個硬碟格式化,在上面進行操作,不用擔心數據具體落在哪個節點和哪塊盤上。橫向擴展帶來的好處是當容量不夠時,就增加新的節點,且性能可以疊加。以往的磁碟陣列通過SAS線纜連接JBOD的方式屬於縱向擴展,新增的磁碟櫃不能獨立接入網路,其性能和可靠性都受到了較大的制約;橫向擴展的話,所有節點都獨立接入網路,I/O數據可以直接讀寫,因此總的帶寬能夠快速疊加。大家都說分散式存儲的性能好,其實是基於它有更多的節點,其總的聚合性能顯然強於單機的存儲。很多分散式存儲都號稱性能能線性擴展,但達到此目標是很有難度的。大文件的性能疊加相對來說容易,小文件(尤其是幾KB)的小文件,其性能值就慘不忍睹了。有些時候,因為節點冗餘導致的數據同步等開銷,還有分散式存儲本身的演算法帶來的問題,一台單機存儲的小文件性能,甚至強於幾個節點組成的分散式文件存儲讀寫小文件的總性能。
當然,分散式文件存儲雖然有不少問題,但只要數據量大的場合,必須要用到它。統一命名空間、橫向擴展、高可用性等優勢,給業務系統帶來的價值還是非常大的。我們在給客戶提供產品和解決方案的時候,也會基於小文件數目和存儲總量等不同的需求,提供了不同版本的存儲系統,包括為HPC和AI優化的分散式文件存儲,通用場景的分散式文件存儲、針對小規模存儲集群進行特別優化的文件存儲等。
上面講的分散式文件系統,還是在區域網內提供服務。經過改進,也可以實現跨區域網的多地數據同步,但不同的部署點需要專線互聯或者足夠高的帶寬保證其數據傳輸。不過,現在又出來了一個開源的文件系統項目,叫做星際文件系統,簡稱為IPFS。IPFS的目標非常宏偉,就是要取代現在的中心化的互聯網架構。它自然是一套分散式文件系統,但和前面講的GlusterFS等不一樣的是,它甚至可以把整個互聯網上的節點都連接起來,形成一個超大的統一命名空間。它的目的不是取代用於傳統企業業務的分散式文件系統,所以和前述的系統沒有任何競爭關係。它的最主要目的是以一種可靠的方式來永久保存數據,且數據不掌握在任何公司或者任何中心化組織的手裡。它也可以用於商業領域,比如,因為其P2P的特點,也可以用於互聯網視頻的加速。因為它的數據分散存放在世界各地,每個存儲節點本身都是不可靠的,所以為了獲取更高的可靠性,它必須有更大的冗餘度。每秒要實現GB級別的讀寫,或者大量的小文件訪問,使用IPFS顯然是不合適的。IPFS的文件訪問不是POSIX介面,所以無法像通用文件系統那樣掛載——古老的POSIX介面可是本地文件系統和大多數分散式文件系統直接支持的,這樣是使用文件系統為什麼方便的最直接原因。當然也可以通過一些網關,提供HTTP API,甚至模擬POSIX介面,但即使那樣,其運行效率也不會很高。 IPFS因為和區塊鏈可以結合,所以最近很熱,有不少人都想利用它來挖所謂的文件幣,通過提供存儲空間、帶寬、在線時間來實現挖礦收入。它的深層次技術解析,後面我會提及到。可以簡單地這麼理解,IPFS這個文件系統,站在了一個更高的層次,實現的功能是整個互聯網的數據的分發,想取代的是基於HTTP協議的Web;它的每個節點,可以是基於本地硬碟的單機文件系統,也可以是GlusterFS等分散式文件系統。
因此,單純的「文件系統」一個詞,表示的範圍太大。叫「文件系統」的軟體,乾的活可能完全不是同一類型的。但無論如何,它們都藉助「文件」這個抽象的邏輯概念,實現了數據的分發檢索、邏輯組織和物理分布,在複雜的數據處理流程中,在不同的環節完成分配給自己的那部分任務。
推薦閱讀: