隨著云計(jì)算和大數(shù)據(jù)時(shí)代的深入發(fā)展,企業(yè)對(duì)數(shù)據(jù)庫(kù)的性能、擴(kuò)展性、可靠性和成本效益提出了前所未有的高要求。傳統(tǒng)數(shù)據(jù)庫(kù)架構(gòu),尤其是基于本地存儲(chǔ)的共享存儲(chǔ)架構(gòu),在應(yīng)對(duì)海量數(shù)據(jù)、高并發(fā)訪問(wèn)及彈性伸縮需求時(shí),常常面臨瓶頸。阿里云推出的云原生數(shù)據(jù)庫(kù)PolarDB,通過(guò)創(chuàng)新的“計(jì)算與存儲(chǔ)分離”架構(gòu)和自研的分布式共享存儲(chǔ)系統(tǒng)PolarFS,為這些挑戰(zhàn)提供了優(yōu)雅的解決方案。本文上篇將聚焦于PolarDB的整體數(shù)據(jù)處理流程及其底層核心——存儲(chǔ)支持服務(wù)PolarFS的實(shí)現(xiàn)機(jī)制。
一、PolarDB概述:云原生數(shù)據(jù)庫(kù)的架構(gòu)革新
PolarDB是阿里云自主研發(fā)的云原生關(guān)系型數(shù)據(jù)庫(kù),100%兼容MySQL、PostgreSQL和Oracle引擎。其最核心的創(chuàng)新在于采用了“計(jì)算與存儲(chǔ)分離”的架構(gòu)。在此架構(gòu)下:
- 計(jì)算層(數(shù)據(jù)庫(kù)引擎節(jié)點(diǎn)):由多個(gè)讀寫節(jié)點(diǎn)(RW)和只讀節(jié)點(diǎn)(RO)組成,它們是無(wú)狀態(tài)的,主要負(fù)責(zé)SQL解析、優(yōu)化、執(zhí)行、事務(wù)處理等計(jì)算任務(wù)。計(jì)算節(jié)點(diǎn)可以根據(jù)業(yè)務(wù)負(fù)載動(dòng)態(tài)彈性擴(kuò)縮容。
- 存儲(chǔ)層:由一個(gè)跨多個(gè)物理服務(wù)器的、高性能的分布式共享存儲(chǔ)集群構(gòu)成。所有計(jì)算節(jié)點(diǎn)都通過(guò)高速網(wǎng)絡(luò)(如RDMA)訪問(wèn)同一份存儲(chǔ)數(shù)據(jù),實(shí)現(xiàn)了數(shù)據(jù)的強(qiáng)一致性和共享。
- 日志即數(shù)據(jù)(Log is Data):PolarDB摒棄了傳統(tǒng)數(shù)據(jù)庫(kù)中將數(shù)據(jù)頁(yè)(Page)作為同步單元的模式,轉(zhuǎn)而將重做日志(Redo Log)作為主同步介質(zhì)。存儲(chǔ)層直接接收并持久化來(lái)自主節(jié)點(diǎn)的Redo Log,并在后臺(tái)異步地將其應(yīng)用(回放)到數(shù)據(jù)頁(yè)上。這極大地減少了主節(jié)點(diǎn)與存儲(chǔ)層之間、以及主從節(jié)點(diǎn)之間的數(shù)據(jù)傳輸量,降低了主節(jié)點(diǎn)的寫延遲和負(fù)載。
這種分離架構(gòu)帶來(lái)了顯著優(yōu)勢(shì):存儲(chǔ)容量可獨(dú)立、無(wú)縫擴(kuò)展至百TB級(jí)別;計(jì)算節(jié)點(diǎn)快速?gòu)椥陨炜s(分鐘級(jí)增加只讀實(shí)例);存儲(chǔ)按實(shí)際使用量計(jì)費(fèi),成本更低;并通過(guò)多副本機(jī)制保障了數(shù)據(jù)的高可靠性與高可用性。
二、數(shù)據(jù)處理流程:從SQL到持久化存儲(chǔ)
在PolarDB中,一條寫事務(wù)(如INSERT/UPDATE)的生命周期清晰地體現(xiàn)了其架構(gòu)優(yōu)勢(shì):
- SQL處理:主計(jì)算節(jié)點(diǎn)接收SQL請(qǐng)求,經(jīng)過(guò)解析、優(yōu)化后,在內(nèi)存中執(zhí)行數(shù)據(jù)修改,生成對(duì)應(yīng)的Redo Log記錄(描述數(shù)據(jù)的變化,而非數(shù)據(jù)頁(yè)本身)。
- 日志下沉(Log Sink):主節(jié)點(diǎn)不是將修改后的臟數(shù)據(jù)頁(yè)刷盤,而是將生成的Redo Log通過(guò)高效網(wǎng)絡(luò)協(xié)議批量、并行地發(fā)送到后端的PolarFS存儲(chǔ)集群。這個(gè)過(guò)程是同步的,確保日志持久化后事務(wù)才算提交成功,保證了持久性(Durability)。
- 存儲(chǔ)層持久化與應(yīng)用:PolarFS接收Redo Log,首先將其持久化寫入到多副本的日志存儲(chǔ)系統(tǒng)中。存儲(chǔ)層內(nèi)部的“日志回放服務(wù)”會(huì)異步地將這些Redo Log應(yīng)用到對(duì)應(yīng)的數(shù)據(jù)頁(yè)上,生成新的數(shù)據(jù)頁(yè)版本。數(shù)據(jù)頁(yè)以“寫時(shí)復(fù)制(Copy-on-Write)”方式更新,舊版本得以保留,這天然支持了快速快照功能,是備份、克隆等操作的基礎(chǔ)。
- 只讀節(jié)點(diǎn)數(shù)據(jù)同步:只讀節(jié)點(diǎn)(RO)不與存儲(chǔ)層進(jìn)行復(fù)雜的數(shù)據(jù)頁(yè)同步。它們只需從存儲(chǔ)層(或主節(jié)點(diǎn))獲取最新的Redo Log,并在本地內(nèi)存中回放,即可獲得與主節(jié)點(diǎn)一致的數(shù)據(jù)視圖。這避免了從主節(jié)點(diǎn)復(fù)制大量數(shù)據(jù)頁(yè)帶來(lái)的網(wǎng)絡(luò)和I/O開銷,使得只讀節(jié)點(diǎn)的添加幾乎不影響主節(jié)點(diǎn)性能,實(shí)現(xiàn)了近乎線性的擴(kuò)展。
三、核心基石:PolarFS分布式共享存儲(chǔ)系統(tǒng)
PolarFS是支撐PolarDB“計(jì)算與存儲(chǔ)分離”架構(gòu)的自研高性能分布式文件系統(tǒng),它是整個(gè)系統(tǒng)的數(shù)據(jù)持久化基石。其設(shè)計(jì)目標(biāo)是為數(shù)據(jù)庫(kù)負(fù)載提供極低延遲、高吞吐、強(qiáng)一致和高可用的塊存儲(chǔ)服務(wù)。
1. 架構(gòu)設(shè)計(jì)
PolarFS采用分層架構(gòu):
- 客戶端(ChunkServer Client):嵌入在每個(gè)數(shù)據(jù)庫(kù)計(jì)算節(jié)點(diǎn)中,以用戶態(tài)文件系統(tǒng)(FUSE)或內(nèi)核模塊形式存在,提供標(biāo)準(zhǔn)的POSIX文件接口(如pwrite/pread)。它負(fù)責(zé)處理I/O請(qǐng)求的路由、緩存和協(xié)議編解碼。
- 元數(shù)據(jù)服務(wù)(ChunkMaster):管理整個(gè)文件系統(tǒng)的命名空間、文件到數(shù)據(jù)塊(Chunk)的映射關(guān)系、以及數(shù)據(jù)塊副本的位置信息。它本身是高可用的集群。
- 數(shù)據(jù)存儲(chǔ)服務(wù)(ChunkServer):負(fù)責(zé)實(shí)際數(shù)據(jù)塊(通常為幾十MB大小)的存儲(chǔ)。數(shù)據(jù)塊以多副本(通常為3副本)形式分布在不同的物理服務(wù)器上,通過(guò)Raft共識(shí)協(xié)議保證副本間的一致性。
2. 關(guān)鍵技術(shù)創(chuàng)新
為了實(shí)現(xiàn)數(shù)據(jù)庫(kù)所需的極致I/O性能,PolarFS集成了多項(xiàng)尖端技術(shù):
- RDMA高速網(wǎng)絡(luò):計(jì)算節(jié)點(diǎn)與存儲(chǔ)節(jié)點(diǎn)之間、存儲(chǔ)節(jié)點(diǎn)內(nèi)部廣泛使用RDMA(遠(yuǎn)程直接內(nèi)存訪問(wèn))技術(shù)進(jìn)行通信。RDMA允許數(shù)據(jù)繞過(guò)操作系統(tǒng)內(nèi)核和CPU,直接從一臺(tái)機(jī)器的內(nèi)存?zhèn)鬏數(shù)搅硪慌_(tái)機(jī)器的內(nèi)存,大幅降低了網(wǎng)絡(luò)延遲和CPU開銷。這是實(shí)現(xiàn)低延遲同步寫日志的關(guān)鍵。
- 用戶態(tài)I/O棧(Bypass Kernel):傳統(tǒng)的文件系統(tǒng)I/O路徑需要經(jīng)過(guò)內(nèi)核,存在上下文切換和內(nèi)存拷貝的開銷。PolarFS的客戶端運(yùn)行在用戶態(tài),通過(guò)SPDK(存儲(chǔ)性能開發(fā)工具包)等技術(shù)直接訪問(wèn)NVMe SSD等硬件,實(shí)現(xiàn)了從應(yīng)用到存儲(chǔ)介質(zhì)的“零拷貝”短路徑,顯著提升I/O效率。
- 并行復(fù)制與一致性協(xié)議優(yōu)化:針對(duì)數(shù)據(jù)庫(kù)寫日志的順序、小塊、高并發(fā)特點(diǎn),PolarFS優(yōu)化了數(shù)據(jù)復(fù)制流程。它支持將小I/O合并后并行復(fù)制到多個(gè)副本,并利用RDMA進(jìn)行流水線式傳輸,在保證強(qiáng)一致性的前提下,最大化寫吞吐量。
- 智能I/O調(diào)度與本地性感知:PolarFS能夠感知數(shù)據(jù)塊的分布,并智能地將I/O請(qǐng)求路由到最近的或負(fù)載最輕的副本。對(duì)于讀請(qǐng)求,尤其是只讀節(jié)點(diǎn)的讀,可以優(yōu)先從本地或同可用區(qū)的副本讀取,減少網(wǎng)絡(luò)延遲。
小結(jié)
阿里云PolarDB通過(guò)將“計(jì)算與存儲(chǔ)分離”與“日志即數(shù)據(jù)”理念深度融合,重構(gòu)了云數(shù)據(jù)庫(kù)的架構(gòu)范式。其上半部分——數(shù)據(jù)處理流程,高效地將數(shù)據(jù)庫(kù)計(jì)算與持久化存儲(chǔ)解耦;而下半部分——由PolarFS提供的共享存儲(chǔ)支持服務(wù),則通過(guò)RDMA、用戶態(tài)I/O棧等前沿技術(shù),為上述架構(gòu)提供了堅(jiān)實(shí)、高性能、彈性的存儲(chǔ)底盤。正是這兩者的協(xié)同創(chuàng)新,使得PolarDB能夠在提供企業(yè)級(jí)功能與兼容性的在彈性、擴(kuò)展性、性價(jià)比上獲得突破性進(jìn)展。在下篇中,我們將進(jìn)一步深入分析PolarDB在高可用、彈性擴(kuò)展、備份恢復(fù)等高級(jí)功能上的具體技術(shù)實(shí)現(xiàn)。