美團(tuán)云混合存儲(chǔ)系統(tǒng):成本及性能優(yōu)化路徑(美團(tuán)云是什么意思)

美團(tuán)云混合存儲(chǔ)系統(tǒng):成本及性能優(yōu)化路徑(美團(tuán)云是什么意思)

前言

在過去60年間,機(jī)械硬盤的容量呈指數(shù)級增長的同時(shí)體積也越來越小。1956年IBM一塊 5兆的巨型硬盤需要數(shù)人推上車去運(yùn)輸,到2016年一塊3.5寸的機(jī)械硬盤就有10TB的大小,60年增長了9個(gè)數(shù)量級。但與容量和體積的變化相比,機(jī)械硬盤的性能增長非常緩慢,吞吐率基本保持在200兆每秒上下。IOPS增長更慢,一塊7200轉(zhuǎn)的硬盤在不同的iodepth下的IOPS次數(shù)大概在100-200范圍內(nèi)。這是容量與性能上的失衡。

而另一方面,目前市場上固態(tài)硬盤和機(jī)械硬盤報(bào)價(jià),單GB的成本可以相差10倍,巨大的差價(jià)就是巨大的優(yōu)化空間。

容量與性能、成本的失衡促使美團(tuán)云存儲(chǔ)研發(fā)團(tuán)隊(duì)開始推進(jìn)混合存儲(chǔ)系統(tǒng)的研究。

設(shè)計(jì)混合存儲(chǔ)系統(tǒng)的意義

通常,根據(jù)成本和性能這兩個(gè)維度,我們可以將云硬盤分成3檔:

① 容量型云硬盤:成本比較低,性能也比較低的產(chǎn)品

② 效率型云硬盤:成本及性能適中的產(chǎn)品

③ 性能型云硬盤:性能比較高,價(jià)格也比較高

容量型 效率型 性能型
IOPS 數(shù)百 小幾千 兩萬
吞吐率(MB/s) 數(shù)十 一百多 兩百多
延遲(ms) <10 <3 <3
單價(jià)(元/GB/月)

因?yàn)樾詢r(jià)比適中,所以我們在云平臺(tái)上給用戶創(chuàng)建最多就是效率型的云硬盤。

我們不妨計(jì)算一下,如果要求云平臺(tái)為100個(gè)云硬盤同時(shí)提供4000并發(fā)IOPS能力的話,我需要準(zhǔn)備一個(gè)什么樣的系統(tǒng)。有兩種實(shí)施方案:

第一種,如果用傳統(tǒng)的機(jī)械硬盤去搭建這個(gè)系統(tǒng),大致需要6千塊硬盤,產(chǎn)生48千瓦的功耗,3年TCO就會(huì)達(dá)到千萬元。

第二種,用單盤性能3萬(保守估計(jì))IOPS的固態(tài)硬盤,則只需40塊,功耗是0.1千瓦,3年TCO只有20萬。

兩種方案同樣達(dá)到目標(biāo)的情況下呈現(xiàn)出50倍的成本差距,固態(tài)硬盤性價(jià)比優(yōu)勢更明顯。

因此,當(dāng)我們設(shè)計(jì)存儲(chǔ)系統(tǒng)的時(shí)候,性能和容量主要為滿足需求,當(dāng)這需求確定了之后,就會(huì)有一個(gè)最優(yōu)成本方案。這也是我們設(shè)計(jì)混合存儲(chǔ)系統(tǒng)的一個(gè)主要思路。下面具體講一下如何通過對混合存儲(chǔ)系統(tǒng)進(jìn)行成本優(yōu)化和性能優(yōu)化來實(shí)現(xiàn)這一想法。

混合存儲(chǔ)-成本優(yōu)化路徑

緩存優(yōu)化

在如何平衡需求與成本獲得最優(yōu)解的思考中,我們很自然地想到將機(jī)械硬盤的很多flash組合起來形成混合存儲(chǔ),并讓每一塊flash都發(fā)揮出比較顯著的優(yōu)勢。那么如何優(yōu)化呢?

優(yōu)化的方式有以下兩種:

一種是RAID卡緩存,把閃存當(dāng)作機(jī)械硬盤的混存。如果要是這樣混存的話,其實(shí)最簡單的就是在RAID卡上面有加一個(gè)小的閃存給做緩存;

另一種是內(nèi)核緩存,為內(nèi)核增加了一些模塊,如用flash給機(jī)械硬盤做緩存。

緩存的優(yōu)化方案有很高的性價(jià)比,加上去之后效果是立竿見影。但是有一些缺陷,優(yōu)化效果受限于緩存的命中率,對隨機(jī)讀測試無效,無法實(shí)現(xiàn)產(chǎn)品承諾。所以我們沒有放棄了這一方案。

糾刪碼

降低成本還有一種方式就是糾刪碼,傳統(tǒng)的分布式存儲(chǔ)一般是3塊數(shù)據(jù),每一塊數(shù)據(jù)分3個(gè)副本,一共要存12塊。換了糾刪碼的話,3塊數(shù)據(jù)通過數(shù)據(jù)運(yùn)算產(chǎn)生兩個(gè)校驗(yàn)塊,則是存6塊,達(dá)到空間下降一半的效果。

但是糾刪碼分布式存儲(chǔ)條件下,尤其是熱的分布式可讀可寫的情況下,實(shí)現(xiàn)糾刪碼是一個(gè)非常復(fù)雜的過程。而且它在寫作的時(shí)候?qū)π阅苁怯杏绊?,因?yàn)閷懙臅r(shí)候有編碼,而編碼會(huì)對IO流程產(chǎn)生一些影響,會(huì)對性能產(chǎn)生負(fù)面效果。

所以我們嘗試了一些其他的方案。首先我們進(jìn)行了一個(gè)性能測試,用不同的測試方式對SSD隨機(jī)寫的性能IOPS和機(jī)械硬盤順序?qū)懙腎OPS分別進(jìn)行了測試。

測試結(jié)果顯示,機(jī)械硬盤隨機(jī)IO非常差,但是順序IO結(jié)果不錯(cuò),大致可以達(dá)到跟一塊SSD的水平。這一結(jié)果啟發(fā)了我們,可以在機(jī)械硬盤上用順序?qū)懙姆绞街匦聦憽?/p>

當(dāng)客戶端要讀數(shù)據(jù)的時(shí)候,數(shù)據(jù)就直接從閃存里面去讀;當(dāng)寫的時(shí)候,寫到閃存里,同時(shí)順序的寫到兩塊機(jī)械硬盤上面。這樣的話,讀是從固態(tài)硬盤讀,可以保證良好性能;寫的時(shí)候固態(tài)硬盤隨機(jī)寫性能也好,換了這方式以后整個(gè)系統(tǒng)的性能就實(shí)現(xiàn)了均衡。

美團(tuán)云混合存儲(chǔ)系統(tǒng):成本及性能優(yōu)化路徑(美團(tuán)云是什么意思)

前文提到在機(jī)械硬盤上是順序?qū)?,順序?qū)懹幸粋€(gè)問題,因?yàn)轫樞驅(qū)懴喈?dāng)于排列隊(duì)列,讀的時(shí)候就需要知道到隊(duì)列的位置去讀。所以這種方式對讀很不利,我們還是要把專用的順序?qū)懙綄S脭?shù)據(jù),回寫到所謂數(shù)據(jù)塊里面。所以,這需要系統(tǒng)允許在比較閑置的時(shí)機(jī),將數(shù)據(jù)回寫到Journal,保證這順序有高有低的。實(shí)測,線上workload存在明顯的波峰波谷現(xiàn)象,所以也證明了通過糾刪碼實(shí)現(xiàn)混合存儲(chǔ)這一方案實(shí)現(xiàn)成本優(yōu)化的可行性。

美團(tuán)云混合存儲(chǔ)系統(tǒng):成本及性能優(yōu)化路徑(美團(tuán)云是什么意思)

上述混合存儲(chǔ)的思路是基于美團(tuán)云的塊存儲(chǔ)系統(tǒng)得以實(shí)現(xiàn)的,整個(gè)系統(tǒng)是美團(tuán)云存儲(chǔ)團(tuán)隊(duì)完全自主研發(fā)。關(guān)于該存儲(chǔ)系統(tǒng)的詳解,可點(diǎn)擊http://tech.meituan.com/block-store.html分布式塊存儲(chǔ)系統(tǒng)Ursa的設(shè)計(jì)與實(shí)現(xiàn)了解詳情。后續(xù)我們還將分享糾刪碼的相關(guān)內(nèi)容,請持續(xù)關(guān)注美團(tuán)云官方微信的更新。

混合存儲(chǔ)-性能優(yōu)化路徑

固態(tài)硬盤的性能非常好,如果想要把固態(tài)硬盤性能發(fā)揮出來的話,需要在軟件上做很多的優(yōu)化。第一個(gè)方面是優(yōu)化代碼效率,第二是發(fā)覺利用并行性。

代碼效率

在代碼效率方面的優(yōu)化,有幾個(gè)方面:

  • 避免使用Iostream

  • Stack vs new/delete

  • Resource poling&caching

  • Logging

  • SSE/AVX(CRC、EC)

  • 避免使用Sendfile()

  • 保持可維護(hù)性

上述幾種方式中,Sendfile有一個(gè)非常大的問題,它不支持異步文件讀取,這樣的話會(huì)影響服務(wù)端的并發(fā)處理,反而會(huì)降低性能,所以我們不建議用sendfile。還有iostream,我們注意到有些開源存儲(chǔ)系統(tǒng)在使用,雖然在IO提升方面可能是比較方便的方式,但是效率比較低,因此我們也不建議使用。

并行

在并行的方面,有四個(gè)優(yōu)化方向:

① 無關(guān)任務(wù)獨(dú)立并行執(zhí)行

在服務(wù)端把無關(guān)的每一個(gè)Disk都有一個(gè)或多個(gè)進(jìn)程進(jìn)行服務(wù),客戶端每virtual disk 一個(gè)進(jìn)程;

② 盤內(nèi)并行

使用異步API;

③ 任務(wù)流出:流水化處理

磁盤和網(wǎng)絡(luò)并行運(yùn)行。

美團(tuán)云混合存儲(chǔ)系統(tǒng):成本及性能優(yōu)化路徑(美團(tuán)云是什么意思)

從這圖上可以看出來網(wǎng)絡(luò)的流水化對IOPS提升非常明顯。

④ 任務(wù)完成:亂序完成

慢請求不阻塞其他請求。

SubChunk

IOPS方面,機(jī)械硬盤吞吐率表現(xiàn)較差一些。所以我們會(huì)把機(jī)械硬盤上面做SubChunk來提高吞吐率。

美團(tuán)云混合存儲(chǔ)系統(tǒng):成本及性能優(yōu)化路徑(美團(tuán)云是什么意思)

確定優(yōu)化方案后,我們對該方案進(jìn)行了一些性能評估。測試環(huán)境中我們用了三臺(tái)服務(wù)器,其中一臺(tái)服務(wù)器配了12塊SSD,另外配了12塊HDD。

美團(tuán)云混合存儲(chǔ)系統(tǒng):成本及性能優(yōu)化路徑(美團(tuán)云是什么意思)

美團(tuán)云混合存儲(chǔ)系統(tǒng):成本及性能優(yōu)化路徑(美團(tuán)云是什么意思)

美團(tuán)云混合存儲(chǔ)系統(tǒng):成本及性能優(yōu)化路徑(美團(tuán)云是什么意思)

  • 在吞吐率方面我們的混合存儲(chǔ)方案性能可以跟SSD性能相差不大;

  • 在IOPS方面可以說兩種方式基本上是沒有什么顯著區(qū)別的;

  • 在延遲上,我們首先用了ping-4KB做測試,大概是一百多us的延遲,然后按照SSD ping-4KB、SSD-Hybrid、SSD3R分別去讀寫數(shù)據(jù)測延遲,SSD-Hybrid與SSD3R的延遲基本持平。這個(gè)延遲對于TCP網(wǎng)絡(luò)加以太網(wǎng)還是不錯(cuò)的。

因此這一混合存儲(chǔ)方案從性能和成本是上能夠滿足產(chǎn)品需求的。性能上面還有一些潛力可挖,比如說用RDMA等,對此,我們今后還將持續(xù)優(yōu)化。

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部