
理解塊存儲(chǔ)、?件存儲(chǔ)和對(duì)象存儲(chǔ)的應(yīng)?場(chǎng)景和選擇理解塊存儲(chǔ)、?件存儲(chǔ)和對(duì)象存儲(chǔ)的應(yīng)?場(chǎng)景和選擇
應(yīng)?場(chǎng)景(王豪邁(麥?邁|wheats))
分布式存儲(chǔ)的應(yīng)?場(chǎng)景相對(duì)于其存儲(chǔ)接?,現(xiàn)在流?分為三種:
對(duì)象存儲(chǔ): 也就是通常意義的鍵值存儲(chǔ),其接?就是簡(jiǎn)單的 GET、PUT、DEL 和其他擴(kuò)展,如七?、?拍、Swift、S3
塊存儲(chǔ): 這種接?通常以 QEMU Driver 或者 Kernel Module 的?式存在,這種接?需要實(shí)現(xiàn) Linux 的 Block Device 的接?或者QEMU 提供的 Block Driver 接?,如 Sheepdog,AWS 的 EBS,青云的云硬盤和阿?云的盤古系統(tǒng),還有 Ceph 的 RBD(RBD 是 Ceph ?向塊存儲(chǔ)的接?)
?件存儲(chǔ): 通常意義是?持 POSIX 接?,它跟傳統(tǒng)的?件系統(tǒng)如 Ext4 是?個(gè)類型的,但區(qū)別在于分布式存儲(chǔ)提供了并?化的能?,如Ceph 的 CephFS(CephFS 是 Ceph ?向?件存儲(chǔ)的接?),但是有時(shí)候?會(huì)把 GFS,HDFS 這種? POSIX 接?的類?件存儲(chǔ)接?歸?此類。
按照這三種接?和其應(yīng)?場(chǎng)景,很容易了解這三種類型的 IO 特點(diǎn),括號(hào)?代表了它在?分布式情況下的對(duì)應(yīng):對(duì)象存儲(chǔ)(鍵值數(shù)據(jù)庫):接?簡(jiǎn)單,?個(gè)對(duì)象我們可以看成?個(gè)?件,只能全寫全讀,通常以??件為主,要求?夠的 IO 帶寬。
塊存儲(chǔ)(硬盤):它的 IO 特點(diǎn)與傳統(tǒng)的硬盤是?致的,?個(gè)硬盤應(yīng)該是能?向通?需求的,即能應(yīng)付??件讀寫,也能處理好??件讀寫。但是硬盤的特點(diǎn)是容量?,熱點(diǎn)明顯。因此塊存儲(chǔ)主要可以應(yīng)付熱點(diǎn)問題。另外,塊存儲(chǔ)要求的延遲是最低的。
?件存儲(chǔ)(?件系統(tǒng)):?持?件存儲(chǔ)的接?的系統(tǒng)設(shè)計(jì)跟傳統(tǒng)本地?件系統(tǒng)如 Ext4 這種的特點(diǎn)和難點(diǎn)是?致的,它?塊存儲(chǔ)具有更豐富的接?,需要考慮?錄、?件屬性等?持,實(shí)現(xiàn)?個(gè)?持并?化的?件存儲(chǔ)應(yīng)該是最困難的。但像 HDFS、GFS 這種??定義標(biāo)準(zhǔn)的系統(tǒng),可以通過根據(jù)實(shí)現(xiàn)來定義接?,會(huì)容易?點(diǎn)。
因此,這三種接?分別以?分布式情況下的鍵值數(shù)據(jù)庫、硬盤和?件系統(tǒng)的 IO 特點(diǎn)來對(duì)應(yīng)即可。?于冷熱、快慢、???件??更接近于業(yè)務(wù)。但是因?yàn)榇鎯?chǔ)系統(tǒng)是通?化實(shí)現(xiàn),通常來說,需要盡量滿?各種需求,?接?定義已經(jīng)?定意義上就砍去了?些需求,如對(duì)象存儲(chǔ)會(huì)以冷存儲(chǔ)、??件為主。
如何選擇(王旭)
?先對(duì)象存儲(chǔ)和?件存儲(chǔ)的區(qū)別是不?的,存儲(chǔ)的都是?樣的東西,只是拋棄了統(tǒng)?的命名空間和?錄樹的結(jié)構(gòu),使得擴(kuò)展起來桎梏少?些。
獨(dú)?的互聯(lián)?存儲(chǔ)服務(wù)?般都是做對(duì)象存儲(chǔ)的,因?yàn)閴K存儲(chǔ)是給計(jì)算機(jī)?的,對(duì)象存儲(chǔ)是給瀏覽器等 HTTP 客戶端?的。獨(dú)?服務(wù)所提供的存儲(chǔ)系統(tǒng),訪問都來?互聯(lián)?,?然是做對(duì)象存儲(chǔ);與之相對(duì)應(yīng),?部分類 AWS 的主機(jī)服務(wù)商都會(huì)提供?個(gè)塊存儲(chǔ)服務(wù)搭配主機(jī)服務(wù)。
同?個(gè)服務(wù)商同時(shí)提供兩個(gè)服務(wù)是有好處的,除了提供的服務(wù)?較全這個(gè)優(yōu)點(diǎn)以外,對(duì)象存儲(chǔ)還可以?撐塊存儲(chǔ)的快照、主機(jī)的系統(tǒng)鏡像存儲(chǔ)等應(yīng)?,可以相互結(jié)合的。
權(quán)衡的因素有很多——可靠性要求、可?性要求、時(shí)延要求、?致性要求、使?模式相關(guān)要求(包括請(qǐng)求??、QPS/IOPS、吞吐)等。
?如:
對(duì)于塊存儲(chǔ),要求的訪問時(shí)延是 10ms 級(jí)的,因?yàn)榻o虛擬機(jī)?的,傳統(tǒng)硬盤也是 10ms 級(jí)的時(shí)延,請(qǐng)求尺?都很?,但 qps(iops)可能會(huì)很?,那么在這種情況下:
異地多中?是不現(xiàn)實(shí)的,存儲(chǔ)要和主機(jī)盡量接近,相應(yīng)地可靠性必然會(huì)有所打折
強(qiáng)?致副本不會(huì)過多,強(qiáng)?致要求對(duì)時(shí)延有影響
對(duì)于對(duì)象存儲(chǔ),要求的訪問時(shí)延是 100ms - 1s 級(jí)的,請(qǐng)求?般是中到?尺?,低 qps 的,在這種情況下
可以?更多的分散副本數(shù)來換取更?的可靠性,但過多副本增加維持?致性的難度,需要折衷
另外 SSD 隨著成本降低,在塊存儲(chǔ)?逐漸成為主流了,以便提供更好的 IOPS,AWS 這個(gè)?開始,創(chuàng)建的 EBS 卷缺省就是 SSD 的了。
對(duì)于評(píng)價(jià)?個(gè)實(shí)現(xiàn),?先是看適合不適合這個(gè)?途,然后看這個(gè)?案有沒有顯著的缺點(diǎn),是否有嚴(yán)重的影響,然后成本之類的也是?個(gè)因素,做軟件的?總覺的?便宜硬件實(shí)現(xiàn)??上的服務(wù)才值得吹?,呵呵。
塊存儲(chǔ)
典型設(shè)備:磁盤陣列,硬盤
塊存儲(chǔ)主要是將裸磁盤空間整個(gè)映射給主機(jī)使?的,就是說例如磁盤陣列??有5塊硬盤(為?便說明,假設(shè)每個(gè)硬盤1G),然后可以通過劃邏輯盤、做Raid、或者LVM(邏輯卷)等種種?式邏輯劃分出N個(gè)邏輯的硬盤。(假設(shè)劃分完的邏輯盤也是5個(gè),每個(gè)也是1G,但是這5個(gè)1G的邏輯盤已經(jīng)于原來的5個(gè)物理硬盤意義完全不同了。例如第?個(gè)邏輯硬盤A??,可能第?個(gè)200M是來?物理硬盤1,第?個(gè)200M是來?物理硬盤2,所以邏輯硬盤A是由多個(gè)物理硬盤邏輯虛構(gòu)出來的硬盤。)
接著塊存儲(chǔ)會(huì)采?映射的?式將這?個(gè)邏輯盤映射給主機(jī),主機(jī)上?的操作系統(tǒng)會(huì)識(shí)別到有5塊硬盤,但是操作系統(tǒng)是區(qū)分不出到底是邏輯還是物理的,它?概就認(rèn)為只是5塊裸的物理硬盤?已,跟直接拿?塊物理硬盤掛載到操作系統(tǒng)沒有區(qū)別的,?少操作系統(tǒng)感知上沒有區(qū)別。
此種?式下,操作系統(tǒng)還需要對(duì)掛載的裸硬盤進(jìn)?分區(qū)、格式化后,才能使?,與平常主機(jī)內(nèi)置硬盤的?式完全?異。
優(yōu)點(diǎn):
這種?式的好處當(dāng)然是因?yàn)橥ㄟ^了Raid與LVM等?段,對(duì)數(shù)據(jù)提供了保護(hù)。
另外也可以將多塊廉價(jià)的硬盤組合起來,成為?個(gè)?容量的邏輯盤對(duì)外提供服務(wù),提?了容量。
寫?數(shù)據(jù)的時(shí)候,由于是多塊磁盤組合出來的邏輯盤,所以?塊磁盤可以并?寫?的,提升了讀寫效率。
很多時(shí)候塊存儲(chǔ)采?SAN架構(gòu)組?,傳輸速率以及封裝協(xié)議的原因,使得傳輸速度與讀寫速率得到提升。
缺點(diǎn):
采?SAN架構(gòu)組?時(shí),需要額外為主機(jī)購買光纖通道卡,還要買光纖交換機(jī),造價(jià)成本?。
主機(jī)之間的數(shù)據(jù)?法共享,在服務(wù)器不做集群的情況下,塊存儲(chǔ)裸盤映射給主機(jī),再格式化使?后,對(duì)于主機(jī)來說相當(dāng)于本地盤,那么主機(jī)A的本地盤根本不能給主機(jī)B去使?,?法共享數(shù)據(jù)。
不利于不同操作系統(tǒng)主機(jī)間的數(shù)據(jù)共享:另外?個(gè)原因是因?yàn)椴僮飨到y(tǒng)使?不同的?件系統(tǒng),格式化完之后,不同?件系統(tǒng)間的數(shù)據(jù)是共享不了的。例如?臺(tái)裝了WIN7/XP,?件系統(tǒng)是FAT32/NTFS,?Linux是EXT4,EXT4是?法識(shí)別NTFS的?件系統(tǒng)的。就像?只NTFS格式的U盤,插進(jìn)Linux的筆記本,根本?法識(shí)別出來。所以不利于?件共享。
?件存儲(chǔ)
典型設(shè)備:FTP、NFS服務(wù)器
為了克服上述?件?法共享的問題,所以有了?件存儲(chǔ)。
?件存儲(chǔ)也有軟硬?體化的設(shè)備,但是其實(shí)普通拿?臺(tái)服務(wù)器/筆記本,只要裝上合適的操作系統(tǒng)與軟件,就可以架設(shè)FTP與NFS服務(wù)了,架上該類服務(wù)之后的服務(wù)器,就是?件存儲(chǔ)的?種了。
主機(jī)A可以直接對(duì)?件存儲(chǔ)進(jìn)??件的上傳下載,與塊存儲(chǔ)不同,主機(jī)A是不需要再對(duì)?件存儲(chǔ)進(jìn)?格式化的,因?yàn)?件管理功能已經(jīng)由?件存儲(chǔ)??搞定了。
優(yōu)點(diǎn):
造價(jià)交低:隨便?臺(tái)機(jī)器就可以了,另外普通以太?就可以,根本不需要專?的SAN?絡(luò),所以造價(jià)低。
?便?件共享:例如主機(jī)A(WIN7,NTFS?件系統(tǒng)),主機(jī)B(Linux,EXT4?件系統(tǒng)),想互拷?部電影,本來不?。加了個(gè)主機(jī)C(NFS服務(wù)器),然后可以先A拷到C,再C拷到B就OK了。(例??較膚淺,請(qǐng)見諒……)
缺點(diǎn):
讀寫速率低,傳輸速率慢:以太?,上傳下載速度較慢,另外所有讀寫都要1臺(tái)服務(wù)器??的硬盤來承擔(dān),相?起磁盤陣列動(dòng)不動(dòng)就??上百塊硬盤同時(shí)讀寫,速率慢了許多。
對(duì)象存儲(chǔ)
典型設(shè)備:內(nèi)置?容量硬盤的分布式服務(wù)器
對(duì)象存儲(chǔ)最常?的?案,就是多臺(tái)服務(wù)器內(nèi)置?容量硬盤,再裝上對(duì)象存儲(chǔ)軟件,然后再額外搞?臺(tái)服務(wù)作為管理節(jié)點(diǎn),安裝上對(duì)象存儲(chǔ)管理軟件。管理節(jié)點(diǎn)可以管理其他服務(wù)器對(duì)外提供讀寫訪問功能。
之所以出現(xiàn)了對(duì)象存儲(chǔ)這種東西,是為了克服塊存儲(chǔ)與?件存儲(chǔ)各?的缺點(diǎn),發(fā)揚(yáng)它倆各?的優(yōu)點(diǎn)。簡(jiǎn)單來說塊存儲(chǔ)讀寫快,不利于共享,?件存儲(chǔ)讀寫慢,利于共享。能否弄?個(gè)讀寫快,利 于共享的出來呢。于是就有了對(duì)象存儲(chǔ)。
?先,?個(gè)?件包含了了屬性(術(shù)語叫metadata,元數(shù)據(jù),例如該?件的??、修改時(shí)間、存儲(chǔ)路徑等)以及內(nèi)容(以下簡(jiǎn)稱數(shù)據(jù))。
以往像FAT32這種?件系統(tǒng),是直接將?份?件的數(shù)據(jù)與metadata?起存儲(chǔ)的,存儲(chǔ)過程先將?件按照?件系統(tǒng)的最?塊??來打散(如4M的?件,假設(shè)?件系統(tǒng)要求?個(gè)塊4K,那么就將?件打散成為1000個(gè)?塊),再寫進(jìn)硬盤??,過程中沒有區(qū)分?jǐn)?shù)據(jù)/metadata 的。?每個(gè)塊最后會(huì)告知你下?個(gè)要讀取的塊的地址,然后?直這樣順序地按圖索驥,最后完成整份?件的所有塊的讀取。
這種情況下讀寫速率很慢,因?yàn)榫退隳阌?00個(gè)機(jī)械?臂在讀寫,但是由于你只有讀取到第?個(gè)塊,才能知道下?個(gè)塊在哪?,其實(shí)相當(dāng)于只能有1個(gè)機(jī)械?臂在實(shí)際?作。
?對(duì)象存儲(chǔ)則將元數(shù)據(jù)獨(dú)?了出來,控制節(jié)點(diǎn)叫元數(shù)據(jù)服務(wù)器(服務(wù)器+對(duì)象存儲(chǔ)管理軟件),??主要負(fù)責(zé)存儲(chǔ)對(duì)象的屬性(主要是對(duì)象的數(shù)據(jù)被打散存放到了那?臺(tái)分布式服務(wù)器中的信息),?其他負(fù)責(zé)存儲(chǔ)數(shù)據(jù)的分布式服務(wù)器叫做OSD,主要負(fù)責(zé)存儲(chǔ)?件的數(shù)據(jù)部分。當(dāng)?戶訪問對(duì)象,會(huì)先訪問元數(shù)據(jù)服務(wù)器,元數(shù)據(jù)服務(wù)器只負(fù)責(zé)反饋對(duì)象存儲(chǔ)在哪些OSD,假設(shè)反饋?件A存儲(chǔ)在B、C、D三臺(tái)OSD,那么?戶就會(huì)再次直接訪問3臺(tái)OSD服務(wù)器去讀取數(shù)據(jù)。
這時(shí)候由于是3臺(tái)OSD同時(shí)對(duì)外傳輸數(shù)據(jù),所以傳輸?shù)乃俣染图涌炝恕.?dāng)OSD服務(wù)器數(shù)量越多,這種讀寫速度的提升就越?,通過此種?式,實(shí)現(xiàn)了讀寫快的?的。
另???,對(duì)象存儲(chǔ)軟件是有專門的?件系統(tǒng)的,所以O(shè)SD對(duì)外?相當(dāng)于?件服務(wù)器,那么就不存在?件共享??的困難了,也解決了?件共享??的問題。
所以對(duì)象存儲(chǔ)的出現(xiàn),很好地結(jié)合了塊存儲(chǔ)與?件存儲(chǔ)的優(yōu)點(diǎn)。
最后為什么對(duì)象存儲(chǔ)兼具塊存儲(chǔ)與?件存儲(chǔ)的好處,還要使?塊存儲(chǔ)或?件存儲(chǔ)呢?
有?類應(yīng)?是需要存儲(chǔ)直接裸盤映射的,例如數(shù)據(jù)庫。因?yàn)閿?shù)據(jù)庫需要存儲(chǔ)裸盤映射給??后,再根據(jù)??的數(shù)據(jù)庫?件系統(tǒng)來對(duì)裸盤進(jìn)?格式化的,所以是不能夠采?其他已經(jīng)被格式化為某種?件系統(tǒng)的存儲(chǔ)的。此類應(yīng)?更適合使?塊存儲(chǔ)。
對(duì)象存儲(chǔ)的成本?起普通的?件存儲(chǔ)還是較?,需要購買專門的對(duì)象存儲(chǔ)軟件以及?容量硬盤。如果對(duì)數(shù)據(jù)量要求不是海量,只是為了做?件共享的時(shí)候,直接??件存儲(chǔ)的形式好了,性價(jià)??。