云硬盤架構(gòu)升級和性能提升詳解
云盤為云服務(wù)器提供高可用、高可靠、持久化的數(shù)據(jù)塊級隨機(jī)存儲,其性能和數(shù)據(jù)可靠性尤為重要。UCloud根據(jù)以往的運營經(jīng)驗,在過去一年里重新設(shè)計了云盤的底層架構(gòu),在提升普通云盤性能的同時,完成了對NVME高性能存儲的支持。下文從IO路徑優(yōu)化、元數(shù)據(jù)分片、支持NVME等技術(shù)維度著手,詳細(xì)講解了UCloud云硬盤的架構(gòu)升級和性能提升策略。
IO路徑優(yōu)化
過去,IO讀寫需要經(jīng)過三層架構(gòu),請求首先通過網(wǎng)絡(luò),訪問proxy代理服務(wù)器(proxy主要負(fù)責(zé)IO的路由獲取、緩存、讀寫轉(zhuǎn)發(fā)以及IO寫操作的三份復(fù)制),***到達(dá)后端存儲節(jié)點。老的架構(gòu)里,每一次讀/寫IO都需要經(jīng)過2次網(wǎng)絡(luò)轉(zhuǎn)發(fā)操作。
為了降低延時,優(yōu)化后的方案將proxy負(fù)責(zé)的功能拆分,定義由client負(fù)責(zé)IO的路由獲取、緩存,以及將IO的讀寫發(fā)送到主chunk當(dāng)中,由主chunk負(fù)責(zé)IO寫的三份復(fù)制。架構(gòu)升級之后,IO的讀寫只需經(jīng)過兩層架構(gòu),尤其對于讀IO而言,一次網(wǎng)絡(luò)請求可直達(dá)后端存儲節(jié)點,其時延平均可降低0.2-1ms。
元數(shù)據(jù)分片
分布式存儲會將數(shù)據(jù)進(jìn)行分片,從而將每個分片按多副本打散存儲于集群中。老架構(gòu)中,UCloud支持的分片大小是1G。但是,在特殊場景下(如業(yè)務(wù)IO熱點局限在較小范圍內(nèi)),1G分片會使普通SATA磁盤的性能非常差,并且在SSD云盤中,也不能均勻的將IO流量打撒到各個存儲節(jié)點上。所以新架構(gòu)中,UCloud將元數(shù)據(jù)分片調(diào)小,支持1M大小的數(shù)據(jù)分片。
分片過小時,需要同時分配或掛載的元數(shù)據(jù)量會非常大,容易超時并導(dǎo)致部分請求失敗。這是由于元數(shù)據(jù)采用的是預(yù)分配和掛載,申請云盤時系統(tǒng)直接分配所有元數(shù)據(jù)并全部load到內(nèi)存。
例如,同時申請100塊300G的云盤,如果按1G分片,需要同時分配3W條元數(shù)據(jù);如果按照1M分片,則需要同時分配3000W條元數(shù)據(jù)。
為了解決性能瓶頸,團(tuán)隊采用放棄路由由中心元數(shù)據(jù)節(jié)點分配的方式。該方案中,Client 端和集群后端采用同樣的計算規(guī)則R(分片大小、pg個數(shù)、映射方法、沖突規(guī)則);云盤申請時,元數(shù)據(jù)節(jié)點利用計算規(guī)則四元組判斷容量是否滿足;云盤掛載時,從元數(shù)據(jù)節(jié)點獲取計算規(guī)則四元組; IO時,按計算規(guī)則R(分片大小、pg個數(shù)、映射方法、沖突規(guī)則)計算出路路由元數(shù)據(jù)然后直接進(jìn)行IO。通過這種改造方案,可以確保在1M數(shù)據(jù)分片的情況下,元數(shù)據(jù)的分配和掛載暢通無阻,并節(jié)省IO路徑上的消耗。
對NVME高性能存儲的支持
NVME充分利用 PCI-E 通道的低延時以及并行性極大的提升NAND固態(tài)硬盤的讀寫性能和降低時延,其性能百倍于HDD。目前常用的基于NAND的固態(tài)硬盤可支持超10W的寫IOPS、40-60W的讀IOPS以及1GB-3GB讀寫帶寬,為支持NVME,軟件上需要配套的優(yōu)化設(shè)計。
首先,傳統(tǒng)架構(gòu)采用單線程傳輸,單個線程寫 IOPS達(dá)6W,讀IOPS達(dá)8W,難以支持后端NVME硬盤幾十萬的IOPS以及1-2GB的帶寬。為了利用NVME磁盤的性能,需要將單線程傳輸改為多線程傳輸,系統(tǒng)定期上報線程CPU以及磁盤負(fù)載狀態(tài),當(dāng)滿足某線程持續(xù)繁忙、而有線程持續(xù)空閑情況時,可將選取部分磁盤分片的IO切換至空閑線程,目前5個線程可以完全發(fā)揮NVME的能力。
此外,在架構(gòu)優(yōu)化上,除了減少IO路徑層級以及更小分片外,UCloud在IO路徑上使用內(nèi)存池、對象池,減少不停的new delete,同時盡量用數(shù)組索引,減少查詢消耗,并避免字符串比較以及無謂的拷貝,最終充分地發(fā)揮NVME磁盤性能。
以上內(nèi)容最早發(fā)表于UCloud 10月12日在上海主辦的Tech Talk***期活動。Tech Talk是UCloud面向用戶做深度技術(shù)交流的線下活動,后面也會繼續(xù)舉辦,歡迎參加。