文|智能相對(duì)論 InfoQ 萬(wàn)佳
從傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)到云數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)在不斷演進(jìn)。與此同時(shí),它也發(fā)揮著越來(lái)越重要的作用。從云計(jì)算、新媒體、音視頻、云游戲到移動(dòng) App,幾乎各行各業(yè)都離不開(kāi)數(shù)據(jù)庫(kù)。一方面,數(shù)據(jù)庫(kù)作為 IT 基礎(chǔ)設(shè)施的關(guān)鍵一環(huán),對(duì)企業(yè)業(yè)務(wù)的發(fā)展起著支撐作用;另一方面,數(shù)字化在經(jīng)濟(jì)社會(huì)中不斷深入,數(shù)據(jù)成為核心要素,圍繞數(shù)據(jù)的生產(chǎn)、存儲(chǔ)和消費(fèi)均依賴數(shù)據(jù)庫(kù)。
圖源IDC行業(yè)報(bào)告
IDC 報(bào)告顯示,數(shù)據(jù)庫(kù)、AI、大數(shù)據(jù)三者消耗了最多的 IT 基礎(chǔ)設(shè)施資源,并且在所有類型的工作負(fù)載中增長(zhǎng)最快。由此可見(jiàn),數(shù)據(jù)庫(kù)已經(jīng)成為云中最重要的工作負(fù)載之一。
隨著企業(yè)數(shù)字化轉(zhuǎn)型的深入,業(yè)務(wù)與數(shù)據(jù)的關(guān)系越來(lái)越緊密,數(shù)據(jù)庫(kù)市場(chǎng)呈現(xiàn)蓬勃發(fā)展之勢(shì)。根據(jù) IDC 預(yù)測(cè),到 2024 年,中國(guó)關(guān)系型數(shù)據(jù)庫(kù)軟件市場(chǎng)規(guī)模將達(dá)到 38.2 億美元,未來(lái) 5 年整體市場(chǎng)年復(fù)合增長(zhǎng)率為 23.3%。
除市場(chǎng)快速發(fā)展外,數(shù)據(jù)庫(kù)自身也在變化。云計(jì)算的出現(xiàn)和發(fā)展,讓企業(yè) IT 基礎(chǔ)設(shè)施云化,應(yīng)用轉(zhuǎn)向云端。與此同時(shí),從單體到微服務(wù)架構(gòu)再到 Serverless 架構(gòu),系統(tǒng)架構(gòu)不斷演進(jìn)。這一方面為用戶提供了更優(yōu)秀的特性,另一方面也對(duì)云計(jì)算的組件提出更高要求。作為云計(jì)算關(guān)鍵技術(shù)和最基礎(chǔ)的組件之一,數(shù)據(jù)庫(kù)也需要適應(yīng)這種架構(gòu)變化。云數(shù)據(jù)庫(kù)應(yīng)運(yùn)而生。
“數(shù)據(jù)庫(kù)+云”還是“云+數(shù)據(jù)庫(kù)”?
云計(jì)算自 2006 年出現(xiàn)后,隨著企業(yè)上云進(jìn)程的加速,傳統(tǒng)數(shù)據(jù)庫(kù)逐漸從私有部署轉(zhuǎn)化為云上部署,但變化主要集中在部署模式的不同,并未充分利用云計(jì)算理論為大數(shù)據(jù)技術(shù)本身賦能。而云原生概念的興起,讓數(shù)據(jù)庫(kù)迎來(lái)重大變革,云原生數(shù)據(jù)庫(kù)開(kāi)始成為行業(yè)“主角”。
經(jīng)久不衰的關(guān)系型數(shù)據(jù)庫(kù)
眾所周知,數(shù)據(jù)庫(kù)起源于 20 世紀(jì) 60 年代。在 70 年代,關(guān)系型數(shù)據(jù)庫(kù)誕生,并成為沿用至今的數(shù)據(jù)庫(kù)存儲(chǔ)計(jì)算系統(tǒng)。即使隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,大數(shù)據(jù)技術(shù)的廣泛應(yīng)用,涌現(xiàn)出越來(lái)越多新型數(shù)據(jù)庫(kù),但關(guān)系型數(shù)據(jù)庫(kù)依舊占據(jù)主導(dǎo)地位。
據(jù) DB-Engines 統(tǒng)計(jì),截至 2020 年 5 月,在收錄的 357 種數(shù)據(jù)庫(kù)中,關(guān)系型數(shù)據(jù)庫(kù)占比高達(dá) 75.2%。它之所以能經(jīng)久不衰,是因?yàn)槠錆M足數(shù)據(jù)庫(kù)的 ACID 特性,能幫助應(yīng)用開(kāi)發(fā)且簡(jiǎn)化應(yīng)用開(kāi)發(fā)的復(fù)雜性。同時(shí),它采用 SQL 標(biāo)準(zhǔn),業(yè)務(wù)人員很容易看懂開(kāi)發(fā)人員寫的代碼,代碼可讀性和可維護(hù)性非常強(qiáng),降低了溝通成本。
在云計(jì)算出現(xiàn)前,關(guān)系型數(shù)據(jù)庫(kù)通常采用本地部署方式(On-Premises),其中,商業(yè)數(shù)據(jù)庫(kù)代表有 Oracle、Microsoft SQL Server、IBM Db2,開(kāi)源數(shù)據(jù)庫(kù)代表則是 MySQL、PostgreSQL。那時(shí),大多數(shù)企業(yè)都是自行采購(gòu)硬件和租用 IDC。除服務(wù)器外,機(jī)柜、交換機(jī)、網(wǎng)絡(luò)配置和軟件安裝等底層很多事情都需要專業(yè)人士負(fù)責(zé)。數(shù)據(jù)庫(kù)方面,只有資金充裕的大企業(yè)(如電信、金融等)主要用 Oracle、IBM DB2 等商業(yè)關(guān)系型數(shù)據(jù)庫(kù),它們的特點(diǎn)是性能強(qiáng)大、穩(wěn)定性好,但價(jià)格貴、維護(hù)成本高。
傳統(tǒng)數(shù)據(jù)庫(kù)架構(gòu)依賴于高端硬件,每套數(shù)據(jù)庫(kù)系統(tǒng)服務(wù)器少、架構(gòu)相對(duì)簡(jiǎn)單,且無(wú)法支持新業(yè)務(wù)的擴(kuò)展需求。如果想提升性能,主要靠采用配置更高、更先進(jìn)的硬件。當(dāng)然,這樣的機(jī)器也更昂貴。
除了擴(kuò)展性差,傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)還面臨一些挑戰(zhàn):一是部署成本高,維護(hù)難度大;二是由于私有化部署,數(shù)據(jù)庫(kù)內(nèi)核迭代升級(jí)比較緩慢。并且,它無(wú)法應(yīng)對(duì)高并發(fā)讀寫。像以 Web 2.0 為代表的網(wǎng)站,其數(shù)據(jù)庫(kù)負(fù)載非常高,本地部署的傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)往往無(wú)法應(yīng)對(duì)每秒上萬(wàn)次的讀寫請(qǐng)求,硬盤 I/O 成為性能瓶頸。
云計(jì)算興起,關(guān)系型數(shù)據(jù)庫(kù)演化到云托管關(guān)系型數(shù)據(jù)庫(kù)
云計(jì)算出現(xiàn)后,傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)遇到的問(wèn)題部分得到緩解。借助 IaaS,企業(yè)開(kāi)始將傳統(tǒng)數(shù)據(jù)庫(kù)“搬遷”到云上,因此出現(xiàn)了云托管關(guān)系型數(shù)據(jù)庫(kù),云廠商稱之為 RDS 服務(wù),如 Amazon RDS、阿里云 RDS 等。
與傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)相比,云托管關(guān)系型數(shù)據(jù)庫(kù)在外部交互層面上,保持了和傳統(tǒng)“原版”數(shù)據(jù)庫(kù)幾乎完全一致的編程接口和使用體驗(yàn)。在搭建、運(yùn)維和管理層面,云托管關(guān)系型數(shù)據(jù)庫(kù)門檻更低,對(duì)用戶更友好,且實(shí)現(xiàn)了相當(dāng)程度的智能化和自動(dòng)化。許多在傳統(tǒng)數(shù)據(jù)庫(kù)中需借額外工具或產(chǎn)品的功能,在云托管關(guān)系型數(shù)據(jù)庫(kù)中默認(rèn)內(nèi)置,開(kāi)箱即用。本質(zhì)上,云托管是將原本部署于 IDC 機(jī)房?jī)?nèi)物理服務(wù)器(也可能是虛擬出來(lái)的服務(wù)器)上的傳統(tǒng)數(shù)據(jù)庫(kù)軟件部署在云主機(jī)上。
圖由作者繪制
以 Amazon RDS 為例。其架構(gòu)類似在底層的數(shù)據(jù)庫(kù)上構(gòu)建了一個(gè)中間層。這個(gè)中間層負(fù)責(zé)路由客戶端的 SQL 請(qǐng)求發(fā)往實(shí)際的數(shù)據(jù)庫(kù)存儲(chǔ)節(jié)點(diǎn)。因?yàn)閷I(yè)務(wù)端的請(qǐng)求通過(guò)中間層代理,所以可對(duì)底層的數(shù)據(jù)庫(kù)實(shí)例進(jìn)行很多運(yùn)維工作。這些工作由于隱藏在中間層后邊,業(yè)務(wù)層可以做到基本無(wú)感知。另外,這個(gè)中間路由層基本只是簡(jiǎn)單的轉(zhuǎn)發(fā)請(qǐng)求,所以底層可以連接各種類型的數(shù)據(jù)庫(kù)。其缺點(diǎn)在于,它本質(zhì)上還是一個(gè)單機(jī)主從架構(gòu),無(wú)法適用超過(guò)最大配置物理機(jī)容量、CPU 負(fù)載和 IO 的場(chǎng)景。尤其是移動(dòng)互聯(lián)網(wǎng)時(shí)代,很多企業(yè)業(yè)務(wù)快速增長(zhǎng),數(shù)據(jù)庫(kù)并發(fā)量越來(lái)越高,也愈加重視可擴(kuò)展性。
云托管關(guān)系型數(shù)據(jù)庫(kù)雖然能部分實(shí)現(xiàn)“彈性”與“自愈”,但是這種方案存在資源利用率低、維護(hù)成本高、可用性低等問(wèn)題。
以阿里云為例,阿里 PolarDB 之所以會(huì)誕生,原因之一是阿里云數(shù)據(jù)庫(kù)團(tuán)隊(duì)在業(yè)務(wù)中遇到很大挑戰(zhàn):它們?cè)谠粕暇S護(hù)了龐大的 MySQL 云服務(wù)(RDS)集群,包含成千上萬(wàn)個(gè)實(shí)例,面臨很多棘手問(wèn)題:
- 云服務(wù)一般使用云硬盤,導(dǎo)致數(shù)據(jù)庫(kù)的性能沒(méi)物理機(jī)實(shí)例好,比如 I/O 延時(shí)過(guò)高;
- RDS 實(shí)例集群很大,可能同時(shí)有很多實(shí)例在備份,從而占用云服務(wù)巨大的網(wǎng)絡(luò)和 I/O 帶寬,導(dǎo)致云服務(wù)不穩(wěn)定;
- 大實(shí)例恢復(fù)需重建時(shí),耗時(shí)太長(zhǎng),影響服務(wù)可用性;
- 對(duì)需要讀寫分離,且要求部署多個(gè)只讀節(jié)點(diǎn)的用戶,最明顯的感覺(jué)是每增加一個(gè)只讀實(shí)例,成本是線性增長(zhǎng)。
針對(duì)這些問(wèn)題,可選解決方案是基于共享存儲(chǔ),即數(shù)據(jù)庫(kù)共享存儲(chǔ)方案:RDS 實(shí)例(一般指一主一從的高可用實(shí)例)和只讀實(shí)例共享同一份數(shù)據(jù)。好處是實(shí)例故障或只讀擴(kuò)展時(shí),不用拷貝數(shù)據(jù),只需新建只讀計(jì)算節(jié)點(diǎn)或把故障節(jié)點(diǎn)重新拉起來(lái)。并且,通過(guò)快照技術(shù)和寫時(shí)拷貝解決數(shù)據(jù)備份和誤操作恢復(fù)問(wèn)題。不過(guò),業(yè)內(nèi)可用的共享存儲(chǔ)方案非常少,即使可用,性能也達(dá)不到要求。
因此,想解決云托管關(guān)系型數(shù)據(jù)庫(kù)服務(wù)面臨的問(wèn)題,必須改變思路,從架構(gòu)入手。
架構(gòu)“革命”,云原生數(shù)據(jù)庫(kù)出現(xiàn)
要知道,過(guò)去三四十年,傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)架構(gòu)并未發(fā)生很大改變。
圖源亞馬遜云科技博客
雖然在數(shù)據(jù)庫(kù)擴(kuò)展方面存在不同的常規(guī)方法(如分區(qū)、無(wú)共享或共享磁盤等),但這些方法都基于同樣的基本數(shù)據(jù)庫(kù)架構(gòu)。
正如亞馬遜云科技在博客中寫道:“這些方法無(wú)法解決大規(guī)模性能、彈性和爆炸半徑問(wèn)題,因?yàn)閲?yán)密耦合型整體式堆棧的基本局限性依然存在?!?/p>
為解決云托管關(guān)系型數(shù)據(jù)庫(kù)面臨的問(wèn)題,適應(yīng)云特性的云原生數(shù)據(jù)庫(kù)就此誕生。云原生數(shù)據(jù)庫(kù)完全為云設(shè)計(jì),能充分發(fā)揮云的特點(diǎn)和優(yōu)勢(shì)。
具體說(shuō)來(lái),云原生數(shù)據(jù)庫(kù)有三大特點(diǎn):第一,計(jì)算、存儲(chǔ)分離,由于對(duì)存儲(chǔ)與計(jì)算進(jìn)行解耦合,實(shí)現(xiàn)了存儲(chǔ)與計(jì)算分離;第二,無(wú)狀態(tài),計(jì)算節(jié)點(diǎn)無(wú)狀態(tài)或較少狀態(tài);第三,存儲(chǔ)節(jié)點(diǎn)靈巧化,因采用小存儲(chǔ)塊方式組織副本,用以減少平均恢復(fù)時(shí)間,多副本共識(shí)算法,實(shí)現(xiàn)存儲(chǔ)的高可用與故障“自愈”能力。
目前,業(yè)內(nèi)云原生數(shù)據(jù)庫(kù)的代表有亞馬遜云科技 Aurora、阿里 PolarDB、Azure CosmosDB、騰訊 TDSQL-C 等。
從上述各種云原生數(shù)據(jù)庫(kù)的實(shí)踐和發(fā)展來(lái)看,我們總結(jié)出數(shù)據(jù)庫(kù)技術(shù)的幾個(gè)發(fā)展趨勢(shì):第一,從 scale up 到 scale out。打個(gè)比方,這就像從傳統(tǒng)火車到動(dòng)車一樣,scale out 不僅可以降低用戶 TCO,而且該架構(gòu)可以支撐系統(tǒng)擴(kuò)展。尤其是如今的網(wǎng)絡(luò)已經(jīng)從百兆邁向 100G、200G,協(xié)議從 socket 邁向 RDMA,因此 scale out 架構(gòu)已經(jīng)完全成為可能。其次,從物理機(jī)到云原生。正如英特爾大數(shù)據(jù)首席工程師程從超所言,“我們?cè)瓉?lái)的數(shù)據(jù)庫(kù)從物理機(jī)逐步走向云平臺(tái),充分利用云平臺(tái)底層的分布式存儲(chǔ),以及計(jì)算資源池、存儲(chǔ)資源池的無(wú)限擴(kuò)展能力,讓數(shù)據(jù)庫(kù)關(guān)注上層業(yè)務(wù)邏輯,與云平臺(tái)充分地結(jié)合,形成云原生。”第三,從計(jì)算存儲(chǔ)分離到邏輯和執(zhí)行引擎分離,走向 Serverless 架構(gòu)。好處在于 CPU 可以動(dòng)態(tài)擴(kuò)展或縮容,為用戶提供 on demand 服務(wù)。第四,數(shù)據(jù)計(jì)算將放在內(nèi)存里,數(shù)據(jù)存儲(chǔ)可能采用塊存儲(chǔ)、對(duì)象存儲(chǔ)。這樣,在計(jì)算過(guò)程中,避免和底層存儲(chǔ)“打交道”。最后是 AIOps。通過(guò) AI 技術(shù)自動(dòng)的對(duì)前端業(yè)務(wù)系統(tǒng)進(jìn)行調(diào)優(yōu)。這可以在提高性能的同時(shí),降低成本、預(yù)防 IT 事故,并提高業(yè)務(wù)的敏捷性。
發(fā)揮極致性能,云原生數(shù)據(jù)庫(kù)的創(chuàng)新實(shí)踐
如今人工智能、低代碼、即時(shí)數(shù)據(jù)分析等技術(shù)的加速創(chuàng)新意味著云上工作負(fù)載日趨多元化、動(dòng)態(tài)化。如何應(yīng)對(duì)這種變化,對(duì)云原生數(shù)據(jù)庫(kù)是非常大的考驗(yàn)。
在架構(gòu)設(shè)計(jì)上,現(xiàn)有云原生數(shù)據(jù)庫(kù)最顯著的特點(diǎn)是將原本一體運(yùn)行的數(shù)據(jù)庫(kù)拆解,讓計(jì)算、存儲(chǔ)資源完全解耦,使用分布式云存儲(chǔ)替代本地存儲(chǔ),將計(jì)算層變成無(wú)狀態(tài)。云原生數(shù)據(jù)庫(kù)將承載每層服務(wù)的資源池化,獨(dú)立、實(shí)時(shí)地伸縮資源池的大小,以匹配實(shí)時(shí)的工作負(fù)載,使得資源利用率最大化。
圖由作者繪制
如上圖所示,大部分云原生數(shù)據(jù)庫(kù)將 SQL 語(yǔ)句解析、物理計(jì)劃執(zhí)行、事務(wù)處理等都放在一層,統(tǒng)稱為計(jì)算層。而將事務(wù)產(chǎn)生的日志、數(shù)據(jù)的存儲(chǔ)放在共享存儲(chǔ)層,統(tǒng)稱為存儲(chǔ)層。在存儲(chǔ)層,數(shù)據(jù)采用多副本確保數(shù)據(jù)的可靠性,并通過(guò) Raft 等協(xié)議保證數(shù)據(jù)的一致性。由此可見(jiàn),高性能的分布式存儲(chǔ)是云原生數(shù)據(jù)庫(kù)實(shí)現(xiàn)的關(guān)鍵。
此外,計(jì)算節(jié)點(diǎn)與存儲(chǔ)節(jié)點(diǎn)之間采用高速網(wǎng)絡(luò)互聯(lián),并通過(guò) RDMA 協(xié)議傳輸數(shù)據(jù),讓 I/O 性能不再成為瓶頸。值得注意的是,Amazon Aurora 并未使用 RDMA。
除架構(gòu)外,云原生數(shù)據(jù)庫(kù)還需要與硬件搭配,軟硬協(xié)同,才能發(fā)揮出最大潛力。新硬件的發(fā)展為數(shù)據(jù)庫(kù)技術(shù)注入了更多的可能性,充分發(fā)揮硬件性能成了所有數(shù)據(jù)庫(kù)系統(tǒng)提升效率的重要手段。云原生數(shù)據(jù)庫(kù)拆解了計(jì)算、存儲(chǔ),并利用網(wǎng)絡(luò)發(fā)揮分布式的能力,在這三個(gè)層面都充分結(jié)合新硬件的特性進(jìn)行設(shè)計(jì)。
通過(guò)騰訊云 TDSQL-C 的實(shí)踐,我們可以深入了解云原生數(shù)據(jù)庫(kù)的創(chuàng)新思路。
TDSQL-C 是騰訊云自研的新一代云原生關(guān)系型數(shù)據(jù)庫(kù),采用計(jì)算和存儲(chǔ)分離的架構(gòu),所有計(jì)算節(jié)點(diǎn)共享一份數(shù)據(jù),存儲(chǔ)容量高達(dá) 128TB,單庫(kù)最高可擴(kuò)展至 16 節(jié)點(diǎn),提供秒級(jí)的配置升降級(jí)、秒級(jí)的故障恢復(fù)和數(shù)據(jù)備份容災(zāi)服務(wù),兼具商用的性能和穩(wěn)定性以及開(kāi)源的靈活和低成本。
大體上,TDSQL-C 核心技術(shù)創(chuàng)新表現(xiàn)在兩方面:一方面是架構(gòu)創(chuàng)新,另一方面是性能優(yōu)化。
TDSQL-C 云原生架構(gòu)(圖由作者繪制)
在架構(gòu)上,TDSQL-C 存算分離,把計(jì)算層和存儲(chǔ)層進(jìn)行解耦,做分層處理,分層過(guò)后通過(guò)池化讓計(jì)算、存儲(chǔ)的能力變得無(wú)限大。存算分離后,存儲(chǔ)可以使用集群化的云存儲(chǔ),大大提升存儲(chǔ)上限,計(jì)算資源可以跨實(shí)例、跨物理機(jī)調(diào)度,按需使用,彈性大大增加。
其次,TDSQL-C 共享存儲(chǔ)。如上圖所示,傳統(tǒng)上,Master 和 RO 雖然對(duì)應(yīng)的是同一份數(shù)據(jù),但實(shí)際存儲(chǔ)時(shí)有六份數(shù)據(jù)。而每增加一個(gè) RO 節(jié)點(diǎn),就會(huì)多出三份數(shù)據(jù),這也讓整個(gè)集群的存儲(chǔ)副本數(shù)近一步放大。并且,高吞吐的數(shù)量使網(wǎng)絡(luò)問(wèn)題成為瓶頸,在共享存儲(chǔ)側(cè)也有大量網(wǎng)絡(luò)浪費(fèi)。而 TDSQL-C 采用共享存儲(chǔ)方式,如下圖所示,Master 和 RO 是基于一份數(shù)據(jù)放在共享存儲(chǔ)中,RO 只從共享存儲(chǔ)中讀取所需的 page,不需要寫入存儲(chǔ),并且 RO 可以從主庫(kù)接收 WAL 在緩存中重放,以此保持緩存中 Page 持續(xù)更新。如此,TDSQL-C 就解決了業(yè)務(wù)容量和計(jì)算節(jié)點(diǎn)的擴(kuò)容問(wèn)題。
圖源InfoQ官網(wǎng)
第三,TDSQL-C 使用“l(fā)og is database”方案,把一部分?jǐn)?shù)據(jù)庫(kù)計(jì)算邏輯下沉到存儲(chǔ)層完成, 實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)傳輸減少 90%+,計(jì)算層資源更聚焦于 SQL 處理,提升系統(tǒng)性能,分布式刷臟基本上規(guī)避 BP 刷臟的影響,加快了系統(tǒng)啟動(dòng)速度。
除了架構(gòu)創(chuàng)新,TDSQL-C 在性能優(yōu)化方面,不僅很好地利用云原生數(shù)據(jù)庫(kù)自身特點(diǎn),而且充分結(jié)合英特爾產(chǎn)品和技術(shù),實(shí)現(xiàn)極致性能。
具體而言,騰訊云 TDSQL-C 團(tuán)隊(duì)首次深入底層軟件的設(shè)計(jì)層面,利用英特爾 oneAPI 收集軟件運(yùn)行過(guò)程中的函數(shù)開(kāi)銷等,通過(guò)反饋優(yōu)化技術(shù)進(jìn)行再編譯。這樣,TDSQL-C 性能得到進(jìn)一步提升,在大部分用戶場(chǎng)景下都有更好的效果,甚至在某個(gè)方面,性能提升可以達(dá)到 85%。
在這個(gè)過(guò)程中,英特爾 oneAPI 發(fā)揮著重要作用。作為一種開(kāi)放、統(tǒng)一的編程模型,oneAPI 用于 CPU 和加速器,并支持多個(gè)廠商的計(jì)算機(jī)架構(gòu)。
其次,為優(yōu)化讀取性能和寫入性能,騰訊云 TDSQL-C 團(tuán)隊(duì)基于英特爾傲騰持久化內(nèi)存設(shè)計(jì)了一個(gè)二級(jí)緩存方案,因?yàn)橛捎?jì)算和存儲(chǔ)分離帶來(lái)的遠(yuǎn)程 I/O 成為不小的挑戰(zhàn)。同時(shí),根據(jù)數(shù)據(jù)溫度,智能存儲(chǔ)分層:熱數(shù)據(jù)放在內(nèi)存,冷數(shù)據(jù)放在磁盤。在使用傲騰持久化內(nèi)存后,團(tuán)隊(duì)重新定義溫?cái)?shù)據(jù),實(shí)行低冗余度存儲(chǔ)。在計(jì)算節(jié)點(diǎn),通過(guò)對(duì)溫?cái)?shù)據(jù)進(jìn)行緩存,團(tuán)隊(duì)極大提高了數(shù)據(jù)庫(kù)在 IO 密集型場(chǎng)景下的訪問(wèn)速度。
圖由作者繪制
如上圖所示,TDSQL-C 團(tuán)隊(duì)在遠(yuǎn)程存儲(chǔ)和 buffer pool 之間實(shí)現(xiàn)了二級(jí)緩存層,它使用本地存儲(chǔ)介質(zhì)。從 buffer pool 中淘汰的頁(yè)面緩存在該層——實(shí)際上并非淘汰,而是把從buffer pool 移出的數(shù)據(jù)緩存到本地的 SSD存儲(chǔ)或AEP存儲(chǔ)。下次訪問(wèn)該數(shù)據(jù)時(shí),滿足一定的條件下,可以直接從本地讀取,這樣就能最大限度地降低網(wǎng)絡(luò) I/O 的消耗。
通過(guò)與 英特爾 技術(shù)團(tuán)隊(duì)的聯(lián)合創(chuàng)新,結(jié)合最新一代英特爾? 至強(qiáng)? 可擴(kuò)展處理器以及英特爾? 傲騰? 持久內(nèi)存(PMem)的硬件特性,TDSQL-C 團(tuán)隊(duì)重構(gòu)了二級(jí)緩存設(shè)計(jì)方案,在IO bound 場(chǎng)景中的讀寫性能提升2倍以上。
同時(shí),TDSQL-C 團(tuán)隊(duì)攜手英特爾多方位優(yōu)化存儲(chǔ)方案設(shè)計(jì),如加入輪詢、算法優(yōu)化、消除鎖等機(jī)制,優(yōu)化存儲(chǔ)引擎等,并引入由英特爾提供的 SPDK 開(kāi)發(fā)套件,優(yōu)化 NVMe 固態(tài)盤的 IOPS 和時(shí)延性能。并且,對(duì)網(wǎng)絡(luò)架構(gòu)全面升級(jí),TDSQL-C 新版本采用全鏈路 RDMA 網(wǎng)絡(luò),依靠零拷貝、內(nèi)核旁路、無(wú) CPU 干預(yù)等特性,進(jìn)一步優(yōu)化了存儲(chǔ)層與計(jì)算層以及存儲(chǔ)層多副本間關(guān)鍵路徑的系統(tǒng)性能,降低請(qǐng)求延遲最高達(dá) 80%,使 I/O 性能不再成為瓶頸。
簡(jiǎn)言之,TDSQL-C 新版本對(duì)云原生數(shù)據(jù)庫(kù)場(chǎng)景進(jìn)行了大量?jī)?yōu)化,極大提升了數(shù)據(jù)庫(kù)性能,能更好地滿足企業(yè)對(duì)數(shù)據(jù)庫(kù)性能的極致追求。
從騰訊云與英特爾合作的創(chuàng)新實(shí)踐中,我們發(fā)現(xiàn)未來(lái)的數(shù)據(jù)庫(kù)將步入全棧優(yōu)化時(shí)代,從硬件平臺(tái)優(yōu)化到架構(gòu)層優(yōu)化再到上面的應(yīng)用層優(yōu)化。所謂“軟件優(yōu)化三年不如硬件更新一代”,比如算力上,一定是充分利用 CPU 最底層的指令集和最新的加速器。據(jù)悉,最新的英特爾? 至強(qiáng)? 可擴(kuò)展處理器(Sapphire Rapids)一代,已經(jīng)從單純的提高主頻和增加核數(shù)逐步走向更多的加速器,包括 QAT 和 SGX 以及 DSA 等。在英特爾大數(shù)據(jù)首席工程師程從超看來(lái),這些新的加速器會(huì)對(duì)數(shù)據(jù)庫(kù)的整個(gè)優(yōu)化設(shè)計(jì)帶來(lái)很大的影響,這也是未來(lái)需要充分重視的。
以硬件到基礎(chǔ)設(shè)施的優(yōu)化為例,算力優(yōu)化方面,需采用最新的處理器和最新的軟件版本,并選擇高主頻的核。同時(shí),還要避免 NUMA,即非一致性內(nèi)存訪問(wèn),因?yàn)樗鼘?duì)數(shù)據(jù)庫(kù)的性能影響較大。并且,可以充分利用底層 CPU 最新的指令集,如 SIMD。在存儲(chǔ)優(yōu)化方面,實(shí)行數(shù)據(jù)封層存放,把 redo log 和 binlog 等日志存儲(chǔ)在低延時(shí)設(shè)備上,以及通過(guò) PMEM 在物理存儲(chǔ)(HDD、SSD、NAND)和內(nèi)存間增加一個(gè) cache 層,作為應(yīng)用的熱數(shù)據(jù)存儲(chǔ),從而擴(kuò)展內(nèi)容容量,彌補(bǔ)存儲(chǔ)性能。為進(jìn)一步優(yōu)化存儲(chǔ),企業(yè)還可以利用 LSM 的多版本管理機(jī)制增強(qiáng)系統(tǒng)的性能。網(wǎng)絡(luò)優(yōu)化上,可以采用 ADQ,通過(guò) SPDK/DPDK 等技術(shù)提高網(wǎng)絡(luò)性能,繞過(guò) kernel space 的性能瓶頸。
寫在最后
隨著數(shù)字化不斷發(fā)展,數(shù)據(jù)的價(jià)值正不斷顯現(xiàn)。毫無(wú)疑問(wèn),圍繞數(shù)據(jù)的生產(chǎn)、存儲(chǔ)和消費(fèi)構(gòu)成的系列服務(wù),將成為數(shù)字經(jīng)濟(jì)社會(huì)的核心價(jià)值鏈條,而其背后的支撐正是數(shù)據(jù)庫(kù)。這也意味著,數(shù)據(jù)庫(kù)將比以前發(fā)揮更大的作用。
從傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)到云托管關(guān)系型數(shù)據(jù)庫(kù)再到云原生數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)不斷變革。我們看到,當(dāng)企業(yè)業(yè)務(wù)從本地到上云再到原生發(fā)展時(shí),云原生數(shù)據(jù)庫(kù)也將成為云時(shí)代數(shù)據(jù)庫(kù)的主角之一。作為支撐企業(yè)業(yè)務(wù)的關(guān)鍵 IT 基礎(chǔ)設(shè)施,云原生數(shù)據(jù)庫(kù)只有發(fā)揮出最大的價(jià)值,才能推動(dòng)業(yè)務(wù)發(fā)展。而這需要不斷創(chuàng)新,不僅是先進(jìn)的架構(gòu)設(shè)計(jì),而且與其他前沿的軟硬件產(chǎn)品和技術(shù)搭配,軟硬協(xié)同,從而實(shí)現(xiàn)最佳效用。