您好,登錄后才能下訂單哦!
一、2017年我們做了什么?
記得早在2017年的時(shí)候,王堅(jiān)博士就曾召大家就關(guān)于“IDC As a Computer”是否能做到,進(jìn)行過激烈的討論。而要做到此,必須要實(shí)現(xiàn)存儲(chǔ)計(jì)算分離,分離后由調(diào)度對計(jì)算和存儲(chǔ)資源進(jìn)行獨(dú)立自由調(diào)度。而在實(shí)現(xiàn)存儲(chǔ)計(jì)算分離的所有業(yè)務(wù)中,數(shù)據(jù)庫是最難的。因?yàn)閿?shù)據(jù)庫對I/O的時(shí)延和穩(wěn)定性有著極高的要求。但是從業(yè)界來看,存儲(chǔ)計(jì)算分離又是一個(gè)未來的技術(shù)趨勢,因?yàn)橄馟oogle spanner以及Aurora都已經(jīng)實(shí)現(xiàn)了。
所以2017年,我們抱著堅(jiān)定的信念,去實(shí)現(xiàn)數(shù)據(jù)庫的存儲(chǔ)計(jì)算分離。事實(shí)上,2017年我們做到了,基于盤古和AliDFS(ceph分支) ,在張北單元存儲(chǔ)計(jì)算分離承擔(dān)10%的交易量。2017年是數(shù)據(jù)庫實(shí)現(xiàn)存儲(chǔ)計(jì)算分離的元年,為2018年大規(guī)模實(shí)現(xiàn)存儲(chǔ)計(jì)算分離打下了堅(jiān)實(shí)的基礎(chǔ)。
二、2018技術(shù)突破?
如果說2017年是數(shù)據(jù)庫實(shí)現(xiàn)存儲(chǔ)計(jì)算分離的突破之年的話,那么2018年就是追求極致性能的一年,也是由試驗(yàn)走向大規(guī)模部署的一年,其技術(shù)的挑戰(zhàn)可想而知。在2017年的基礎(chǔ)上,2018年的挑戰(zhàn)更為巨大,需要讓存儲(chǔ)計(jì)算分離更加的高性能、普適、通用以及簡單。
cdn.com/7feb17e169ca3276773e24f0317606d8d68a7b78.png">
2018年,為了使得在存儲(chǔ)計(jì)算分離下數(shù)據(jù)庫的I/O達(dá)到最高性能和吞吐,我們自研了用戶態(tài)集群文件系統(tǒng)DADI DBFS。我們通過將技術(shù)沉淀到DADI DBFS用戶態(tài)集群文件上,賦能集團(tuán)數(shù)據(jù)庫交易全單元規(guī)模化存儲(chǔ)計(jì)算分離。那么成為存儲(chǔ)中臺(tái)級產(chǎn)品,DBFS又做了那些技術(shù)上的創(chuàng)新呢?
2.1 用戶態(tài)技術(shù)
2.1.1 “ZERO” copy
我們直接通過用戶態(tài),旁路kernel,實(shí)現(xiàn)I/O路徑的“Zero”copy。避免了核內(nèi)核外的copy,使得吞吐和性能都有了非常大的提高。
過去使用kernel態(tài)時(shí),會(huì)有兩次數(shù)據(jù)copy,一次由業(yè)務(wù)的用戶態(tài)進(jìn)程copy數(shù)據(jù)到核內(nèi),一次由核內(nèi)copy到用戶態(tài)網(wǎng)絡(luò)轉(zhuǎn)發(fā)進(jìn)程。這兩次copy會(huì)影響整體吞吐和時(shí)延。
切到純用戶態(tài)之后,我們使用polling模型進(jìn)行I/O request請求的發(fā)送。另外對于polling mode下CPU的消耗,我們使用了adaptive sleep技術(shù),使得空閑時(shí),不會(huì)浪費(fèi)core資源。
2.1.2 RDMA
另外,DBFS結(jié)合RDMA技術(shù)與盤古存儲(chǔ)直接進(jìn)行數(shù)據(jù)交換,達(dá)到接近于本地SSD的時(shí)延和更高的吞吐,從而使得今年跨網(wǎng)絡(luò)的極低時(shí)延I/O成為可能,為大規(guī)模存儲(chǔ)計(jì)算分離打下了堅(jiān)強(qiáng)的基礎(chǔ)。今年集團(tuán)參加大促的RDMA集群,可以說是在規(guī)模上為業(yè)界最大的一個(gè)集群。
2.2 Page cache
為了實(shí)現(xiàn)buffer I/O的能力,我們單獨(dú)實(shí)現(xiàn)了page cache。Page cahce采用touch count based LRU算法實(shí)現(xiàn)。引入touch count的意義是為了更好的與數(shù)據(jù)庫的I/O特性結(jié)合。因?yàn)閿?shù)據(jù)庫中時(shí)常會(huì)有大表掃描等行為,我們不希望這種使用頻率低的數(shù)據(jù)頁沖刷掉LRU的效率。我們會(huì)基于touch count將page在hot端和cool端進(jìn)行移動(dòng)。
Page cache的頁大小可配置,與數(shù)據(jù)庫的頁大小進(jìn)行結(jié)合時(shí),會(huì)發(fā)揮更好的cache效率??傮w上DBFS的page cache具備以下的能力:
●
基于touch count進(jìn)行page的冷熱端遷移
●
冷熱端比例可配置,目前為熱冷比例為2:8
●
page size可配置,結(jié)合數(shù)據(jù)庫頁進(jìn)行最優(yōu)化配置
● 多shard,提高并發(fā);總體容量可配置
2.3 異步I/O
為了提高數(shù)據(jù)庫的I/O吞吐能力,大部分?jǐn)?shù)據(jù)庫都使用了異步I/O。我們?yōu)榱思嫒萆蠈訑?shù)據(jù)庫的I/O特性,實(shí)現(xiàn)了異步I/O。異步I/O特性:
●
無鎖隊(duì)列實(shí)現(xiàn)
●
可配置的I/O depth,能夠使得針對數(shù)據(jù)庫不同的I/O類型進(jìn)行精確時(shí)延控制
● polling adaptive,減少CPU消耗
2.4 原子寫
為了保證數(shù)據(jù)庫頁寫出的時(shí)候不出現(xiàn)partial write,DBFS實(shí)現(xiàn)了原子寫功能?;贒BFS的Innodb,可以安全的將double write buffer關(guān)掉,從而使得在存計(jì)分離下數(shù)據(jù)庫帶寬節(jié)省100%。
另外,如PostgreSQL使用的是buffer I/O,也避免了PG在dirty page flush時(shí)偶發(fā)性遇到的缺頁問題。
2.5 Online Resize
為了避免擴(kuò)容而帶來的數(shù)據(jù)遷移,DBFS結(jié)合底層盤古實(shí)現(xiàn)volume的在線resize。DBFS有自己的bitmap allocator,用于實(shí)現(xiàn)底層存儲(chǔ)空間的管理。我們對bitmap allocator進(jìn)行了優(yōu)化,在文件系統(tǒng)層級做到了lock free的resize,使得上層業(yè)務(wù)可以在任何時(shí)候進(jìn)行對業(yè)務(wù)無損的高效擴(kuò)容,完全優(yōu)于傳統(tǒng)的ext4文件系統(tǒng)。
Online Resize的支持,避免了存儲(chǔ)空間的浪費(fèi),因?yàn)椴挥胷eserve如20%的存儲(chǔ)空間了,可以做到隨擴(kuò)隨寫。
以下為擴(kuò)容時(shí)的bitmap變化過程:
2.6 TCP與RDMA互切
RDMA在集團(tuán)數(shù)據(jù)庫大規(guī)模的引入使用也是一個(gè)非常大的風(fēng)險(xiǎn)點(diǎn),DBFS與盤古一起實(shí)現(xiàn)了RDMA與TCP互切的功能,并在全鏈路過程中進(jìn)行了互換演練,使得RDMA的風(fēng)險(xiǎn)在可控的范圍內(nèi),穩(wěn)定性保障更加完善。
另外,DBFS,盤古以及網(wǎng)絡(luò)團(tuán)隊(duì),針對RDMA進(jìn)行了非常多的容量水位壓測,故障演練等工作,為業(yè)界最大規(guī)模RDMA上線做了非常充足的準(zhǔn)備。
2.7 2018年大促部署
在做到了技術(shù)上的突破和攻關(guān)后,DBFS最終完成艱巨的任務(wù)通過大促全鏈路的考驗(yàn)以及雙“十一”大考,再次驗(yàn)證了存儲(chǔ)計(jì)算分離的可行性和整體技術(shù)趨勢。
三、存儲(chǔ)中臺(tái)利器DBFS
除了以上做為文件系統(tǒng)必須實(shí)現(xiàn)的功能以外,DBFS還實(shí)現(xiàn)了諸多的特性,使得業(yè)務(wù)使用DBFS更加的通用化,更加易用性,更加穩(wěn)定以及安全。
3.1 技術(shù)沉淀與賦能
我們將所有的技術(shù)創(chuàng)新和功能以產(chǎn)品的形式沉淀在DBFS中,使得DBFS能夠賦能更多的業(yè)務(wù)實(shí)現(xiàn)以用戶態(tài)的形式訪問不同的底層存儲(chǔ)介質(zhì),賦能更多數(shù)據(jù)庫實(shí)現(xiàn)存儲(chǔ)計(jì)算分離。
3.1.1 POSIX兼容
目前為了支撐數(shù)據(jù)庫業(yè)務(wù),我們兼容了大多數(shù)常用的POSIX文件接口,以方便上層數(shù)據(jù)庫業(yè)務(wù)的對接。另外也實(shí)現(xiàn)了page cache,異步I/O以及原子寫等,為數(shù)據(jù)庫業(yè)務(wù)提供豐富的I/O能力。另外,我們也實(shí)現(xiàn)了glibc的接口,用于支持文件流的操作和處理。這兩種接口的支持,大大簡化了數(shù)據(jù)庫接入的復(fù)雜度,增加了DBFS易用性,使得DBFS可以支撐更多的數(shù)據(jù)庫業(yè)務(wù)。
posix部分大家比較熟悉就不再列出,以下僅為部分glibc接口供參考:
// glibc interface
FILE *fopen(constchar*path,constchar*mode);
FILE *fdopen(int fildes,constchar*mode);
size_t fread(void*ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(constvoid*ptr, size_t size, size_t nmemb, FILE *stream);
intfflush(FILE *stream);
intfclose(FILE *stream);
intfileno(FILE *stream);
intfeof(FILE *stream);
intferror(FILE *stream);
voidclearerr(FILE *stream);
intfseeko(FILE *stream, off_t offset,int whence);
intfseek(FILE *stream,long offset,int whence);
off_t ftello(FILE *stream);
longftell(FILE *stream);
voidrewind(FILE *stream);
3.1.2 Fuse實(shí)現(xiàn)
另外,為了兼容Linux生態(tài)我們實(shí)現(xiàn)了fuse,打通VFS的交互。Fuse的引入使得用戶在不考慮極致性能的情況下,可以不需要任何代碼改動(dòng)而接入DBFS,大大提高產(chǎn)品的易用性。另外,也大大方便了傳統(tǒng)的運(yùn)維操作。
3.1.3 服務(wù)化能力
DBFS自研了shmQ組件,基于內(nèi)享內(nèi)存的IPC通信,從而拉通了對于PostgreSQL基于進(jìn)程架構(gòu)和MySQL基于線程架構(gòu)的支持,使得DBFS更加的通用化和安全,為以后在線升級提供堅(jiān)實(shí)的基礎(chǔ)。
shmQ基于無鎖實(shí)現(xiàn),性能和吞吐表現(xiàn)優(yōu)異,從目前測試來看,在16K等數(shù)據(jù)庫大頁下能控制在幾個(gè)us以內(nèi)的訪問時(shí)延。服務(wù)化以及多進(jìn)程架構(gòu)的支持,目前性能與穩(wěn)定性符合預(yù)期。
3.1.4 集群文件系統(tǒng)
集群功能是DBFS的又一大明顯特性,賦能數(shù)據(jù)庫基于shared-disk模式,實(shí)現(xiàn)計(jì)算資源的線性擴(kuò)展,為業(yè)務(wù)節(jié)省存儲(chǔ)成本。另外,shared-disk的模式也為數(shù)據(jù)庫提供了快速的彈性能力,也大大提高了主備快速切換的SLA。集群文件系統(tǒng)提供一寫多讀以及多點(diǎn)寫入的能力,為數(shù)據(jù)庫shared-disk和shared nothing架構(gòu)打下堅(jiān)實(shí)的基礎(chǔ)。與傳統(tǒng)的OCFS相比,我們在用戶態(tài)實(shí)現(xiàn),性能更好,更加自主可控。OCFS嚴(yán)重依賴于Linux的VFS,如沒有獨(dú)立的page cache等。
DBFS 支持一寫多讀模式時(shí),提供多種角色可選(M/S),可以存在一個(gè)M節(jié)點(diǎn)多個(gè)S節(jié)點(diǎn)使用共享數(shù)據(jù),M 節(jié)點(diǎn)和S節(jié)點(diǎn)共同訪問盤古數(shù)據(jù)。上層數(shù)據(jù)庫對M/S節(jié)點(diǎn)進(jìn)行了限制,M節(jié)點(diǎn)的數(shù)據(jù)訪問是可讀可寫的,S節(jié)點(diǎn)的數(shù)據(jù)訪問是只讀的。如果主庫發(fā)生故障,就會(huì)進(jìn)行切換。主從切換步驟:
●
業(yè)務(wù)監(jiān)控指標(biāo)探測發(fā)現(xiàn)M 節(jié)點(diǎn)出現(xiàn)無法訪問或者異常的時(shí)候,進(jìn)行決策,是否要進(jìn)行切換。
●
如果發(fā)生切換,由管控平臺(tái)發(fā)起切換命令,切換命令完成,代表DBFS和上層數(shù)據(jù)庫都已經(jīng)完成角色切換。
●
在DBFS 切換的過程中,最主要的動(dòng)作就是IO fence,禁止掉原本的M節(jié)點(diǎn)IO能力,防止雙寫情況。
DBFS在多點(diǎn)寫入時(shí),對所有節(jié)點(diǎn)進(jìn)行全局的metalock控制,blockgroup allocation優(yōu)化等。另外也會(huì)涉及到基于disk的quorum算法等,內(nèi)容比較復(fù)雜,暫不做詳細(xì)陳述。
3.2 軟硬件結(jié)合
隨著新存儲(chǔ)介質(zhì)的出現(xiàn),數(shù)據(jù)庫勢必需要借其發(fā)揮更好的性能或者更低成本優(yōu)化,并且做到對底層存儲(chǔ)介質(zhì)的自主可控。
從Intel對存儲(chǔ)介質(zhì)的規(guī)劃來看,從性能到容量,會(huì)形成AEP,Optane和SSD這三種產(chǎn)品,而在向大容量方向上,又會(huì)有QLC的出現(xiàn)。所以綜合性能和成本來看,我們覺得Optane是一個(gè)比較不錯(cuò)的cache產(chǎn)品。我們選擇它作為DBFS 機(jī)頭持久化filecache的實(shí)現(xiàn)。
3.2.1 持久化file cache
DBFS實(shí)現(xiàn)了基于Optane的local持久化cache功能,使得在存計(jì)分離下更近一步提升數(shù)據(jù)庫的讀寫性能。File cache為了達(dá)到生產(chǎn)可用性,做了非常多的工作,如:
●
穩(wěn)定可靠的故障處理
●
支持動(dòng)態(tài)enable和disable
●
支持負(fù)載均衡
●
支持性能指標(biāo)采集和展示
●
支持?jǐn)?shù)據(jù)正確性scrub
這些功能的支撐,為線上穩(wěn)定性打下堅(jiān)實(shí)的基礎(chǔ)。其中,針對Optane的I/O為SPDK的純用戶態(tài)技術(shù),DBFS結(jié)合Fusion Engine的vhost實(shí)現(xiàn)。File Cache的頁大小可以根據(jù)上層數(shù)據(jù)庫的block大小進(jìn)行最佳配置,以達(dá)到最好的效果。
以下為file cache的架構(gòu)圖:
以下是測試所得讀寫性能收益數(shù)據(jù):
其中帶有“cache”的為基于filecache所得。整體表現(xiàn)隨著命中率提高,讀時(shí)延開始下降。另外,我們針對file cache,進(jìn)行了諸多性能指標(biāo)的監(jiān)控。
3.2.2 Open Channel SSD
X-Engine和DBFS以及Fusion Engine團(tuán)隊(duì)展開合作,基于object SSD進(jìn)一步打造存儲(chǔ)自主可控的系統(tǒng)。在降低SSD磨損,提高SSD吞吐,降低讀寫相互干擾等領(lǐng)域,進(jìn)行了深度探索與實(shí)踐,都取得了非常不錯(cuò)的效果。目前已經(jīng)結(jié)合X-Engine的分層存儲(chǔ)策略,打通了讀寫路徑,我們期待下一步更加深入的智能化存儲(chǔ)研發(fā)。
四、總結(jié)與展望
2018年DBFS已經(jīng)大規(guī)模支持了X-DB以存儲(chǔ)計(jì)算分離形態(tài)支持“11.11”大促;與此同時(shí)也賦能ADS實(shí)現(xiàn)一寫多讀能力以及Tair等。
在支持業(yè)務(wù)的同時(shí),DBFS本身已經(jīng)拉通了PG進(jìn)程與MySQL線程架構(gòu)的支持,打通了VFS接口,做到了與Linux生態(tài)的兼容,成為真正意義上的存儲(chǔ)中臺(tái)級產(chǎn)品——集群用戶態(tài)文件系統(tǒng)。未來結(jié)合更多的軟硬件結(jié)合、分層存儲(chǔ)、NVMeoF等技術(shù)賦能更多的數(shù)據(jù)庫,實(shí)現(xiàn)其更大的價(jià)值。
本文作者:呂健
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。