上一期的文章我們講述了《什麼是分布式存儲》,接下來這期我們來學習下分布式文件系統。
公司的技術大拿正在給新員工做技術培訓:"大家都用過電腦,相信都知道什麼是文件系統。"
"什麼是文件系統?" 新員工蛋蛋不合時宜的插嘴道。
小夥伴們被蛋蛋的勇氣驚呆了。
▉ 什麼是文件系統?
技術大拿眉頭皺了皺,忍住快要爆發的情緒。解釋到:
"數據是以二進位的方式存儲在介質中的,但是我們並不能直接理解這些高低電平的數據代表什麼意思,而文件系統就是告訴我們這些二進位的數據要表達的意思。"
看著依然緊皺眉頭的蛋蛋並不像搗亂的樣子,技術大拿打開了自己的電腦。
這些文件大家都見過吧,這些文件是怎麼出現的?這就靠文件系統來實現的。文件系統將二進位的數據按照人類可理解的架構來解析出來,我們可以通過這個系統來管理、刪除和複製這些文件,從而來控制存儲裡面的數據。
那麼文件系統是什麼價值?蛋蛋繼續追問到。
▉ 文件系統的價值是什麼?
文件系統是管理磁碟的軟體系統,能夠簡化用戶對磁碟空間的使用,降低使用難度,讓用戶可以更加形象的方式將磁碟中的數據供給我們使用。
打個比方,存儲的磁碟就相當於我們的倉庫。如下圖所示,這是一個很大的空倉庫,這就相當於一個沒有格式化的磁碟,空間很大,讓我們來存儲數據使用。
雖然我們可以直接將數據存儲到磁碟的空間,但是由於缺少規劃,我們數據可能就會毫無規律的存放在磁碟上。不但放的數據比較少,而且當我們想查找的時候也會非常費勁,甚至找不到需要的數據。
因此,文件系統出現了。一方面將數據進行統一管理,另一方面讓我們用戶能夠更好的查到數據。
就好比我們倉庫中的貨架,我們可以將貨物進行統一的規劃和管理,這樣我們就能按照編號快速的找到我們需要的數據,不僅存放的數據多,而且查找起來也更方便。
文件系統就相當於管理貨物的貨架和人的集合,讓我們不再為存儲數據擔心,方便我們管理和查找數據。
看著眉頭舒展開的蛋蛋,技術大拿知道可以接下往下進行了。
▉ 本地文件系統和網絡文件系統
文件系統早期是本地作業系統管理存儲設備的一種方式,早期的管理需求大多基於本地的文件管理,比如Ext4 、XFS、FAT32和Btrfs等文件系統,這些文件系統之後能提供本地磁碟格式化並使用。
但是隨著傳輸技術的發展,人們開始有了新的需求,不止限於本地文件的傳輸I/O技術,人們也開始對遠程數據傳輸有了需求,人們希望通過TCP/IP方式獲取數據,就相當於增加了一種可以遠距離傳輸的I/O技術,例如我們的文件共享需求。
目前主流的接入協議有NFS協議為代表的Linux陣營和以CIFS/SMB協議為代表的Windows產品陣營。不過隨著技術的發展,基本上可以通用了。
支持遠程訪問的文件系統解決了資源共享的問題,但是這些文件系統雖然能夠支持多個客戶端訪問,但是畢竟是單機,處理能力有限,因大規模的數據訪問領域,例如電商網站,大數據處理,採用NFS這種訪問方式就無法滿足需求。
於是,為了可以讓多臺機器上的多用戶通過網絡分享文件和存儲空間,於是就出現了分布式文件系統,該文件系統的服務端通過一個集群來實現,客戶端可以並發的訪問該集群的多達數萬個節點,因此承載能力得到極大的提升。
對應上面的倉庫比喻,我們可以簡單理解為:在倉庫的初期,管理更多的是基於本地的需求,這個時候採用的文件系統是Ext4、XFS、FAT32和Btrfs等,這些系統只支持本地訪問。
但是隨著傳輸技術的發展,人們希望通過網絡來訪問這個存儲倉庫,於是NFS、CIFS/SMB開始出現。但是這些文件系統在的支持遠程訪問的個數有限,於是就出現了分布式文件存儲。
本地文件系統、網絡文件系統和分布式分揀系統這幾種文件系統沒有本質的差別。只是網絡連接的可靠性複雜性等因素,相對於本地總線而言,分布式文件系統接入的存儲設備,需要應用層做更多複雜的策略來配合達到相同的效果。
▉ 主流分布式文件系統
隨著數位化轉型的深入,海量數據對存儲系統提出了新的要求,市場上出現了多種分布式存文件系統。如HDFS、Ceph、GFS、GPFS、Swift等。在實際工作中,為了更好地引入分布式文件系統,我們需了解各種文件系統的特點,以及各種技術的適用場景,下面分別介紹:
中間控制節點架構(HDFS)
HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。HDFS放寬了一部分POSIX約束,來實現流式讀取文件系統數據的目的。
HDFS是Hadoop大數據架構中的存儲組件。在開始設計的時候,HDFS就已經明確的它的應用場景,就是為大數據服務。主要的應用場景有:
1、對大文件存儲的性能比較高,例如幾百兆,幾個G的大文件;
2、適合低寫入,多次讀取的業務;
3、HDFS採用多副本數據保護機制,使用普通的X86伺服器就可以保障數據的可靠性,不推薦在虛擬化環境中使用;
圖 HDFS簡化架構圖示意圖
完全無中心架構---計算模式(Ceph)
Ceph是一個開源的存儲項目,是目前應用最廣泛的開源分布式存儲系統,已得到眾多廠商的支持,許多超融合系統的分布式存儲都是基於Ceph深度定製。而且Ceph已經成為Linux系統和OpenStack的"標配",用於支持各自的存儲系統。
圖 Ceph簡化架構圖示意圖
Ceph可以提供對象存儲、塊設備存儲和文件系統存儲服務。同時支持三種不同類型的存儲服務的特性,在分布式存儲系統中,是很少見的。
Ceph沒有採用HDFS的元數據尋址的方案,而且採用CRUSH算法,數據分布均衡,並行度高。而且在支持塊存儲特性上,數據可以具有強一致性,可以獲得傳統集中式存儲的使用體驗。
但是目前Ceph支持文件的性能相比其他分布式存儲系統,部署稍顯複雜,性能也稍弱,一般都將Ceph應用於塊和對象存儲。
Ceph是去中心化的分布式解決方案,需要提前做好規劃設計,對技術團隊的能力要求比較高。
完全無中心架構---一致性哈希(Swift)
Swift最初是由 Rackspace 公司開發的高可用分布式對象存儲服務,並於 2010 年貢獻給 OpenStack 開源社區作為其最初的核心子項目之一,為其 Nova 子項目提供虛機鏡像存儲服務。
Swift 構築在比較便宜的標準硬體存儲基礎設施之上,無需採用 RAID(磁碟冗餘陣列),通過在軟體層面引入一致性散列技術和數據冗餘性,犧牲一定程度的數據一致性來達到高可用性和可伸縮性,支持多租戶模式、容器和對象讀寫操作,適合解決網際網路的應用場景下非結構化數據存儲問題。
圖 Swift簡化架構圖示意圖
Swift和Ceph提供的對象存儲服務類似。Swift主要用於解決非結構化數據存儲問。它和Ceph的對象存儲服務的主要區別是:
1、客戶端在訪問對象存儲系統服務時,Swift要求客戶端必須訪問Swift網關才能獲得數據。而Ceph使用一個運行在每個存儲節點上的OSD(對象存儲設備)獲取數據信息,沒有一個單獨的入口點,比Swift更靈活一些;
2、在數據一致性方面,Swift的數據是最終一致,在海量數據的處理效率上要高一些,但是主要面向對數據一致性要求不高,但是對數據處理效率要求比較高的對象存儲業務。而Ceph是始終跨集群強一致性。主要的應用場景,在在OpenStack中,對象存儲服務使用的就是Swift,而不是Ceph;
除了上述HDFS、CEPH和Swift等分布式文件系統外,還有GlusterFS、CephFS等很多分布式文件系統,不同的文件系統解決的問題是不同的,因此應用場景也是有很大差異的。因此,大家在工作中如果選型時,也需要考慮這些差異。每種分布式文件系統的細節又有所差異,這個也是與它們所要解決的具體問題相關的。
▉ 未完待續……
雖然分布式文件系統可以處理高並發訪問的問題,但對於同一個文件同時寫會存在數據不一致的問題。
為了解決同一個文件被不同客戶端的應用並發寫的問題,這個時候就出現了集群文件系統。
接下來的文章我們將繼續介紹《分布式和集群的區別》
——END——
文章內容部分來源於網絡,侵刪!