一、 POLARDB產(chǎn)品架構(gòu)簡介
POLARDB是阿里云數(shù)據(jù)庫團(tuán)隊(duì)研發(fā)的基于第三代云計(jì)算架構(gòu)下的商用關(guān)系型云數(shù)據(jù)庫產(chǎn)品,實(shí)現(xiàn)100%向下兼容MySQL5.6的同時(shí),支持單庫容量擴(kuò)展至上百TB以及計(jì)算引擎能力及存儲(chǔ)能力的秒級(jí)擴(kuò)展能力,對(duì)比MySQL有6倍性能提升及相對(duì)于商業(yè)數(shù)據(jù)庫實(shí)現(xiàn)大幅度降低成本。
第三代分布式共享存儲(chǔ)架構(gòu)究竟有什么優(yōu)勢(shì)?
圖為POLARDB的第三代分布式共享存儲(chǔ)架構(gòu)
首先,受益于第三代分布式共享存儲(chǔ)架構(gòu),使POLARDB實(shí)現(xiàn)了計(jì)算節(jié)點(diǎn)(主要做SQL解析以及存儲(chǔ)引擎計(jì)算的服務(wù)器)與存儲(chǔ)節(jié)點(diǎn)(主要做數(shù)據(jù)塊存儲(chǔ),數(shù)據(jù)庫快照的服務(wù)器)的分離,提供了即時(shí)生效的可擴(kuò)展能力和運(yùn)維能力。
眾所周知,在傳統(tǒng)數(shù)據(jù)庫上做擴(kuò)容、備份和遷移等操作,花費(fèi)的時(shí)間和數(shù)據(jù)庫的容量成正比,往往上TB的數(shù)據(jù)庫容量加個(gè)只讀副本就需要一到兩天時(shí)間。POLARDB的存儲(chǔ)容量可以實(shí)現(xiàn)無縫擴(kuò)展,不管數(shù)據(jù)量有多大,2分鐘內(nèi)即可實(shí)現(xiàn)只讀副本擴(kuò)容,1分鐘內(nèi)即可實(shí)現(xiàn)全量備份,為企業(yè)的快速業(yè)務(wù)發(fā)展提供了彈性擴(kuò)展能力。
其次,與傳統(tǒng)云數(shù)據(jù)庫一個(gè)實(shí)例一份數(shù)據(jù)拷貝不同,POLARDB同一個(gè)實(shí)例的所有節(jié)點(diǎn)(包括讀寫節(jié)點(diǎn)和只讀節(jié)點(diǎn))都實(shí)現(xiàn)訪問存儲(chǔ)節(jié)點(diǎn)上的同一份數(shù)據(jù),使得POLARDB的數(shù)據(jù)備份耗時(shí)實(shí)現(xiàn)秒級(jí)響應(yīng)。(備份時(shí)間與底層數(shù)據(jù)量無關(guān))
最后,借助優(yōu)秀的RDMA網(wǎng)絡(luò)以及最新的塊存儲(chǔ)技術(shù),實(shí)現(xiàn)服務(wù)器宕機(jī)后無需搬運(yùn)數(shù)據(jù)重啟進(jìn)程即可服務(wù),滿足了互聯(lián)網(wǎng)環(huán)境下企業(yè)對(duì)數(shù)據(jù)庫服務(wù)器高可用的需求。
二、為什么POLARDB能做到6倍于MySQL的性能?
這里我們將分別以存儲(chǔ)性能、計(jì)算性能來進(jìn)行解讀詮釋。
圖為阿里云POLARDB性能全景
1.POLARDB的存儲(chǔ)引擎性能優(yōu)化
持續(xù)釋放硬件紅利
眾所周知,關(guān)系型數(shù)據(jù)庫是IO密集型的應(yīng)用,IO性能的提高對(duì)數(shù)據(jù)庫的性能提升至關(guān)重要。過去十年我們看到在數(shù)據(jù)庫領(lǐng)域,SSD替換HDD的過程給數(shù)據(jù)庫數(shù)據(jù)處理的吞吐能力帶來了數(shù)量級(jí)的提升。
POLARDB采用了領(lǐng)先的硬件技術(shù):包括使用3DXpoint存儲(chǔ)介質(zhì)的Optane存儲(chǔ)卡、NVMeSSD和RoCE RDMA網(wǎng)絡(luò)。同時(shí)面向新硬件架構(gòu)實(shí)現(xiàn)軟硬一體優(yōu)化:從數(shù)據(jù)庫、文件系統(tǒng)到網(wǎng)絡(luò)通訊協(xié)議、分布式存儲(chǔ)系統(tǒng)和設(shè)備驅(qū)動(dòng),POLARDB實(shí)現(xiàn)縱貫軟件棧各層次的整個(gè)IO鏈條的深度優(yōu)化。
為了將3DXpoint顆粒的高性能和3D NAND顆粒的低成本結(jié)合起來,POLARDB創(chuàng)新的在軟件層實(shí)現(xiàn)對(duì)高速的Optane卡和大容量高吞吐的NVMeSSD進(jìn)行組合,實(shí)現(xiàn)一個(gè)名為混合存儲(chǔ)層。既保證數(shù)據(jù)寫入的低延遲、高吞吐、高QoS,又使整體方案兼具較高的性價(jià)比。
旁路內(nèi)核,榨干硬件能力
在POLARDB里,為了追求更高的性能、更低的延遲,阿里云數(shù)據(jù)庫團(tuán)隊(duì)大膽的拋棄了Linux內(nèi)核提供的各種機(jī)制,比如塊設(shè)備、各種文件系統(tǒng)例如ext4,以及TCP/IP協(xié)議棧和socket編程接口而選擇了另起爐灶。最終,POLARDB實(shí)現(xiàn)了一整套在用戶態(tài)運(yùn)行的IO和網(wǎng)絡(luò)協(xié)議棧。
POLARDB用戶態(tài)協(xié)議棧解決了內(nèi)核IO協(xié)議棧慢的問題。用戶程序在用戶態(tài)直接通過DMA操作硬件設(shè)備,通過輪詢的方式監(jiān)聽硬件設(shè)備完成IO事件,消除了上下文切換和中斷的開銷。用戶程序還可以將IO處理線程和cpu進(jìn)行一一映射,每個(gè)IO處理線程獨(dú)占CPU,相互之間處理不同的IO請(qǐng)求,綁定不同的IO設(shè)備硬件隊(duì)列,一個(gè)IO請(qǐng)求生命周期從頭到尾都在一個(gè)線程一顆CPU上處理,不需要鎖進(jìn)行互斥。這種技術(shù)實(shí)現(xiàn)最大化的和高速設(shè)備進(jìn)行性能交互,實(shí)現(xiàn)一顆CPU達(dá)每秒約20萬次IO處理的能力,并且保持線性的擴(kuò)展能力,也就意味著4顆CPU可以達(dá)到每秒80萬次IO處理的能力,在性能和經(jīng)濟(jì)型上遠(yuǎn)高于內(nèi)核。
網(wǎng)絡(luò)也是類似的情況。過去傳統(tǒng)的以太網(wǎng),網(wǎng)卡發(fā)一個(gè)報(bào)文到另一臺(tái)機(jī)器,中間通過一跳交換機(jī),大概需要一百到兩百微秒。POLARDB支持ROCE以太網(wǎng),應(yīng)用程序通過RDMA網(wǎng)絡(luò),直接將本機(jī)的內(nèi)存寫入另一臺(tái)機(jī)器的內(nèi)存地址,或者從另一臺(tái)機(jī)器的內(nèi)存讀一塊數(shù)據(jù)到本機(jī),中間的通訊協(xié)議編解碼、重傳機(jī)制都由RDMA網(wǎng)卡來完成,不需要CPU參與,使性能獲得極大提升,傳輸一個(gè)4k大小報(bào)文只需要6、7微秒的時(shí)間。如同內(nèi)核的IO協(xié)議棧跟不上高速存儲(chǔ)設(shè)備能力,再一次的,內(nèi)核的TCP/IP協(xié)議棧跟不上高速網(wǎng)絡(luò)設(shè)備能力,被POLARDB的用戶態(tài)網(wǎng)絡(luò)協(xié)議棧代替。