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

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

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

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

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

一般來說,縱向擴展的架構(gòu)適合小型、固定可預測的負載,而橫向擴展架構(gòu)適合大規(guī)模、不可預測和更需要彈性的場合。

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

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

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

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

這個是IO讀寫的路徑。

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

這是他們的讀寫路徑。

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

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

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

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

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

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

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

大帥哥還講了不同SSD不同讀寫模式下硬盤性能的對比。

如果是普通的cMLC的硬盤,由于其控制芯片處理能力差,超供也不高,因此,剛開始性能還不錯,但開始垃圾收集的時候,128K隨機讀性能馬上下降到2500 IOPS。

如果是1M的隨機讀,IOPS雖然可以到9000,但抖動厲害。

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

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

而XtremIO必須采用eMLC SSD,因為需要SSD自己來做GC。這個Anobit的eMLC SSD,在GC的時候,128K隨機寫的性能是15000IOPS。性能還是不如上面的cMLC 1M順序?qū)憽?/p>

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

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

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

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

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

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

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

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

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

 

分享到

xigua

相關(guān)推薦