深入解析分散式檔案儲存
分散式檔案系統是大型分散式系統中非常重要的基礎設施。Hadoop中最重要的技術不是MapReduce,而是HDFS。除了HDFS,Spark還可以與老牌分散式檔案系統GlusterFS結合使用。OpenStack中最重要且能獨立運營的子系統是分散式物件儲存系統Swift。Docker及 Kubernetes容器技術依然需要透過分散式檔案系統實現批次處理任務中的共享儲存問題。更不用說,無數電商系統都需要一個分散式檔案系統來儲存海量照片。因此,掌握分散式儲存相關的知識和技能,對於一名分散式系統架構師來說非常重要。
資料儲存進化史作為計算機執行時資料的持久化儲存手段,外部儲存裝置是計算機系統非常重要的外設之一,幾十年來不斷演進,其演進方向如下。
單位體積的儲存密度。儲存容量。讀寫速度。儲存成本。我們先看看企業儲存介質的傳統主角之一——磁帶。1952年,磁帶式驅動器的容量僅為2MB;2013年,IBM TS3500磁帶庫的容量可以達到125PB (1PB=1024TB)。無論是硬碟技術還是光碟技術,都不適合用於資料儲存備份,只有磁帶機技術才適合。這是因為,磁帶介質不僅能提供高容量、高可靠性(沒有機械部件,不容易損壞)及可管理性,比光碟、磁碟等儲存介質也便宜很多,因此,磁帶機技術長期以來一直是唯一的資料儲存備份(資料冷備)技術,從大型機時代到現在一直在演進。近年來,磁帶儲存的耐用性得到大幅提升,磁帶庫和一些磁帶儲存的解決方案能定期掃描磁帶介質,確保它們是可讀的且資料是有效的,如果檢測到錯誤或資料損壞,則整個磁帶或損壞的資料都是可以被複制到新磁帶的,並且遷移到新磁帶的技術同樣實現了自動化。
在大資料時代產生了一個新的儲存概念——冷儲存(Cold Storage),指長期閒置且很少被訪問的資料的儲存。以社交平臺Facebook為例,其使用者上傳的新圖片每個月多達7PB,每天平均上傳3億張。這些資料中有很大一部分被長期擱置,因此可以將其儲存在更低成本的儲存介質中,而磁帶無疑是儲存介質的最佳選擇。LTO (Linear Tape Open)機構釋出的一份磁帶出貨量報告顯示,雖然售出的產品數量自2008年開始就一路下降,但從2014年到2015年磁帶產品的出貨總容量增長了18%。由於磁帶在大資料和雲計算時代需求量增加,所以這方面的技術研究開始加速:2015年,IBM科學家與日本富士公司合作,在每平方英寸磁帶上儲存了1230億 bits資料,比 IBM之前的企業級磁帶產品的最大容量提升了22倍;2016年,索尼新一代磁帶的儲存容量達到了185TB,是傳統磁帶的74倍,是藍光碟的3700倍。在2019年度“中國儲存市場影響力排行榜”中IBM 的新一代雲端儲存庫TS4500磁帶庫獲得年度最佳產品獎,該磁帶庫的最大容量高達351 PB。TS4500磁帶庫採用了磁帶庫專用的檔案系統——Linear Tape File System(LTFS),這項技術讓讀寫磁帶的資料變得更為容易,就像使用檔案系統的磁碟一樣好用。IBM將LTFS技術提交給了LTO Consortium聯合會,供聯合會的企業成員下載,該聯合會的領先技術供應商包括惠普、IBM和Quamtum等,IBM還將其LTFS技術提交給了儲存網路行業協會(SNIA)以實現標準化。任何使用或提供LTO技術的廠商都有權使用LTFS。
接下來我們看看影響力和存在感更大的另一種儲存介質——硬碟。1956年,第一款硬碟誕生,重達1噸,儲存量僅為5MB;2016年4月初,希捷推出了10TB 的機械硬碟,它是一款具有劃時代意義的產品,主要面向雲端儲存資料中心,華為、阿里巴巴均已採納和部署。面向個人使用者領域且內建 WiFi的無線行動硬碟已經進入很多IT愛好者的家庭。2018年年底,希捷又宣佈研發成功16TB的超大容量機械硬碟,並於2019年正式上市銷售,2020年年底有望上市20TB的超大機械硬碟。
與CPU和記憶體的高速發展相比,硬碟的發展其實不快,表現為單體硬碟容量提升緩慢、IO速度提升緩慢、大容量的硬碟價效比不高,等等。如果用數字來說話,大家看到的事實是CPU的效能每年大約增長 30%~50%,而硬碟只能增長約7%。於是就有人研究如何解決這些矛盾:伯克利大學研究小組希望找出一種新的技術,在短期內迅速提升硬碟的效能來平衡CPU的運算能力,他們想到了一種簡單、有效的解決辦法,即堆疊很多硬碟並模擬為一個有單一介面的、可以提供併發I/O操作和更高IO頻寬的大容量虛擬硬碟,這就是磁碟陣列(Redundant Arrays ofIndependent Disks,RAID)。磁碟陣列是一種重要的企業儲存裝置,除了能組合多個硬碟以提供更大的儲存空間,還有如下兩個重要的企業級特性。
(1)提高IO傳輸速率,這也是RAID最初想要解決的問題,因為當時CPU的速度增長很快,而磁碟驅動器的資料傳輸速率無法大幅提高,所以需要有一種方案解決二者之間的矛盾。RAID透過在多個磁碟上同時儲存和讀取資料來大幅提高儲存系統的資料吞吐量(Throughput)。在RAID中,可以讓很多磁碟驅動器同時傳輸資料,而這些磁碟驅動器在邏輯上又是一個磁碟驅動器,所以在使用RAID後,一個“邏輯磁碟”的IO速度可以達到單個磁碟的幾倍甚至幾十倍,這就是RAID條帶化的能力,也叫作RAID 0模式。RAID 0的原理就是將原先順序寫入的資料分散到所有的N塊硬碟中同時進行讀寫,N塊硬碟的並行操作使得同一時間內磁碟讀寫的速度提升了N倍。RAID 0模式最大的缺點在於任何一塊硬碟出現故障時,整個系統將被破壞,可靠性僅為單獨一塊硬碟的1/N,但對於一些新的分散式儲存來說,RAID 0卻是最好的選擇,這是因為這些分散式系統本身透過多份儲存副本的方式,避免了RAID 0的問題。
(2)透過資料校驗提供容錯功能。如果不包括寫在磁碟上的CRC(迴圈冗餘校驗)碼,則普通的磁碟驅動器無法提供容錯功能。RAID容錯是建立在每個磁碟驅動器的硬體容錯功能上的,所以它能提供更高的安全性。在很多RAID模式中都有較為完備的相互校驗、恢復的措施,甚至相互直接進行映象備份,從而大大提高RAID系統的容錯度,提高系統的穩定冗餘性。我們需要明白,這是以犧牲儲存的容量為代價的,比如RAID 1把一個磁碟的資料映象備份到另一個磁碟上,也就是說資料在寫入一塊磁碟的同時,會在另一塊閒置的磁碟上生成映象檔案,這樣雖然大大提升了RAID系統的容錯度,但浪費了一塊磁碟的容量。
RAID方案一開始主要針對企業級市場,採用的是內接式磁碟陣列卡,陣列卡採用專用的處理單元來實現磁碟陣列的功能,磁碟陣列卡被直接插到伺服器主機板上,面對的是伺服器上專用的高速SCSI硬碟系統,系統成本比較高。1993年,HighPoint公司推出了第一款IDE-RAID控制晶片,能夠利用相對廉價的IDE硬碟組建RAID系統,從而大大降低RAID的門檻。從此,個人使用者也開始關注這項技術,在花費相對較少的情況下,RAID技術可以使個人使用者也享受到成倍的磁碟速度提升和更高的資料安全性。隨著硬碟介面傳輸率的不斷提高,IDE-RAID晶片也不斷地更新換代,晶片市場上的主流晶片已經全部支援ATA 100標準,而 HighPoint公司新推出的HPT 372晶片和Promise最新的 PDC20276晶片,甚至已經可以支援ATA 133標準的IDE硬碟。在主機板廠商競爭加劇、個人計算機使用者的要求逐漸提高的今天,在主機板上裝載RAID晶片的廠商已經不在少數。以使用廣泛的 Intel的主機板晶片組為例,定位高階的Z87和 H87晶片組集成了陣列控制器,可以直接提供陣列功能,使用者完全可以不用購置RAID 卡,直接組建自己的磁碟陣列,感受磁碟狂飆的速度。之後CPU發展太迅猛了,處理能力大大增強,所以又出現了以軟體模擬(類似於虛擬光碟的技術)的方式來實現磁碟陣列的功能,這種方式雖然也能實現磁碟陣列的主要功能,但是磁碟子系統的效能會有所降低,有的降低幅度還比較大,達到30%左右,因此會拖累機器的速度,不適合生產使用。
隨著資料量儲存規模的快速增長,內建式的磁碟陣列在容量和速度上已經無法滿足企業級市場的儲存需求了,於是外接式的大容量磁碟陣列櫃應運而生,它是一個單獨的硬體產品,由控制器及磁碟櫃組成並對外提供儲存空間。伺服器透過SCSI 介面(SCSI協議是塊資料傳輸協議,在儲存行業應用廣泛,是儲存裝置的基本標準協議)直接連線磁碟櫃,成功實現了儲存系統與伺服器的“完全分離”。我們可以將外接式的磁碟陣列看作第一代獨立儲存產品,即 DAS儲存(Direct Attached Storage)。DAS裝置從屬於某個特定的伺服器,其他伺服器無法訪問它,當連線它的伺服器發生故障時,DAS儲存裝置中的資料暫時不能被存取。這類產品的價格在早期都很貴,一般被用於資料中心的特定關鍵系統。隨著IT的發展,DAS價格一路下滑,成本大大降低,因此被越來越多的中小企業使用,企業中的許多資料應用(特別是資料庫)必須被安裝在直連DAS裝置的專有伺服器上。
DAS儲存更多地依賴伺服器的CPU資源進行資料的I/O讀寫和儲存維護管理,資料備份和恢復要求佔用伺服器的主機資源(包括CPU、系統I/O等),直連式儲存的資料量越大,備份和恢復的時間就越長,對伺服器硬體的依賴性和影響就越大。此外,DAS 裝置與伺服器之間通常採用SCSI介面連線,隨著儲存硬碟空間越來越大,陣列的硬碟數量越來越多,SCSI通道成為I/O 瓶頸。最後,DAS儲存陣列容量的擴充套件也通常會造成業務系統的停機,從而給企業帶來經濟損失,對於銀行、電信、傳媒等行業7×24小時服務的關鍵業務系統來講,這是不可接受的。
並且DAS儲存或伺服器主機的升級擴充套件,只能由原裝置廠商提供,往往受原裝置廠商限制。以上關於DAS的種種缺陷,最終加速了SAN這種新型的儲存裝置在企業級儲存市場的崛起。
時代呼喚新技術的誕生,而SAN技術就是在這種情況下應運而生的。SAN (Storage AreaNetwork,儲存區域網路)透過光纖通道這種高速網路來連線儲存裝置和伺服器,提供的儲存單位是LUN,屬於塊級別的儲存單元。在SAN儲存裝置中採用了SCSI-3這種效率和速度遠高於當時TCP/IP的傳輸協議來傳輸IO 資料。SAN實際上是將一對一的儲存裝置與伺服器變成了一個多對多的儲存網路,使多個伺服器可以連線到這個儲存網上並共享整個儲存池。SAN是一個儲存網,所以它也有專有的儲存網路裝置,最早的是以光纖儲存網路為媒介的 FC SAN,對應的裝置是光纖交換機及HBA卡,在每個主機上都插入一個FC HBA 卡,透過光纖(光纜)連線到一個光纖交換機上,而這個光纖交換機同時連線了一個 SAN儲存裝置(FC磁碟陣列),這樣就組成了一個FC SAN儲存網路,如下圖所示。
由於光纖交換機及對應的FC HBA卡都屬於專有技術,所以FC SAN系統一直比較昂貴,只在一些大型企業和資料中心使用。與此同時,傳統的乙太網發展迅速,早在20世紀90年代末,千兆以太網路技術就已經發展成熟,資料中心隨處可見千兆乙太網,一般的八口千兆交換機價格不足兩千元。因此,SAN儲存網路從專有的光纖網遷移到乙太網成為大勢所趨,遷移的關鍵是將SAN儲存網所使用的SCSI 協議和介面變成乙太網的TCP/IP 並且能在乙太網卡和交換機上使用,這就是IBM公司研發的iSCSI協議。iSCSI協議實際上是將SCSI指令封裝在TCP/IP之內,採用標準的乙太網傳輸。於是又出現了新的 iSCSIHBA 卡,採用iSCSI協議,不需要專有的昂貴的光纖介面與光纖交換機。下圖給出了伺服器“網絡卡”的劃分與HBA 卡的分類。iSCSI的出現大大加速了儲存領域的發展,目前SAN其實已經是IPSAN的天下了,特別是,萬兆乙太網在Intel的大力推進下加速普及,使得IP SAN的效能大大超越傳統的FC SAN。
SAN直接提供原始的塊儲存裝置來供其他客戶端掛載為本地磁碟,從而第1次在真正意義上實現了“雲端磁碟”的概念。如下所示是某個企業內部的雲平臺的硬體和網路架構圖,我們看到SAN儲存在當前流行的企業級雲平臺中仍然處於優勢地位。
磁碟、磁碟陣列、DAS 及 SAN都屬於“塊儲存裝置”,只面向伺服器提供物理儲存塊的讀寫指令,即類似於記憶體讀寫的功能,並沒有提供更為高階的面向終端使用者的檔案儲存功能,針對這一市場需求,另外一種儲存裝置NAS (Network Attached Storage,網路附屬儲存)出現了。我們可以將NAS理解為專門為儲存而設計的、軟硬體特殊最佳化的、帶“超大硬碟”的並且連線到乙太網中獨立的“檔案伺服器”。與硬碟、磁碟陣列櫃及SAN提供的塊儲存服務不同,NAS裝置提供的檔案儲存服務為寫入或者讀取二進位制檔案,普通桌上型電腦也可以充當NAS。NAS必須具備的物理條件有兩個:不管用什麼方式,NAS都必須可以訪問卷或者物理磁碟;NAS必須具有接入乙太網的能力,也就是必須具有乙太網卡。
客戶機可以把NAS當作一個遠端檔案系統來訪問。具體來說,UNIX/Linux 客戶機可以透過NFS協議來訪問,Windows客戶機則可以透過CIFS協議來訪問。NFS是UNIX系統間實現遠端磁碟檔案共享的一種方法,支援應用程式在客戶端透過網路存取位於伺服器磁碟中的資料。如下所示是國外某個NAS產品的示意圖,可以看到NAS仍然有強大的生命力。
其實從廠商的產品來看,NAS和SAN既有競爭又有合作,SAN與NAS已經融合在一起了,很多高階NAS的後端儲存就是SAN。NAS和SAN的融合也是儲存裝置的發展趨勢,比如 EMC的新產品VNX系列。下圖展示了NAS與SAN融合的一種思路:雙虛線框表示一臺NAS,它透過光纖通道從後端SAN獲得塊儲存空間,經過NAS建立成檔案系統後,就變成檔案級別的了,最後透過乙太網共享給伺服器。該圖也總結了DAS、SAN 與NAS這三種儲存系統的架構對比。
隨著虛擬化與雲計算的加速發展,越來越多的企業開始使用廉價的X86伺服器叢集來實現強大的分散式儲存。如6.2節的例子所示,企業無須購買專有硬體和軟體,採用開源的分散式儲存軟體如Swift,就能很快構建一個龐大的、可靠的、彈性擴充套件的分散式儲存叢集。