POLARDB中物理復(fù)制的性能至關(guān)重要,我們不僅通過基于數(shù)據(jù)頁維度的并行提高了性能,還對復(fù)制中的必要流程進(jìn)行了優(yōu)化,例如在MTR日志中增加了一個(gè)長度字段,從而減少了日志Parse階段的CPU開銷,這個(gè)簡單的優(yōu)化就能減少60%的日志Parse時(shí)間。我們還通過復(fù)用Dummy Index的內(nèi)存數(shù)據(jù)結(jié)構(gòu),減少了其在Malloc/Free上的開銷,進(jìn)一步提高復(fù)制性能。
讀節(jié)點(diǎn)性能
POLARDB的Replica節(jié)點(diǎn),日志目前是一批一批應(yīng)用的,因此當(dāng)新的一批日志被應(yīng)用之前,Replica上的讀請求不需要重復(fù)創(chuàng)建新的ReadView,可以使用上次緩存下來的。這個(gè)優(yōu)化也能提高Replica上的讀性能。
三、為什么POLARDB能做到遠(yuǎn)低于商業(yè)數(shù)據(jù)庫的成本
存儲資源池化
POLARDB采用了一種計(jì)算和存儲分離的架構(gòu),DB運(yùn)行在計(jì)算節(jié)點(diǎn),計(jì)算節(jié)點(diǎn)組成了一個(gè)計(jì)算資源池,數(shù)據(jù)都放在存儲節(jié)點(diǎn)上,存儲節(jié)點(diǎn)組成了一個(gè)存儲資源池。如果CPU和內(nèi)存不夠了,就擴(kuò)充計(jì)算資源池,如果容量或者IOPS不夠了,就擴(kuò)充存儲資源池,兩個(gè)池子都是按需擴(kuò)容。而且存儲節(jié)點(diǎn)和計(jì)算節(jié)點(diǎn)可以分別向兩個(gè)方向優(yōu)化,存儲節(jié)點(diǎn)會選擇低配的CPU和內(nèi)存,提高存儲密度,而計(jì)算節(jié)點(diǎn)可以選擇小容量、低配的SSD作為操作系統(tǒng)和日志盤,上多路服務(wù)器增加CPU的核數(shù)。
而傳統(tǒng)的數(shù)據(jù)庫部署模型則是一種煙囪模型,一臺主機(jī)既跑數(shù)據(jù)庫又存數(shù)據(jù),這帶來兩個(gè)問題。一個(gè)是機(jī)型難以選擇,CPU和磁盤的配比主要取決于實(shí)際業(yè)務(wù)的需求,很難提前找到最優(yōu)比例。第二是磁盤碎片問題,一個(gè)生產(chǎn)集群里,總有部分機(jī)器磁盤使用率是很低的,有的還不到10%,但出于業(yè)務(wù)穩(wěn)定性要求,會要求獨(dú)占主機(jī)的CPU,這些機(jī)器上的SSD其實(shí)是被浪費(fèi)的。通過存儲資源池化,這兩個(gè)問題都能得到解決,SSD的利用率得到提高,成本自然也降低下來。
透明壓縮
POLARDB的存儲節(jié)點(diǎn)除了對ibd文件提供1MB的原子寫,消除double write的開銷,還支持對ibd文件的數(shù)據(jù)塊進(jìn)行透明壓縮,壓縮率可以達(dá)到2.4倍,進(jìn)一步降低了存儲成本。
而傳統(tǒng)數(shù)據(jù)庫在DB內(nèi)進(jìn)行壓縮的方案相比,存儲節(jié)點(diǎn)實(shí)現(xiàn)透明壓縮不消耗計(jì)算節(jié)點(diǎn)的CPU,不影響DB的性能,利用QAT卡進(jìn)行加速,以及在IO路徑上用FPGA進(jìn)行加速。POLARDB的存儲節(jié)點(diǎn)還支持快照去重(dedup)功能,數(shù)據(jù)庫的相鄰快照之間,如果頁面沒有發(fā)生修改,會鏈接到同一份只讀頁面上,物理上只會存儲一份。
存儲成本的只讀實(shí)例
傳統(tǒng)數(shù)據(jù)庫做只讀實(shí)例,實(shí)施一寫多讀方案,是通過搭建只讀副本的方案,先拷貝一個(gè)最近的全量備份恢復(fù)一個(gè)臨時(shí)實(shí)例,再讓這個(gè)臨時(shí)實(shí)例連接主庫或者其他binlog源同步增量數(shù)據(jù),增量追上后,把這個(gè)臨時(shí)實(shí)例加到線上升級為一個(gè)只讀副本。這種方法一個(gè)是耗時(shí),搭建一個(gè)只讀實(shí)例需要的時(shí)間與數(shù)據(jù)量成正比;另一方面也很昂貴,需要增加一份存儲成本,比如用戶購買一個(gè)主實(shí)例加上五個(gè)只讀實(shí)例,需要付7~8份存儲的錢(7份還是8份取決于主實(shí)例是兩副本還是三副本)。
而在PolarDB架構(gòu)中,這兩個(gè)問題都得到解決,一方面新增只讀實(shí)例不需要拷貝數(shù)據(jù),不管數(shù)據(jù)量有多大都可以在2分鐘內(nèi)創(chuàng)建出來;另一方面,主實(shí)例和只讀實(shí)例共享同一份存儲資源,通過這種架構(gòu)去增加只讀副本,可以做到零新增存儲成本,用戶只需要支付只讀實(shí)例消耗的CPU和內(nèi)存的費(fèi)用。
POLARDB是未來云數(shù)據(jù)庫的雛形(All in one),一個(gè)數(shù)據(jù)庫即可滿足現(xiàn)時(shí)多類數(shù)據(jù)庫混合使用效果。阿里云發(fā)揮自身自研能力優(yōu)勢,以POLARDB為產(chǎn)品契機(jī),實(shí)現(xiàn)數(shù)據(jù)庫OLTP與OLAP的一體化設(shè)計(jì),為企業(yè)的數(shù)字化升級所需的IT設(shè)施架構(gòu)實(shí)現(xiàn)革命性進(jìn)化。