這是AFA的競(jìng)爭(zhēng)全景圖,我們看到大帥哥把IBM的TMS放在Flash Applicance分類(lèi)里面了,因?yàn)樗且杂布橹行牡脑O(shè)計(jì)方式。3PAR是傳統(tǒng)陣列的改良,而本質(zhì)上專(zhuān)為全閃存系統(tǒng)全新設(shè)計(jì)的是Pure Storage(后面簡(jiǎn)稱(chēng)Pure)、XtremIO和SolidFire(后面簡(jiǎn)稱(chēng)SF)。這些產(chǎn)品的特點(diǎn)是采用商用硬件,以軟件為中心,提供豐富的數(shù)據(jù)服務(wù),支持在線的數(shù)據(jù)縮減功能。

為什么傳統(tǒng)的架構(gòu)不適合閃存?一是基于extent映射和固定塊對(duì)齊的方式很難支持重刪和壓縮,二是傳統(tǒng)的RAID方式帶來(lái)閃存的性能和磨損問(wèn)題,三是控制器的資源和閃存的需要不匹配,因?yàn)殚W存需要更多的原數(shù)據(jù)的存儲(chǔ)和管理。

每個(gè)架構(gòu)主要從6個(gè)方面的設(shè)計(jì)來(lái)闡述他們的選擇。

Pure采用的是縱向擴(kuò)展的方式,和傳統(tǒng)的塊存儲(chǔ)架構(gòu)一樣。需要更多性能,你只能升級(jí)到更強(qiáng)大的控制器,容量可以通過(guò)磁盤(pán)框來(lái)擴(kuò)展,但性能受限于兩個(gè)控制器的能力。

而SF和XtremIO都采用橫向擴(kuò)展的架構(gòu)。性能和容量都可以線性增長(zhǎng)。目前SF集群的節(jié)點(diǎn)可以是不同類(lèi)型,而且性能可以動(dòng)態(tài)均衡。

一般來(lái)說(shuō),縱向擴(kuò)展的架構(gòu)適合小型、固定可預(yù)測(cè)的負(fù)載,而橫向擴(kuò)展架構(gòu)適合大規(guī)模、不可預(yù)測(cè)和更需要彈性的場(chǎng)合。

Pure和XtremIO都是采用雙控共享硬盤(pán)的架構(gòu),和傳統(tǒng)的塊存儲(chǔ)架構(gòu)一樣。如果硬盤(pán)失效,在該硬盤(pán)框內(nèi)重構(gòu),控制器失效,另外一個(gè)控制器接管。如果硬盤(pán)框壞了,系統(tǒng)就不能運(yùn)行了,也就是磁盤(pán)框是SPOF(單點(diǎn)失效)。

而SF采用的是啥也不共享的架構(gòu)。西瓜哥認(rèn)為,其實(shí)就是現(xiàn)在云(對(duì)象)存儲(chǔ),如華為的UDS常采用的架構(gòu)。這種架構(gòu)采用多副本技術(shù),好像SF是2副本,可以承受最少一個(gè)節(jié)點(diǎn)故障。但與會(huì)嘉賓提出了“質(zhì)疑”,說(shuō)軟件成為了SPOF,O(∩_∩)O哈!因此,軟件的健壯性很重要。

這兩種架構(gòu)的區(qū)別如下,共享硬盤(pán)架構(gòu)比較適合小容量起步的場(chǎng)合,硬盤(pán)成本高,而啥也不共享架構(gòu)比較適合大容量場(chǎng)景,控制器成本高。

Pure采用位置尋址技術(shù)。主要的元數(shù)據(jù)是一個(gè)KV倉(cāng)庫(kù)(映射表)。另外,需要多個(gè)附加的元數(shù)據(jù)結(jié)構(gòu),包括鏈接表,重刪表和中間表(定向圖)。所有的元數(shù)據(jù)都保存在SSD里,采用內(nèi)存做Cache。

這個(gè)是IO讀寫(xiě)的路徑。

而SF和XtremIO采用的是內(nèi)存尋址的方式。卷的元數(shù)據(jù)是一個(gè)KV倉(cāng)庫(kù),但key指向的地方不是塊的位置,而是指紋。塊的元數(shù)據(jù)是一個(gè)分布的KV倉(cāng)庫(kù),指向?qū)嶋H的塊數(shù)據(jù)。這個(gè)實(shí)際就是XtremIO經(jīng)常說(shuō)的兩階段元數(shù)據(jù)架構(gòu)。所有的元數(shù)據(jù)都保存在SSD上,但全部在內(nèi)存里運(yùn)行。

這是他們的讀寫(xiě)路徑。

這是兩種尋址方式的對(duì)比。位置尋址只是單層映射,即LBA->位置,因此位置和元數(shù)據(jù)是緊耦合的關(guān)系,數(shù)據(jù)移動(dòng)需要更新元數(shù)據(jù),重刪實(shí)現(xiàn)需要附加的表格和索引。而內(nèi)容存儲(chǔ)方式采用兩層元數(shù)據(jù)映射LBA->塊ID->位置,物理位置和元數(shù)據(jù)是松耦合,靈活性更好,天然就支持重刪。位置尋址適合所有的控制器都可以全局訪問(wèn)元數(shù)據(jù)的架構(gòu),而內(nèi)容尋址適合大規(guī)模全局重刪和分布式架構(gòu)。

Pure采取的是引用驗(yàn)證的方式。當(dāng)回收空間的時(shí)候(垃圾收集),檢查各種表看是否還有人在引用這個(gè)數(shù)據(jù),如果沒(méi)有就刪除。

而XtremIO采取的是引用計(jì)數(shù)的方式。原理其實(shí)很簡(jiǎn)單,塊的元數(shù)據(jù)(塊ID->位置映射)包含一個(gè)引用計(jì)數(shù),“寫(xiě)”一次計(jì)數(shù)就加一,重寫(xiě)時(shí)舊的塊(其實(shí)就是刪除)就減一。大家注意這個(gè)寫(xiě)打引號(hào)了,不是真正去寫(xiě)物理位置。如果是一個(gè)卷的刪除、克隆和XCOPY操作,由于需要大量修改引用計(jì)數(shù),因此會(huì)觸發(fā)后臺(tái)進(jìn)程去做這件事情。當(dāng)引用為零,說(shuō)明沒(méi)人用這個(gè)塊了,就可以被條帶更新時(shí)覆蓋寫(xiě)了。(XtremIO不做系統(tǒng)級(jí)的垃圾收集,下面我們討論這個(gè)問(wèn)題)

SF采用的方法是標(biāo)記&掃除GC的方式。塊的元數(shù)據(jù)的每個(gè)入口都包含一個(gè)“在用”的標(biāo)志,每隔一定的時(shí)間,所有的塊都標(biāo)記為未使用。卷的元數(shù)據(jù)創(chuàng)建當(dāng)前使用的塊ID的Bloom Filters(布隆濾波器,一種高效的數(shù)據(jù)結(jié)構(gòu),西瓜哥的數(shù)學(xué)是語(yǔ)文老師教的,大家可以百度學(xué)習(xí)),送到塊層,在布隆濾波器里面的塊就標(biāo)志為“在用”,在GC結(jié)束后沒(méi)有在用的塊就刪除了。這樣周而復(fù)始。(西瓜哥認(rèn)為這個(gè)設(shè)計(jì)的關(guān)鍵是找了一個(gè)高效的布隆濾波器,其特點(diǎn)是高效但可能有非常小的誤判,但誤判只是浪費(fèi)一點(diǎn)點(diǎn)空間而已,即有些塊沒(méi)有用而標(biāo)記為使用了。但這個(gè)誤判不影響數(shù)據(jù)的安全,但效率大大提高)。

這個(gè)三種方法的區(qū)別如下,引用驗(yàn)證的方式需要存儲(chǔ)層和元數(shù)據(jù)層緊耦合,允許幾乎馬上就決定那個(gè)數(shù)據(jù)不在用,特別適合全局共享元數(shù)據(jù)場(chǎng)景;引用計(jì)數(shù)的方式在某些操作(克隆,XCOPY)需要大量更新計(jì)數(shù)器,計(jì)數(shù)要非常精確,不能有絲毫差錯(cuò),也可以幾乎立即決定哪些數(shù)據(jù)沒(méi)有用,非常適合單一信任源的元數(shù)據(jù)場(chǎng)景;而標(biāo)記&掃除 GC的方式,需要GC掃除在后臺(tái)運(yùn)行,系統(tǒng)的抗干擾性非常高,允許沒(méi)有改變塊元數(shù)據(jù)下對(duì)卷的元數(shù)據(jù)進(jìn)行處理,非常適合松耦合的分布系統(tǒng)。

XtremIO采用的是固定塊的方式。數(shù)據(jù)以一個(gè)RAID條帶(23+2)條帶寫(xiě)入,一旦硬盤(pán)寫(xiě)滿(mǎn),部分條帶被新數(shù)據(jù)更新,一旦寫(xiě)入,數(shù)據(jù)不再“移動(dòng)”,數(shù)據(jù)塊固定為4K大?。ìF(xiàn)在XIOS 3.0已經(jīng)改為8K,因此需要破壞升級(jí),如昨天我們討論的那樣)。

而SF和Pure采用的是日志結(jié)構(gòu)方式。SSD空間分成固定大小的段,進(jìn)入的數(shù)據(jù)匯聚成段并順序?qū)懭?,一旦硬盤(pán)寫(xiě)滿(mǎn),部分的段被垃圾收集,并寫(xiě)到新的位置,每個(gè)塊大小可以不同。

大帥哥還講了不同SSD不同讀寫(xiě)模式下硬盤(pán)性能的對(duì)比。

如果是普通的cMLC的硬盤(pán),由于其控制芯片處理能力差,超供也不高,因此,剛開(kāi)始性能還不錯(cuò),但開(kāi)始垃圾收集的時(shí)候,128K隨機(jī)讀性能馬上下降到2500 IOPS。

如果是1M的隨機(jī)讀,IOPS雖然可以到9000,但抖動(dòng)厲害。

但1M的順序讀性能基本可以穩(wěn)定在17000 IOPS。

這也是為啥XtremIO自己不做GC的原因。因?yàn)槠鋵?xiě)是隨機(jī)寫(xiě)。而日志架構(gòu)的方式,可以做到順序的大塊聚合寫(xiě)。因此系統(tǒng)可以做GC,也就是可以采用cMLC的SSD,降低介質(zhì)成本。

而XtremIO必須采用eMLC SSD,因?yàn)樾枰猄SD自己來(lái)做GC。這個(gè)Anobit的eMLC SSD,在GC的時(shí)候,128K隨機(jī)寫(xiě)的性能是15000IOPS。性能還是不如上面的cMLC 1M順序?qū)憽?/p>

因此,固定塊方法很難支持變長(zhǎng)的塊,大塊的寫(xiě)會(huì)分成多個(gè)4k(或8K)的寫(xiě),SSD控制器來(lái)做閃存的page管理,需要更多的SSD超供(28%),這種架構(gòu)適合比較簡(jiǎn)單的文件系統(tǒng),采用eMLC SSD的場(chǎng)景。而日志結(jié)構(gòu)的方法,很容易支持變長(zhǎng)的塊,寫(xiě)可以聯(lián)合,即多個(gè)小的寫(xiě)聚合成一個(gè)大塊的寫(xiě),存儲(chǔ)系統(tǒng)幫助閃存做page管理,SSD的超供只需要7%,特別適合采用cMLC SSD,支持壓縮的場(chǎng)景。(不過(guò),現(xiàn)在XtremIO XIOS 3.0也支持壓縮了)。

Pure采用鏡像SLC SSD的方式,所有的數(shù)據(jù)和元數(shù)據(jù)更新流化到一個(gè)持久的日志文件里,使用2個(gè)SLC SSD做鏡像,兩個(gè)SSD都放在第一個(gè)硬盤(pán)框里。這種方法使用小部分的SLC SSD空間,但可以增加壽命,提供更一致的寫(xiě)延遲。

而XtremIO采用系統(tǒng)內(nèi)存加UPS的方法。待寫(xiě)的數(shù)據(jù)和元數(shù)據(jù)保存在2個(gè)控制器的內(nèi)存里,臟數(shù)據(jù)在后臺(tái)聚合成RAID條帶寫(xiě),和VNX類(lèi)似,所有的控制器需要外部UPS保護(hù),只不過(guò)VNX2現(xiàn)在用的是內(nèi)部的BBU。在掉電的時(shí)候,臟數(shù)據(jù)刷到磁盤(pán)框或者內(nèi)部控制器的SSD。如果單個(gè)BBU故障如何處理不明(可能會(huì)繼續(xù)保持運(yùn)行)。

SF采用PCIe NVRAM的方式,每一個(gè)節(jié)點(diǎn)都內(nèi)置一個(gè)8G NVRAM卡,上面有超級(jí)電容和SLC閃存,所有的數(shù)據(jù)和元數(shù)據(jù)都同時(shí)提交給2個(gè)節(jié)點(diǎn),掉電時(shí),卡把數(shù)據(jù)刷到閃存,來(lái)電的時(shí)候恢復(fù)到內(nèi)存里。(這個(gè)方法和華為FusionStorage的保護(hù)方式類(lèi)似)

這三種方法的對(duì)比如下。SLC SSD的方式性能最差,PCIe NMRAM其次,DRAM w/UPS方式最快。SLC SSD方式磁盤(pán)框壞了數(shù)據(jù)就不可用了,而其他兩種則沒(méi)有SPOF。SLC SSD和PCIe NVRAM的方式都可以防止軟件崩潰,而DRAM w/UPS在雙kenel panic下有數(shù)據(jù)丟失的風(fēng)險(xiǎn),維護(hù)性也差一些。SLC SSD的方法適合從控制器去除持久數(shù)據(jù)的場(chǎng)景(這個(gè)就是為啥Pure支持NDU的一個(gè)原因,因?yàn)槭褂昧藷o(wú)狀態(tài)控制器),而DRAM w/UPS的方式實(shí)現(xiàn)簡(jiǎn)單,性能好,但PCIe NVRAM方式提供最高級(jí)別的保護(hù)。

最后匯總了三個(gè)閃存產(chǎn)品架構(gòu)在這6方面的實(shí)現(xiàn)方法,有些方法擴(kuò)展性好,有些方法實(shí)現(xiàn)簡(jiǎn)單,有些方法成本最優(yōu),有些方法可靠性最高。圖中用不同的顏色做了標(biāo)記??偟膩?lái)說(shuō),Pure關(guān)注TTM,可用性和成本,而XtremIO關(guān)注TTM和擴(kuò)展性,SF關(guān)注擴(kuò)展性、可用性和成本。

而擴(kuò)展性、可用性和成本正是下一代數(shù)據(jù)中心的關(guān)鍵屬性。哈,原來(lái)大帥哥還是有偏見(jiàn)的,O(∩_∩)O哈!

總結(jié):西瓜哥認(rèn)為,這三種架構(gòu),其實(shí)各有優(yōu)缺點(diǎn)。今天學(xué)習(xí)以后,終于知道為啥XtremIO不用做垃圾收集了,也知道為啥它不用cMLC了,也更了解為啥它的性能為啥如此好,并且能夠保持一致的性能了,也了解大家對(duì)他元數(shù)據(jù)安全的擔(dān)心。因此,西瓜哥的觀點(diǎn),如果追求性?xún)r(jià)比,我會(huì)采用Pure,如果追求極致性能,我重點(diǎn)考慮XtremIO,如果考慮大規(guī)模的擴(kuò)展,SF是不二之選。

希望大家積極反饋你的意見(jiàn)和建議,微信掃描如下二維碼,關(guān)注微信公眾號(hào)“高端存儲(chǔ)知識(shí)”,與作者微信互動(dòng)。通過(guò)掌上DOIT移動(dòng)客戶(hù)端,您可以訂閱西瓜哥專(zhuān)欄,第一時(shí)間獲得知名專(zhuān)家和業(yè)界領(lǐng)袖的深度剖析與趨勢(shì)分析。

 

分享到

xigua

相關(guān)推薦