以下內(nèi)容根據(jù)現(xiàn)場(chǎng)速記整理,未經(jīng)演講人本人確認(rèn),或有疏漏刊物,僅供參考:

大家好,我今天談的內(nèi)容偏上層,也就是阿里巴巴怎么把閃存技術(shù)真正的應(yīng)用業(yè)務(wù)上面去。我在阿里巴巴做分布式存儲(chǔ),我們的系統(tǒng)叫盤(pán)古,在阿里巴巴目前應(yīng)用在很多的業(yè)務(wù)上面。

上圖是我們的發(fā)展歷史,我們把這個(gè)叫統(tǒng)一存儲(chǔ)之路。

阿里巴巴做存儲(chǔ)可能跟其他公司不太一樣,我們真的做了一個(gè)存儲(chǔ)平臺(tái),把各個(gè)業(yè)務(wù)統(tǒng)一起來(lái),然后用同一套系統(tǒng)去支持這個(gè)業(yè)務(wù)。十年前我們開(kāi)始做這個(gè)系統(tǒng),隨后在2010年、2011年我們基于盤(pán)古系統(tǒng)發(fā)布了公有云的產(chǎn)品,像大數(shù)據(jù)的ODPS、ECS,還有我們的對(duì)象存儲(chǔ)OSS服務(wù)。

在2013年有一個(gè)關(guān)鍵事件——阿里巴巴的飛天5K項(xiàng)目落成。同一時(shí)代在阿里內(nèi)部還有其他的存儲(chǔ)系統(tǒng)在用,還有云梯1和云梯2系統(tǒng),2013年把這兩個(gè)系統(tǒng)合并了,這是離線大數(shù)據(jù)上的標(biāo)志性事件。2016年,盤(pán)古2.0項(xiàng)目啟動(dòng)等等。

阿里巴巴可能和其他做云產(chǎn)品的公司不一樣,對(duì)于我們來(lái)說(shuō),我們做這些新的技術(shù),并不是讓大家去做小白鼠,阿里巴巴自己內(nèi)部關(guān)鍵的電商業(yè)務(wù)也是跑在同一套系統(tǒng)上。

比如電商交易的核心系統(tǒng),比如雙11和雙12,大家在淘寶上下單,淘寶的數(shù)據(jù)庫(kù)、消息界面系統(tǒng),都是由同一套系統(tǒng)來(lái)支撐的。我們的主力云產(chǎn)品包括ECS和OSS的存儲(chǔ),也都是在我們的系統(tǒng)上。對(duì)于統(tǒng)一存儲(chǔ),我覺(jué)得有幾個(gè)關(guān)鍵的業(yè)務(wù)特點(diǎn):

第一,我們的規(guī)模非常大,應(yīng)該說(shuō)阿里集團(tuán)大部分的數(shù)據(jù)都在這個(gè)系統(tǒng)上。

第二,我們支持了非常核心的系統(tǒng),內(nèi)部系統(tǒng)會(huì)和外部系統(tǒng)業(yè)務(wù)稍微有一些區(qū)別。

一方面,比如我們的業(yè)務(wù)系統(tǒng)的分布式架構(gòu)做的很好,因?yàn)樗鎸?duì)雙11的沖擊,所以,要求系統(tǒng)能夠在短時(shí)間內(nèi)承受非常高的流量沖擊,需要你的系統(tǒng)有非常好的彈性。

一方面,云產(chǎn)品又稍微有點(diǎn)不一樣,云產(chǎn)品面對(duì)的是很多架構(gòu)上沒(méi)有那么好的公司,比如創(chuàng)業(yè)公司,他們的架構(gòu)比較簡(jiǎn)單,但是對(duì)我們單個(gè)存儲(chǔ)或者單個(gè)OSS的可用性要求非常高,所以這兩個(gè)需求又有點(diǎn)不一樣。

同時(shí)受到這兩方面的驅(qū)動(dòng),我們做統(tǒng)一的存儲(chǔ),用統(tǒng)一的技術(shù)服務(wù)這兩種類型的應(yīng)用。

為什么我們?nèi)ビ梅植际酱鎯?chǔ)解決這些問(wèn)題?

我講一個(gè)實(shí)踐例子,講一個(gè)今年我們用存儲(chǔ)技術(shù)支持雙11大促的例子。

上圖,今年雙11零點(diǎn)高峰期,數(shù)據(jù)庫(kù)對(duì)于分布式存儲(chǔ)的讀寫(xiě)的圖,我們可以看到零點(diǎn)是一個(gè)標(biāo)志,到了0點(diǎn)之后流量開(kāi)始上來(lái)了,到了0點(diǎn)30分流量開(kāi)始下跌,是和之前差不多的情況。

所以,電商面臨這樣一個(gè)場(chǎng)景,我們到底要準(zhǔn)備多少臺(tái)機(jī)器去撐這個(gè)高峰,如果我們準(zhǔn)備了很多機(jī)器去滿足這個(gè)流量,那么這個(gè)流量只持續(xù)個(gè)把小時(shí),那么這就是一種浪費(fèi)。

所以,阿里在這兩三年一直在做一個(gè)叫做混部的技術(shù),具體來(lái)說(shuō)我們有很多應(yīng)用服務(wù)器是跑在線的業(yè)務(wù),有另一些應(yīng)用服務(wù)器跑離線的業(yè)務(wù)。一般公司的做法都是在線業(yè)務(wù)比如數(shù)據(jù)庫(kù)、Web服務(wù)器都是延時(shí)敏感的業(yè)務(wù),不能和離線業(yè)務(wù)放在一起。但是在阿里來(lái)說(shuō),面對(duì)電商雙11我們需要一個(gè)非常有彈性的系統(tǒng),這兩年為了應(yīng)對(duì)雙11,我們能夠把離線業(yè)務(wù)的機(jī)器讓出來(lái),讓它去跑在線應(yīng)用,等雙11這個(gè)高峰過(guò)去之后在線的應(yīng)用可以縮回來(lái),讓離線的業(yè)務(wù)利用在線的機(jī)器完成自己的工程。

這樣一件事有很多挑戰(zhàn),對(duì)于存儲(chǔ)來(lái)說(shuō)意味著什么?挑戰(zhàn)在哪里?

我覺(jué)得有兩點(diǎn):一個(gè)是在線應(yīng)用和離線應(yīng)用對(duì)于存儲(chǔ)要求完全不一樣。在線應(yīng)用現(xiàn)在SSD可以做到幾十微秒的延遲,離線應(yīng)用只要吞吐大、容量大就好。

有一些應(yīng)用是沒(méi)有狀態(tài)的,比如跑一個(gè)Web服務(wù)器,它在本地存儲(chǔ)的數(shù)據(jù)就是它的程序文件,運(yùn)行時(shí)它可能有一些文件緩存,程序運(yùn)行起來(lái)可能會(huì)打日志,這些東西都是當(dāng)程序從一個(gè)機(jī)器遷到另一臺(tái)機(jī)器做擴(kuò)展時(shí)可以丟掉的,是可以重新從遠(yuǎn)程拉起來(lái)的。

另一些程序是有狀態(tài)的,比如說(shuō)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)在本地有它的數(shù)據(jù),消息隊(duì)列有它的數(shù)據(jù)文件,如果要做擴(kuò)展,你需要把這個(gè)數(shù)據(jù)遷移到另一臺(tái)機(jī)器,過(guò)程很耗時(shí),并且沒(méi)有什么彈性,你需要事先準(zhǔn)備很長(zhǎng)時(shí)間。這兩點(diǎn)使得我們?cè)谧龌觳繒r(shí),對(duì)存儲(chǔ)提出了很大挑戰(zhàn)。

怎么解決這個(gè)問(wèn)題呢?

我們有一個(gè)概念叫做存儲(chǔ)和計(jì)算分離。老話說(shuō)30年河西30年河?xùn)|,以前用企業(yè)存儲(chǔ)天然就是存儲(chǔ)和計(jì)算分離,現(xiàn)在我們又回到了這樣一個(gè)架構(gòu)。我們的在線服務(wù)器也不去寫(xiě)本地的盤(pán),單獨(dú)搭一個(gè)存儲(chǔ)的機(jī)器,把這些機(jī)器分成存儲(chǔ)和計(jì)算兩種,存儲(chǔ)專門(mén)放數(shù)據(jù),上面不跑業(yè)務(wù)。計(jì)算上面跑業(yè)務(wù),用計(jì)算節(jié)點(diǎn)的CPU資源、內(nèi)存,但是它不去寫(xiě)本地的盤(pán)。這樣高峰到來(lái),我們很輕松地把一些計(jì)算任務(wù)從一個(gè)計(jì)算的節(jié)點(diǎn)去彈性彈到離線的服務(wù)器上,峰值過(guò)去之后再縮回來(lái)。

有了存儲(chǔ)和計(jì)算分離后,數(shù)據(jù)就不用寫(xiě)本地盤(pán)了,而是寫(xiě)到遠(yuǎn)程分布式存儲(chǔ),這對(duì)于分布式存儲(chǔ)來(lái)說(shuō)不太容易做到,但還好,隨著業(yè)界技術(shù)的進(jìn)步,我們有了高性能的網(wǎng)絡(luò)和閃存,分布式存儲(chǔ)在一些方面上做的并不比本地的盤(pán)差,甚至在某些方面做的更好。

具體在哪些地方比較好呢?

首先,可靠性來(lái)說(shuō),分布式存儲(chǔ)天然就在做機(jī)器之間的冗余,可以打造更好的可靠性。

從性能來(lái)說(shuō),我們用了一些比較新的技術(shù),用戶態(tài)的一些技術(shù),能夠使分布式存儲(chǔ)和本地的盤(pán)達(dá)到差不多的水平,同時(shí),因?yàn)榉植际酱鎯?chǔ)后臺(tái)是一個(gè)大的資源池,對(duì)于特定的應(yīng)用,比如說(shuō)當(dāng)IO集中在一塊盤(pán)上或者幾塊盤(pán)上,小部分的盤(pán)的時(shí)候,可以利用更多的機(jī)器來(lái)完成這個(gè)。在這種場(chǎng)景下,會(huì)比本地的盤(pán)更好。

成本方面也有彈性,當(dāng)你去用本地盤(pán)的時(shí)候,你會(huì)面臨容量規(guī)劃的問(wèn)題,可能1%的情況下,某個(gè)程序有問(wèn)題把盤(pán)用滿了,可能會(huì)引起整個(gè)系統(tǒng)的崩潰。在分布式存儲(chǔ)的情況下,它是一個(gè)資源池,容量規(guī)劃的時(shí)候更簡(jiǎn)單??梢园巡煌脩舻谋P(pán),放在一個(gè)大的池子里,這樣一來(lái),空閑的空間就會(huì)比較少。

我挑幾點(diǎn)詳細(xì)介紹一下。

第一點(diǎn),當(dāng)我們做大規(guī)模糾刪碼的實(shí)踐,在傳統(tǒng)存儲(chǔ)對(duì)應(yīng)的就是做Raid的糾刪碼,但是Raid給人的印象是,這個(gè)東西比較慢,恢復(fù)的比較慢,恢復(fù)的過(guò)程會(huì)有損等等。當(dāng)你把這個(gè)問(wèn)題放在跨機(jī)器的集群很多事會(huì)變得比較好辦。我們可以跨機(jī)器去做糾刪碼,我們可以跨網(wǎng)絡(luò)交換機(jī)做糾刪碼,甚至跨可用區(qū)做糾刪碼。我們會(huì)找一個(gè)城市,找三個(gè)地方,在三個(gè)地方之間搭機(jī)房,用比較快的網(wǎng)絡(luò)。可以把一部分?jǐn)?shù)據(jù)做糾刪碼,分在三個(gè)地方。

做糾刪碼的時(shí)候可以用更多的數(shù)據(jù)塊等等把這個(gè)做的更安全。我們線上基本采用的都是N+3,任何三塊盤(pán)死機(jī)我都不損失數(shù)據(jù)。同時(shí)因?yàn)槌刈幼兇罅?,所以,我們是在幾百、幾千臺(tái)機(jī)器的規(guī)模上去做糾刪碼。當(dāng)你一個(gè)節(jié)點(diǎn)死機(jī)的時(shí)候,我會(huì)有成百上千的機(jī)器做恢復(fù),所以,可以解決傳統(tǒng)陣列恢復(fù)時(shí)間慢、有損的問(wèn)題。

下面講分布式存儲(chǔ)的可靠性給業(yè)務(wù)帶來(lái)什么。

我們知道,在阿里自己的業(yè)務(wù)和云不太一樣,阿里自己的電商業(yè)務(wù)本身就是分布式的,是一個(gè)多地域、分布式的很多小應(yīng)用組成的系統(tǒng)。為什么這個(gè)時(shí)候還需要做存儲(chǔ)的分布式?以數(shù)據(jù)庫(kù)為例,數(shù)據(jù)庫(kù)非常有代表性,很多人首先覺(jué)得做分布式數(shù)據(jù)庫(kù)很難,基于MySQL做存儲(chǔ)計(jì)算分離也不太容易。

阿里在很多年之前就開(kāi)始了去IOE進(jìn)程,去IOE之后就走向了MySQL分庫(kù)、分表的架構(gòu)上。為什么做分庫(kù)分表?這因?yàn)镸ySQL單機(jī)的性能是受限的,隨著業(yè)務(wù)的增長(zhǎng)必須用多臺(tái)機(jī)器去做,與此同時(shí),為了解決單機(jī)的可靠性、可用性的問(wèn)題,MySQL還去做主備,當(dāng)主死機(jī)以后可以馬上切備庫(kù)。同時(shí)在MySQL用本地盤(pán)的時(shí)候,還會(huì)給盤(pán)做Raid,進(jìn)一步增加盤(pán)的可靠性。轉(zhuǎn)到分布式存儲(chǔ)之后,其實(shí)它解決的是數(shù)據(jù)可靠性問(wèn)題,但是并沒(méi)有解決業(yè)務(wù)的可用性問(wèn)題。

在業(yè)務(wù)層和存儲(chǔ)層,大家各司其職去擴(kuò)展。存儲(chǔ)層專注于解決數(shù)據(jù)本身的高可靠、高可用問(wèn)題。而MySQL應(yīng)用層,專注解決事物處理、擴(kuò)展一致性的問(wèn)題。

通常認(rèn)為分布式存儲(chǔ)是要走網(wǎng)絡(luò),傳統(tǒng)本地存儲(chǔ)是直接用PCIe這樣的高速連接去連到存儲(chǔ),分布式存儲(chǔ)然的弱點(diǎn)就是接入網(wǎng)絡(luò),分布式存儲(chǔ)因?yàn)閿?shù)據(jù)要寫(xiě)多份,要跨故障率去寫(xiě)多份,網(wǎng)絡(luò)的鏈路就會(huì)更長(zhǎng)。

得益于現(xiàn)在用戶態(tài)技術(shù)的發(fā)展,前面雖然分布式存儲(chǔ)有很多好處,但是性能是一個(gè)硬的限制,一旦性能滿足不了要求,前面各種優(yōu)勢(shì),在業(yè)務(wù)方面都沒(méi)有體現(xiàn)。

具體來(lái)說(shuō),我們用用戶的軟件棧做的事情就是采用Run-to-Completion的線程模型,這個(gè)過(guò)程中單機(jī)內(nèi)部沒(méi)有線程切換,沒(méi)有鎖、沒(méi)有口,我們把這些東西都去掉了,能夠達(dá)到非常好的性能。

同時(shí)因?yàn)榉植际酱鎯?chǔ)自身的特點(diǎn),它是基于這些不穩(wěn)定的硬件搭建出一個(gè)穩(wěn)定的系統(tǒng)。

總結(jié)一下。

在阿里巴巴做存儲(chǔ),其實(shí)同時(shí)支持了自己內(nèi)部電商的應(yīng)用以及云的應(yīng)用,這兩部分應(yīng)用稍微有一些區(qū)別,在電商的應(yīng)用來(lái)說(shuō),我們更看重彈性,在云的應(yīng)用我們更看重單個(gè)實(shí)例的服務(wù)質(zhì)量。總體來(lái)說(shuō),做一個(gè)平臺(tái),平臺(tái)需要承上啟下,我們希望能把在座各位在硬件方面做的工作帶來(lái)的發(fā)展的紅利,最終帶給我們的業(yè)務(wù),謝謝大家!

分享到

zhupb

相關(guān)推薦