以下為王勁凱先生的演講實(shí)錄整理:

FusionStack公司介紹:2007年成立,公司做分布式存儲(chǔ)。2010年上線(xiàn)首個(gè)超融合項(xiàng)目,是國(guó)內(nèi)較早做超融合項(xiàng)目的企業(yè)。

我們先通過(guò)英特爾官網(wǎng)數(shù)據(jù)畫(huà)出的一張圖來(lái)分析過(guò)去十年閃存的動(dòng)態(tài)。紅線(xiàn)是閃存的性能增長(zhǎng)曲線(xiàn),從2008年開(kāi)始到2013年,閃存性能變化并不大。從4萬(wàn)IOPS達(dá)到10萬(wàn)IOPS,2013年之后突然爆發(fā),目前可以看到將近百萬(wàn)級(jí)別的IOPS的閃存成為主流。另外就是CPU性能增長(zhǎng)曲線(xiàn),CPU性能過(guò)去在十年變化也不是很大。這里我們發(fā)現(xiàn)一個(gè)非常明顯的問(wèn)題,存儲(chǔ)軟件性能逐漸跟不上閃存的發(fā)展,閃存性能繼續(xù)提升,存儲(chǔ)成了整個(gè)軟件定義存儲(chǔ)和超融合的瓶頸。

12282

高性能存儲(chǔ)技術(shù)演進(jìn)觸發(fā)的裸金屬架構(gòu)

在過(guò)去的十年里,陣列時(shí)代的高性能是高速緩存技術(shù)。磁盤(pán)性能比較低,一個(gè)磁盤(pán)一秒鐘處理100IO。數(shù)據(jù)量相對(duì)不是很大,熱點(diǎn)比較集中。用內(nèi)存來(lái)做緩存,實(shí)際IO落到內(nèi)存里面,這種方式是過(guò)去十多年來(lái)一直用的方式。

分布式時(shí)代,谷歌領(lǐng)先分布式互聯(lián)網(wǎng)架構(gòu)時(shí)代,大家用的是并行IO。這時(shí)的時(shí)代特點(diǎn)是什么?磁盤(pán)性能低,數(shù)據(jù)量大,熱點(diǎn)不明顯。大量磁盤(pán),用軟件把IO聚合起來(lái),一個(gè)分析業(yè)務(wù)我們把它拆散到數(shù)百塊磁盤(pán)甚至上千塊磁盤(pán)處理,這是分布式時(shí)代的一個(gè)做法。

現(xiàn)在已然進(jìn)入了閃存時(shí)代,閃存性能高,延遲低不再需要你去優(yōu)化。但幾乎所有軟件都落后于閃存的性能,用戶(hù)可能在買(mǎi)超融合的時(shí)候,購(gòu)買(mǎi)多塊閃存,一塊100萬(wàn)IOPS,3塊就是300萬(wàn)IOPS,你的軟件能跑300萬(wàn)嗎?通常不能。用非常高配英特爾至強(qiáng)2699的CPU跑到30萬(wàn)IOPS,一個(gè)節(jié)點(diǎn)。

在2013年前后,我們注意這到個(gè)問(wèn)題,然后進(jìn)行了深入研究,最終提出了一個(gè)裸金屬架構(gòu)概念。

裸金屬架構(gòu)實(shí)現(xiàn)應(yīng)當(dāng)注意的問(wèn)題

這個(gè)架構(gòu)首先我們要注意幾點(diǎn),第一intterupt是什么?過(guò)去編程通常會(huì)使用中斷,你第一件事情就是避免中斷。原子操作,用來(lái)實(shí)現(xiàn)鎖,無(wú)鎖隊(duì)列。我們有CPU原子指令可以實(shí)現(xiàn)。過(guò)去那個(gè)時(shí)代,這個(gè)東西比較高效。閃存實(shí)現(xiàn)這個(gè)東西變得比較低效,帶來(lái)核之間的互斥。TLB miss(TLB是頁(yè)表緩沖,就是負(fù)責(zé)將虛擬內(nèi)存地址翻譯成實(shí)際的物理內(nèi)存地址,而CPU尋址時(shí)會(huì)優(yōu)先在TLB中進(jìn)行尋址。TLB miss則表示TLB中沒(méi)有所需頁(yè)表),而處理器的性能和尋址的命中率有很大的關(guān)系。還有NUMA的問(wèn)題,你在一個(gè)CPU訪(fǎng)問(wèn)另外一個(gè)CPU內(nèi)存會(huì)發(fā)現(xiàn)非常之慢??赡苎舆t增大一兩倍,一般場(chǎng)景沒(méi)有問(wèn)題,閃存場(chǎng)景不可用。

這個(gè)是CPU內(nèi)部的照片,八個(gè)核,中間紅色部分是CPU核之間的鏈接。有一個(gè)比較有意思的現(xiàn)象,每一個(gè)核會(huì)帶一個(gè)L2 Cache,核與核之間通過(guò)內(nèi)部高速聯(lián)接連起來(lái)。你會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題,如果你一個(gè)核訪(fǎng)問(wèn)數(shù)據(jù),它所帶的L2會(huì)很快。但跨一個(gè)核,在另外一個(gè)核上訪(fǎng)問(wèn)數(shù)據(jù)就會(huì)出現(xiàn)性能下降問(wèn)題。我們提出一個(gè)理念就是Core as a compute,你跨一個(gè),哪怕另外一個(gè)節(jié)點(diǎn)也是遠(yuǎn)程訪(fǎng)問(wèn),帶來(lái)的代價(jià)可能會(huì)導(dǎo)致軟件性能急劇下降。因此設(shè)計(jì)的時(shí)候盡可能的避免遠(yuǎn)程訪(fǎng)問(wèn),做到每一個(gè)核處理自己的事情,核與核要盡量壓縮。

12283

總體架構(gòu)要進(jìn)行哪些改進(jìn)?首先傳統(tǒng)編程模型里用到生產(chǎn)的模型在閃存時(shí)代是不可用的。我們用的是Producer-consumer模型,現(xiàn)在用的分時(shí)操作系統(tǒng),出現(xiàn)之前采用的就是批處理的Producer-consumer玩法。任務(wù)調(diào)度,調(diào)度器導(dǎo)致你性能下降,會(huì)反復(fù)去影響你的寄存器。我們?cè)谶@上面設(shè)立了協(xié)作式調(diào)度器。事件處理,傳統(tǒng)模型采用event,event延遲很高,會(huì)達(dá)到10微妙,對(duì)閃存來(lái)說(shuō)非常長(zhǎng)了。我們用的是Polling模型。過(guò)去采用多核共同處理一件事情,我們用lock/lock-free。其它就是關(guān)于硬件訪(fǎng)問(wèn),你采用訪(fǎng)問(wèn)網(wǎng)卡或者硬盤(pán)都會(huì)把它交給操作系統(tǒng)。這些我們都避開(kāi)了。

Run-to-completion,采用polling和recv,exec,send四步。采用這個(gè)模型基本上就避免了我們剛才所說(shuō)得幾乎所有問(wèn)題。我們要把VM的訪(fǎng)問(wèn),根據(jù)不同數(shù)據(jù)的位置放到不同的核上。避免核和核之間的交互。那么,coroutine(協(xié)程)能不能提升性能?答案是不能。調(diào)試?yán)щy,gdb不可用。Swapcontext開(kāi)銷(xiāo)大(150萬(wàn)次每秒),需要改進(jìn)。我們目前的測(cè)算是每秒能測(cè)算150萬(wàn)次的切換,這個(gè)對(duì)我們來(lái)說(shuō)太慢了,我們自己來(lái)寫(xiě),但如果計(jì)算器的拷貝遺漏了不該遺漏的東西,后果很?chē)?yán)重。

Stack-bypass是繞過(guò)操作系統(tǒng)訪(fǎng)問(wèn)硬件的部分。首先紅色部分是操作系統(tǒng)的對(duì)站,通常無(wú)法繞開(kāi)紅色部分對(duì)站,已經(jīng)有很成熟的方法已經(jīng)列出來(lái)了,可以讓你繞過(guò)這些東西,我們把這些東西徹底解決掉了。

12287

另外,我們知道ceph,ceph我們目前看到的數(shù)據(jù)比較快,能夠跑出15萬(wàn)IOPS。到了今天我們延遲已經(jīng)壓縮到300微秒以下。我們單個(gè)IO延遲是軟件對(duì)站里面延遲,目前是3微秒, NVME設(shè)備是90微秒。英特爾下一代的處理器延遲是10微秒,我們只需要3微秒完成它軟件層的處理。未來(lái)把這個(gè)壓縮到更低,有可能壓縮到2微秒。

雖然FusionStack是初創(chuàng)公司,但產(chǎn)品卻不是基于某個(gè)開(kāi)源軟件改的。因?yàn)樵?007年的時(shí)候沒(méi)有任何東西可以用。其產(chǎn)品是一個(gè)分布式元數(shù)據(jù)的加工,是有元數(shù)據(jù)的。比較有意思是社區(qū)的開(kāi)源版本軟件定義存儲(chǔ)絕大部分都是采用某種改進(jìn)的模型,沒(méi)有元數(shù)據(jù)。我們看到比較多的商業(yè)軟件帶元數(shù)據(jù)比較多一些。為什么有這個(gè)分歧,我們認(rèn)為在2007年前后Hadoop主導(dǎo)分布式的時(shí)候,大家對(duì)一些數(shù)據(jù)不滿(mǎn)意,紛紛設(shè)計(jì)新的模型。就FusionStack的角度來(lái)看,對(duì)于一個(gè)分布式塊存儲(chǔ)來(lái)說(shuō),分布式元數(shù)據(jù)足以應(yīng)對(duì)生產(chǎn)需求,分布式元數(shù)據(jù)帶來(lái)一些好處,比如說(shuō)本地化。

之前是邏輯布局,這是物理布局,物理布局與很多存儲(chǔ)廠(chǎng)商交流的時(shí)候,都說(shuō)與傳統(tǒng)架構(gòu)有一致性,其實(shí)就是這樣。FusionStack的設(shè)計(jì)是介于分布式存儲(chǔ)和傳統(tǒng)存儲(chǔ)之間的模型。首先我們考慮的是保證你能夠滿(mǎn)足傳統(tǒng)存儲(chǔ)模型的一致性的性能,然后才是分布式問(wèn)題。我們有一個(gè)微控制器,每一個(gè)卷會(huì)有一個(gè)控制器,因?yàn)樗锌刂破鞴芾淼脑獢?shù)據(jù)。這個(gè)控制器記錄了它的副本位置,我們的副本是分成1兆大小的塊,打散存放在集群中。每卷一個(gè)控制器,這個(gè)控制器的位置隨著你的虛擬機(jī)的遷移進(jìn)行遷移。

分享到

崔歡歡

相關(guān)推薦