我們無時無刻不在使用文件系統(tǒng),進行開發(fā)時在使用文件系統(tǒng),瀏覽網頁時在使用文件系統(tǒng),玩手機時也在使用文件系統(tǒng)。
對于非專業(yè)人士來說,可能根本不知道文件系統(tǒng)為何物。因為,通常來說,我們在使用文件系統(tǒng)時一般不會感知到文件系統(tǒng)的存在。即使是程序開發(fā)人員,很多人對文件系統(tǒng)也是一知半解。
雖然文件系統(tǒng)經常不被感知,但是文件系統(tǒng)是非常重要的。在 Linux 中,文件系統(tǒng)是其內核的四大子系統(tǒng)之一;微軟的 DOS(Disk Operating System,磁盤管理系統(tǒng)),核心就是一個管理磁盤的文件系統(tǒng),由此可見文件系統(tǒng)的重要性。
常見文件系統(tǒng)及分類
其實文件系統(tǒng)發(fā)展到現(xiàn)在,其種類也豐富多樣。比如,基于磁盤的普通本地文件系統(tǒng)除了 Ext4,還包括 XFS、ZFS 和 Btrfs 等。其中 Btrfs 和 ZFS 不僅可以管理一塊磁盤,還可以實現(xiàn)多塊磁盤的管理。不僅如此,這兩個文件系統(tǒng)實現(xiàn)了數(shù)據的冗余管理,這樣可以避免磁盤故障導致的數(shù)據丟失。除了對磁盤數(shù)據管理的文件系統(tǒng),還有一些網絡文件系統(tǒng)。也就是說,這些文件系統(tǒng)看似在本地,但其實數(shù)據是在遠程的專門設備上??蛻舳送ㄟ^一些網絡協(xié)議實現(xiàn)數(shù)據的訪問,如 NFS 和 GlusterFS 等文件系統(tǒng)。經過幾十年的發(fā)展,文件系統(tǒng)的種類非常多,我們沒有辦法逐一進行介紹。下面就對主要的文件系統(tǒng)進行介紹。
本地文件系統(tǒng)
本地文件系統(tǒng)是對磁盤空間進行管理的文件系統(tǒng),也是最常見的文件系統(tǒng)形態(tài)。從呈現(xiàn)形態(tài)上來看,本地文件系統(tǒng)就是一個樹形的目錄結構。本地文件系統(tǒng)本質上就是實現(xiàn)對磁盤空間的管理,實現(xiàn)磁盤線性空間與目錄層級結構的轉換,如下圖所示。

從普通用戶的角度來說,本地文件系統(tǒng)主要方便了對磁盤空間的使用,降低了使用難度,提高了利用效率。常見的本地文件系統(tǒng)有 Ext4、Btrfs、XFS 和 ZFS 等。
偽文件系統(tǒng)
偽文件系統(tǒng)是 Linux 中的概念,它是對傳統(tǒng)文件系統(tǒng)的延伸。偽文件系統(tǒng)并不會持久化數(shù)據,而是內存中的文件系統(tǒng)。它是以文件系統(tǒng)的形態(tài)實現(xiàn)用戶與內核數(shù)據交互的接口。常見的偽文件系統(tǒng)有 proc、sysfs 和 configfs 等。
在 Linux 中,偽文件系統(tǒng)主要實現(xiàn)內核與用戶態(tài)的交互。比如,我們經常使用的 iostat 工具,其本質上是通過訪問/proc/diskstats 文件獲取信息的,如下圖所示。而該文件正是偽文件系統(tǒng)中的一個文件,但其內容其實是內核中對磁盤訪問的統(tǒng)計,它是內核某些數(shù)據結構的實例。

網絡文件系統(tǒng)
網絡文件系統(tǒng)是基于 TCP/IP 協(xié)議(整個協(xié)議可能會跨層)的文件系統(tǒng),允許一臺計算機訪問另一臺計算機的文件系統(tǒng),就如訪問本地文件系統(tǒng)一樣。網絡文件系統(tǒng)通常分為客戶端和服務端,其中客戶端類似本地文件系統(tǒng),而服務端則是對數(shù)據進行管理的系統(tǒng)。網絡文件系統(tǒng)的使用與本地文件系統(tǒng)的使用沒有任何差別,只需要執(zhí)行 mount 命令掛載即可。網絡文件系統(tǒng)也有很多種類,如 NFS 和 SMB 等。
在用戶層面,完成掛載后的網絡文件系統(tǒng)與本地文件系統(tǒng)完全一樣,看不出任何差異,對用戶是透明的。網絡文件系統(tǒng)就好像將遠程的文件系統(tǒng)映射到了本地。如下圖所示,左側是客戶端,右側是文件系統(tǒng)服務端。

當在客戶端對服務端導出的文件系統(tǒng)進行掛載后,服務端的目錄樹就成為客戶端目錄樹的一顆子樹。這個子目錄對普通用戶來說是透明的,不會感知到這是一個遠程目錄,但實際上讀/寫請求需要通過網絡轉發(fā)到服務端進行處理。
集群文件系統(tǒng)
集群文件系統(tǒng)本質上也是一種本地文件系統(tǒng),只不過它通常構建在基于網絡的SAN 設備上,且在多個節(jié)點中共享 SAN 磁盤。集群文件系統(tǒng)最大的特點是可以實現(xiàn)客戶端節(jié)點對磁盤介質的共同訪問,且視圖具有一致性,如圖 1-22 所示。這種視圖的一致性是指,如果在節(jié)點 0 創(chuàng)建一個文件,那么在節(jié)點 1 和節(jié)點 2都可以馬上看到。這個特性其實跟網絡文件系統(tǒng)類似,網絡文件系統(tǒng)也是可以在某個客戶端看到其他客戶端對文件系統(tǒng)的修改的。但是兩者是有差異的,集群文件系統(tǒng)本質上還是構建在客戶端的,而網絡文件系統(tǒng)則是構建在服務端的。

同時,對于集群文件系統(tǒng)來說,其最大的特點是多個節(jié)點可以同時為應用層提供文件系統(tǒng)服務,特別適合用于業(yè)務多活的場景,通過集群文件系統(tǒng)提供高可用集群機制,避免因為宕機造成服務失效。
分布式文件系統(tǒng)
從本質上來說,分布式文件系統(tǒng)其實也是一種網絡文件系統(tǒng)。在《計算機科學技術名詞》中給出的定義為“一種文件系統(tǒng),所管理的數(shù)據資源存儲在分布式網絡節(jié)點上,提供統(tǒng)一的文件訪問接口”,可以看出,分布式文件系統(tǒng)與網絡文件系統(tǒng)的差異在于服務端包含多個節(jié)點,也就是服務端是可以橫向擴展的。從使用角度來說,分布式文件系統(tǒng)的使用與網絡文件系統(tǒng)的使用沒有太大的差異,也是通過執(zhí)行 mount 命令掛載,客戶端的數(shù)據通過網絡傳輸?shù)椒斩诉M行處理。
我們發(fā)現(xiàn)常規(guī)的網絡文件系統(tǒng)最大的缺點是服務端無法實現(xiàn)橫向擴展。這個缺點對大型互聯(lián)網應用來說幾乎是不可容忍的。本文將介紹一下在互聯(lián)網領域應用非常廣泛的分布式文件系統(tǒng)。分布式文件系統(tǒng)最大的特點是服務端通過計算機集群實現(xiàn),可以實現(xiàn)橫向擴展,存儲端的存儲容量和性能可以通過橫向擴展的方式實現(xiàn)近似線性的提升。
02
什么是分布式文件系統(tǒng)
分布式文件系統(tǒng)(Distributed File System,簡稱 DFS)是網絡文件系統(tǒng)的延伸,其關鍵點在于存儲端可以靈活地橫向擴展。也就是可以通過增加設備(主要是服務器)數(shù)量的方法來擴充存儲系統(tǒng)的容量和性能。同時,分布式文件系統(tǒng)還要對客戶端提供統(tǒng)一的視圖。也就是說,雖然分布式文件系統(tǒng)服務由多個節(jié)點構成,但客戶端并不感知。在客戶端來看就好像只有一個節(jié)點提供服務,而且是一個統(tǒng)一的分布式文件系統(tǒng)。
在分布式文件系統(tǒng)中,最出名的就是谷歌的 GFS。除此之外,還有很多開源的分布式文件系統(tǒng),比較有名且應用比較廣泛的分布式文件系統(tǒng)有 HDFS、GlusterFS、CephFS、MooseFS 和 FastDFS 等。
分布式文件系統(tǒng)的具體實現(xiàn)有很多方法,不同的文件系統(tǒng)通常用來解決不同的問題,在架構上也有差異。雖然分布式文件系統(tǒng)有很多差異,但是有很多共性的技術點。
分布式文件系統(tǒng)與網絡文件系統(tǒng)的異同
在有些情況下,NFS 等網絡文件系統(tǒng)也被稱為分布式文件系統(tǒng)。但是在本文中,分布式文件系統(tǒng)是指服務端可以橫向擴展的文件系統(tǒng)。也就是說,分布式文件系統(tǒng)最大的特點是可以通過增加節(jié)點的方式增加文件系統(tǒng)的容量,提升性能。
當然,分布式文件系統(tǒng)與網絡文件系統(tǒng)也有很多相同的地方。比如,分布式文件系統(tǒng)也分為客戶端的文件系統(tǒng)和服務端的服務程序。同時,由于客戶端與服務端分離,分布式文件系統(tǒng)也要實現(xiàn)網絡文件系統(tǒng)中類似 RPC 的協(xié)議。
另外,分布式文件系統(tǒng)由于其數(shù)據被存儲在多個節(jié)點上,因此還有其他特點。包括但不限于以下幾點。
支持按照既定策略在多個節(jié)點上放置數(shù)據。
可以保證在出現(xiàn)硬件故障時,仍然可以訪問數(shù)據。
可以保證在出現(xiàn)硬件故障時,不丟失數(shù)據。
可以在硬件故障恢復時,保證數(shù)據的同步。
可以保證多個節(jié)點訪問的數(shù)據一致性。
由于分布式文件系統(tǒng)需要客戶端與多個服務端交互,并且需要實現(xiàn)服務端的容錯,通常來說,分布式文件系統(tǒng)都會實現(xiàn)私有協(xié)議,而不是使用 NFS 等通用協(xié)議。
03
常見分布式文件系統(tǒng)
分布式文件系統(tǒng)的具體實現(xiàn)方法有很多,其實早在互聯(lián)網興盛之前就有一些分布式文件系統(tǒng),如 Lustre 等。早期分布式文件系統(tǒng)更多應用在超算領域。
隨著互聯(lián)網技術的發(fā)展,特別是谷歌的 GFS 論文的發(fā)表,分布式文件系統(tǒng)又得到進一步的發(fā)展。目前,很多分布式文件系統(tǒng)是參考谷歌發(fā)布的關于 GFS 的論文實現(xiàn)的。比如,大數(shù)據領域中的 HDFS 及一些開源的分布式文件系統(tǒng) FastDFS 和CephFS 等。
在開源分布式文件系統(tǒng)方面,比較知名的項目有大數(shù)據領域的 HDFS 和通用的CephFS 和 GlusterFS 等。這幾個開源項目在實際生產中使用得相對比較多一些。接下來將對常見的分布式文件系統(tǒng)進行簡要的介紹。
GFS
GFS 是谷歌的一個分布式文件系統(tǒng),該分布式文件系統(tǒng)因論文 The Google File System廣為世人所知。GFS 并沒有實現(xiàn)標準的文件接口,也就是其實現(xiàn)的接口并不與 POSIX 兼容。但包含創(chuàng)建、刪除、打開、關閉和讀/寫等基本接口。
GFS 集群節(jié)點包括兩個基本角色:一個是 master,該角色的節(jié)點負責文件系統(tǒng)級元數(shù)據管理;另一個是 chunkserver,該角色的節(jié)點通常有很多個,用于存儲實際的數(shù)據。GFS 對于文件的管理是在 master 完成的,而數(shù)據的實際讀/寫則可以直接與 chunkserver 交互,避免 master 成為性能瓶頸。
GFS 在實現(xiàn)時做了很多假設,如硬件為普通商用服務器、文件大小在數(shù)百兆甚至更大及負載以順序大塊讀者為主等。其中,對于文件大小的假設尤為重要?;谠摷僭O,GFS 默認將文件切割為 64MB 大小的邏輯塊(chunk),每個 chunk 生成一個 64 位的句柄,由 master 進行管理。
這里需要重點強調的是,每個 chunk 生命周期和定位是由 master 管理的,但是chunk 的數(shù)據則是存儲在 chunkserver 的。正是這種架構,當客戶端獲得 chunk 的位置和訪問權限后可以直接與 chunkserver 交互,而不需要 master 參與,進而避免了master 成為瓶頸。
下圖所示為 GFS 架構示意圖。

除了 GFS,還有很多類似架構的分布式文件系統(tǒng)。比如,在大數(shù)據領域中的HDFS,它是專用于 Hadoop 大數(shù)據存儲的分布式文件系統(tǒng)。其架構與 GFS 的架構類似,包含一個用于管理元數(shù)據的節(jié)點和多個存儲數(shù)據的節(jié)點,分別為 namenode和datanode。
HDFS 主要用來進行大文件的處理,它將文件按照固定大小切割,然后存儲到數(shù)據節(jié)點。同時為了保證數(shù)據的可靠性,這些數(shù)據被放到多個不同的數(shù)據節(jié)點。文件被切割的大小和同時放置數(shù)據節(jié)點的數(shù)量(副本數(shù))是可配置的。
雖然 HDFS 是針對大文件設計的,但是也可以處理小文件。只不過對于小于切割單元的文件不進行切割。另外,HDFS 對小文件也做了一些優(yōu)化,如 HAR 和SequenceFile 等方案,但 HDFS 終究不是特意為小文件設計的,因此在性能方面還有些欠缺。
除此之外,還有很多模仿 GFS 的開源分布式文件系統(tǒng),如 FastDFS、MooseFS和 BFS 等。但大多數(shù)開源項目只實現(xiàn)了文件系統(tǒng)最基本的語義,嚴格來說不能稱為分布式文件系統(tǒng),更像是對象存儲。
CephFS
有必要單獨介紹一下 CephFS 的原因是 CephFS 不僅實現(xiàn)了文件系統(tǒng)的所有語義,而且實現(xiàn)了元數(shù)據服務的多活橫向擴展。
CephFS 的架構與 GFS 的架構沒有太大差別,其突出的特點是在架構方面將GFS 的單活 master 節(jié)點擴展為多活節(jié)點。不僅可以元數(shù)據多活,而且可以根據元數(shù)據節(jié)點的負載情況實現(xiàn)負載的動態(tài)均衡。這樣,CephFS 不僅可以通過增加節(jié)點來實現(xiàn)元數(shù)據的橫向擴展,還可以調整節(jié)點負載,最大限度地使用各個節(jié)點的 CPU資源。
同時,CephFS 實現(xiàn)了對 POSIX 語言的兼容,在客戶端完成了內核態(tài)和用戶態(tài)兩個文件系統(tǒng)實現(xiàn)。當用戶掛載 CephFS 后,使用該文件系統(tǒng)可以與使用本地文件系統(tǒng)一樣方便。
GlusterFS
GlusterFS 是一個非常有歷史的分布式文件系統(tǒng),其最大的特點是沒有中心節(jié)點。也就是 GlusterFS 并沒有一個專門的元數(shù)據節(jié)點來管理整個文件系統(tǒng)的元數(shù)據。
GlusterFS 抽象出卷(Volume)的概念,需要注意的是,這里的卷與 Linux LVM中的卷并非同一個概念。這里的卷是對文件系統(tǒng)的一個抽象,表示一個文件系統(tǒng)實例。當我們在集群端創(chuàng)建一個卷時,其實是創(chuàng)建了一個文件系統(tǒng)實例。
GlusterFS 有多種不同類型的卷,如副本卷、條帶卷和分布式卷等。正是通過這些卷特性的組合,GlusterFS 實現(xiàn)了數(shù)據可靠性和橫向擴展的能力。
原文標題:從文件系統(tǒng)到分布式文件系統(tǒng)
文章出處:【微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。
-
接口
+關注
關注
33文章
9439瀏覽量
156074 -
存儲
+關注
關注
13文章
4687瀏覽量
89532 -
文件系統(tǒng)
+關注
關注
0文章
301瀏覽量
20806
原文標題:從文件系統(tǒng)到分布式文件系統(tǒng)
文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
一文解讀在RTThread平臺上使用DFS分布式文件系統(tǒng)
采用信任管理的分布式文件系統(tǒng)TrustFs
海量郵件分布式文件系統(tǒng)的設計與實現(xiàn)
分布式文件系統(tǒng)數(shù)據塊聚類存儲節(jié)能策略
基于分布式文件系統(tǒng)元數(shù)據操作優(yōu)化
盤點一下這些常見的分布式文件系統(tǒng)
解析夸克分布式文件系統(tǒng)如何實現(xiàn)資源共享
分布式文件系統(tǒng)主從式的伸縮性架構設計
2021年12種最佳分布式文件系統(tǒng)和對象存儲平臺榜單
云存儲中的Ceph分布式文件系統(tǒng)及節(jié)點選擇
分布式文件系統(tǒng)的設計框架
分布式文件系統(tǒng)的設計原理是什么?
服務器數(shù)據恢復—Lustre分布式文件系統(tǒng)數(shù)據恢復案例
Vsan數(shù)據恢復——Vsan分布式文件系統(tǒng)上虛擬機不可用的數(shù)據恢復

什么是分布式文件系統(tǒng)
評論