正在閱讀:

數(shù)據(jù)庫“變調”:云原生數(shù)據(jù)庫如何實現(xiàn)架構“再創(chuàng)新”?

掃一掃下載界面新聞APP

數(shù)據(jù)庫“變調”:云原生數(shù)據(jù)庫如何實現(xiàn)架構“再創(chuàng)新”?

數(shù)據(jù)庫“煥然新生”:架構視角下,云原生數(shù)據(jù)庫的創(chuàng)新實踐。

圖片來源:Unsplash-Kevin Ku

文|智能相對論 InfoQ 萬佳

從傳統(tǒng)關系型數(shù)據(jù)庫到云數(shù)據(jù)庫,數(shù)據(jù)庫在不斷演進。與此同時,它也發(fā)揮著越來越重要的作用。從云計算、新媒體、音視頻、云游戲到移動 App,幾乎各行各業(yè)都離不開數(shù)據(jù)庫。一方面,數(shù)據(jù)庫作為 IT 基礎設施的關鍵一環(huán),對企業(yè)業(yè)務的發(fā)展起著支撐作用;另一方面,數(shù)字化在經(jīng)濟社會中不斷深入,數(shù)據(jù)成為核心要素,圍繞數(shù)據(jù)的生產(chǎn)、存儲和消費均依賴數(shù)據(jù)庫。

圖源IDC行業(yè)報告

IDC 報告顯示,數(shù)據(jù)庫、AI、大數(shù)據(jù)三者消耗了最多的 IT 基礎設施資源,并且在所有類型的工作負載中增長最快。由此可見,數(shù)據(jù)庫已經(jīng)成為云中最重要的工作負載之一。

隨著企業(yè)數(shù)字化轉型的深入,業(yè)務與數(shù)據(jù)的關系越來越緊密,數(shù)據(jù)庫市場呈現(xiàn)蓬勃發(fā)展之勢。根據(jù) IDC 預測,到 2024 年,中國關系型數(shù)據(jù)庫軟件市場規(guī)模將達到 38.2 億美元,未來 5 年整體市場年復合增長率為 23.3%。

除市場快速發(fā)展外,數(shù)據(jù)庫自身也在變化。云計算的出現(xiàn)和發(fā)展,讓企業(yè) IT 基礎設施云化,應用轉向云端。與此同時,從單體到微服務架構再到 Serverless 架構,系統(tǒng)架構不斷演進。這一方面為用戶提供了更優(yōu)秀的特性,另一方面也對云計算的組件提出更高要求。作為云計算關鍵技術和最基礎的組件之一,數(shù)據(jù)庫也需要適應這種架構變化。云數(shù)據(jù)庫應運而生。

“數(shù)據(jù)庫+云”還是“云+數(shù)據(jù)庫”?

云計算自 2006 年出現(xiàn)后,隨著企業(yè)上云進程的加速,傳統(tǒng)數(shù)據(jù)庫逐漸從私有部署轉化為云上部署,但變化主要集中在部署模式的不同,并未充分利用云計算理論為大數(shù)據(jù)技術本身賦能。而云原生概念的興起,讓數(shù)據(jù)庫迎來重大變革,云原生數(shù)據(jù)庫開始成為行業(yè)“主角”。

經(jīng)久不衰的關系型數(shù)據(jù)庫

眾所周知,數(shù)據(jù)庫起源于 20 世紀 60 年代。在 70 年代,關系型數(shù)據(jù)庫誕生,并成為沿用至今的數(shù)據(jù)庫存儲計算系統(tǒng)。即使隨著移動互聯(lián)網(wǎng)的發(fā)展,大數(shù)據(jù)技術的廣泛應用,涌現(xiàn)出越來越多新型數(shù)據(jù)庫,但關系型數(shù)據(jù)庫依舊占據(jù)主導地位。

據(jù) DB-Engines 統(tǒng)計,截至 2020 年 5 月,在收錄的 357 種數(shù)據(jù)庫中,關系型數(shù)據(jù)庫占比高達 75.2%。它之所以能經(jīng)久不衰,是因為其滿足數(shù)據(jù)庫的 ACID 特性,能幫助應用開發(fā)且簡化應用開發(fā)的復雜性。同時,它采用 SQL 標準,業(yè)務人員很容易看懂開發(fā)人員寫的代碼,代碼可讀性和可維護性非常強,降低了溝通成本。

在云計算出現(xiàn)前,關系型數(shù)據(jù)庫通常采用本地部署方式(On-Premises),其中,商業(yè)數(shù)據(jù)庫代表有 Oracle、Microsoft SQL Server、IBM Db2,開源數(shù)據(jù)庫代表則是 MySQL、PostgreSQL。那時,大多數(shù)企業(yè)都是自行采購硬件和租用 IDC。除服務器外,機柜、交換機、網(wǎng)絡配置和軟件安裝等底層很多事情都需要專業(yè)人士負責。數(shù)據(jù)庫方面,只有資金充裕的大企業(yè)(如電信、金融等)主要用 Oracle、IBM DB2 等商業(yè)關系型數(shù)據(jù)庫,它們的特點是性能強大、穩(wěn)定性好,但價格貴、維護成本高。

傳統(tǒng)數(shù)據(jù)庫架構依賴于高端硬件,每套數(shù)據(jù)庫系統(tǒng)服務器少、架構相對簡單,且無法支持新業(yè)務的擴展需求。如果想提升性能,主要靠采用配置更高、更先進的硬件。當然,這樣的機器也更昂貴。

除了擴展性差,傳統(tǒng)關系型數(shù)據(jù)庫還面臨一些挑戰(zhàn):一是部署成本高,維護難度大;二是由于私有化部署,數(shù)據(jù)庫內核迭代升級比較緩慢。并且,它無法應對高并發(fā)讀寫。像以 Web 2.0 為代表的網(wǎng)站,其數(shù)據(jù)庫負載非常高,本地部署的傳統(tǒng)關系型數(shù)據(jù)庫往往無法應對每秒上萬次的讀寫請求,硬盤 I/O 成為性能瓶頸。

云計算興起,關系型數(shù)據(jù)庫演化到云托管關系型數(shù)據(jù)庫

云計算出現(xiàn)后,傳統(tǒng)關系型數(shù)據(jù)庫遇到的問題部分得到緩解。借助 IaaS,企業(yè)開始將傳統(tǒng)數(shù)據(jù)庫“搬遷”到云上,因此出現(xiàn)了云托管關系型數(shù)據(jù)庫,云廠商稱之為 RDS 服務,如 Amazon RDS、阿里云 RDS 等。

與傳統(tǒng)關系型數(shù)據(jù)庫相比,云托管關系型數(shù)據(jù)庫在外部交互層面上,保持了和傳統(tǒng)“原版”數(shù)據(jù)庫幾乎完全一致的編程接口和使用體驗。在搭建、運維和管理層面,云托管關系型數(shù)據(jù)庫門檻更低,對用戶更友好,且實現(xiàn)了相當程度的智能化和自動化。許多在傳統(tǒng)數(shù)據(jù)庫中需借額外工具或產(chǎn)品的功能,在云托管關系型數(shù)據(jù)庫中默認內置,開箱即用。本質上,云托管是將原本部署于 IDC 機房內物理服務器(也可能是虛擬出來的服務器)上的傳統(tǒng)數(shù)據(jù)庫軟件部署在云主機上。

圖由作者繪制

以 Amazon RDS 為例。其架構類似在底層的數(shù)據(jù)庫上構建了一個中間層。這個中間層負責路由客戶端的 SQL 請求發(fā)往實際的數(shù)據(jù)庫存儲節(jié)點。因為將業(yè)務端的請求通過中間層代理,所以可對底層的數(shù)據(jù)庫實例進行很多運維工作。這些工作由于隱藏在中間層后邊,業(yè)務層可以做到基本無感知。另外,這個中間路由層基本只是簡單的轉發(fā)請求,所以底層可以連接各種類型的數(shù)據(jù)庫。其缺點在于,它本質上還是一個單機主從架構,無法適用超過最大配置物理機容量、CPU 負載和 IO 的場景。尤其是移動互聯(lián)網(wǎng)時代,很多企業(yè)業(yè)務快速增長,數(shù)據(jù)庫并發(fā)量越來越高,也愈加重視可擴展性。

云托管關系型數(shù)據(jù)庫雖然能部分實現(xiàn)“彈性”與“自愈”,但是這種方案存在資源利用率低、維護成本高、可用性低等問題。

以阿里云為例,阿里 PolarDB 之所以會誕生,原因之一是阿里云數(shù)據(jù)庫團隊在業(yè)務中遇到很大挑戰(zhàn):它們在云上維護了龐大的 MySQL 云服務(RDS)集群,包含成千上萬個實例,面臨很多棘手問題:

  • 云服務一般使用云硬盤,導致數(shù)據(jù)庫的性能沒物理機實例好,比如 I/O 延時過高;
  • RDS 實例集群很大,可能同時有很多實例在備份,從而占用云服務巨大的網(wǎng)絡和 I/O 帶寬,導致云服務不穩(wěn)定;
  • 大實例恢復需重建時,耗時太長,影響服務可用性;
  • 對需要讀寫分離,且要求部署多個只讀節(jié)點的用戶,最明顯的感覺是每增加一個只讀實例,成本是線性增長。

針對這些問題,可選解決方案是基于共享存儲,即數(shù)據(jù)庫共享存儲方案:RDS 實例(一般指一主一從的高可用實例)和只讀實例共享同一份數(shù)據(jù)。好處是實例故障或只讀擴展時,不用拷貝數(shù)據(jù),只需新建只讀計算節(jié)點或把故障節(jié)點重新拉起來。并且,通過快照技術和寫時拷貝解決數(shù)據(jù)備份和誤操作恢復問題。不過,業(yè)內可用的共享存儲方案非常少,即使可用,性能也達不到要求。

因此,想解決云托管關系型數(shù)據(jù)庫服務面臨的問題,必須改變思路,從架構入手。

架構“革命”,云原生數(shù)據(jù)庫出現(xiàn)

要知道,過去三四十年,傳統(tǒng)關系型數(shù)據(jù)庫架構并未發(fā)生很大改變。

圖源亞馬遜云科技博客

雖然在數(shù)據(jù)庫擴展方面存在不同的常規(guī)方法(如分區(qū)、無共享或共享磁盤等),但這些方法都基于同樣的基本數(shù)據(jù)庫架構。

正如亞馬遜云科技在博客中寫道:“這些方法無法解決大規(guī)模性能、彈性和爆炸半徑問題,因為嚴密耦合型整體式堆棧的基本局限性依然存在?!?/p>

為解決云托管關系型數(shù)據(jù)庫面臨的問題,適應云特性的云原生數(shù)據(jù)庫就此誕生。云原生數(shù)據(jù)庫完全為云設計,能充分發(fā)揮云的特點和優(yōu)勢。

具體說來,云原生數(shù)據(jù)庫有三大特點:第一,計算、存儲分離,由于對存儲與計算進行解耦合,實現(xiàn)了存儲與計算分離;第二,無狀態(tài),計算節(jié)點無狀態(tài)或較少狀態(tài);第三,存儲節(jié)點靈巧化,因采用小存儲塊方式組織副本,用以減少平均恢復時間,多副本共識算法,實現(xiàn)存儲的高可用與故障“自愈”能力。

目前,業(yè)內云原生數(shù)據(jù)庫的代表有亞馬遜云科技 Aurora、阿里 PolarDB、Azure CosmosDB、騰訊 TDSQL-C 等。

從上述各種云原生數(shù)據(jù)庫的實踐和發(fā)展來看,我們總結出數(shù)據(jù)庫技術的幾個發(fā)展趨勢:第一,從 scale up 到 scale out。打個比方,這就像從傳統(tǒng)火車到動車一樣,scale out 不僅可以降低用戶 TCO,而且該架構可以支撐系統(tǒng)擴展。尤其是如今的網(wǎng)絡已經(jīng)從百兆邁向 100G、200G,協(xié)議從 socket 邁向 RDMA,因此 scale out 架構已經(jīng)完全成為可能。其次,從物理機到云原生。正如英特爾大數(shù)據(jù)首席工程師程從超所言,“我們原來的數(shù)據(jù)庫從物理機逐步走向云平臺,充分利用云平臺底層的分布式存儲,以及計算資源池、存儲資源池的無限擴展能力,讓數(shù)據(jù)庫關注上層業(yè)務邏輯,與云平臺充分地結合,形成云原生?!钡谌瑥挠嬎愦鎯Ψ蛛x到邏輯和執(zhí)行引擎分離,走向 Serverless 架構。好處在于 CPU 可以動態(tài)擴展或縮容,為用戶提供 on demand 服務。第四,數(shù)據(jù)計算將放在內存里,數(shù)據(jù)存儲可能采用塊存儲、對象存儲。這樣,在計算過程中,避免和底層存儲“打交道”。最后是 AIOps。通過 AI 技術自動的對前端業(yè)務系統(tǒng)進行調優(yōu)。這可以在提高性能的同時,降低成本、預防 IT 事故,并提高業(yè)務的敏捷性。

發(fā)揮極致性能,云原生數(shù)據(jù)庫的創(chuàng)新實踐

如今人工智能、低代碼、即時數(shù)據(jù)分析等技術的加速創(chuàng)新意味著云上工作負載日趨多元化、動態(tài)化。如何應對這種變化,對云原生數(shù)據(jù)庫是非常大的考驗。

在架構設計上,現(xiàn)有云原生數(shù)據(jù)庫最顯著的特點是將原本一體運行的數(shù)據(jù)庫拆解,讓計算、存儲資源完全解耦,使用分布式云存儲替代本地存儲,將計算層變成無狀態(tài)。云原生數(shù)據(jù)庫將承載每層服務的資源池化,獨立、實時地伸縮資源池的大小,以匹配實時的工作負載,使得資源利用率最大化。

圖由作者繪制

如上圖所示,大部分云原生數(shù)據(jù)庫將 SQL 語句解析、物理計劃執(zhí)行、事務處理等都放在一層,統(tǒng)稱為計算層。而將事務產(chǎn)生的日志、數(shù)據(jù)的存儲放在共享存儲層,統(tǒng)稱為存儲層。在存儲層,數(shù)據(jù)采用多副本確保數(shù)據(jù)的可靠性,并通過 Raft 等協(xié)議保證數(shù)據(jù)的一致性。由此可見,高性能的分布式存儲是云原生數(shù)據(jù)庫實現(xiàn)的關鍵。

此外,計算節(jié)點與存儲節(jié)點之間采用高速網(wǎng)絡互聯(lián),并通過 RDMA 協(xié)議傳輸數(shù)據(jù),讓 I/O 性能不再成為瓶頸。值得注意的是,Amazon Aurora 并未使用 RDMA。

除架構外,云原生數(shù)據(jù)庫還需要與硬件搭配,軟硬協(xié)同,才能發(fā)揮出最大潛力。新硬件的發(fā)展為數(shù)據(jù)庫技術注入了更多的可能性,充分發(fā)揮硬件性能成了所有數(shù)據(jù)庫系統(tǒng)提升效率的重要手段。云原生數(shù)據(jù)庫拆解了計算、存儲,并利用網(wǎng)絡發(fā)揮分布式的能力,在這三個層面都充分結合新硬件的特性進行設計。

通過騰訊云 TDSQL-C 的實踐,我們可以深入了解云原生數(shù)據(jù)庫的創(chuàng)新思路。

TDSQL-C 是騰訊云自研的新一代云原生關系型數(shù)據(jù)庫,采用計算和存儲分離的架構,所有計算節(jié)點共享一份數(shù)據(jù),存儲容量高達 128TB,單庫最高可擴展至 16 節(jié)點,提供秒級的配置升降級、秒級的故障恢復和數(shù)據(jù)備份容災服務,兼具商用的性能和穩(wěn)定性以及開源的靈活和低成本。

大體上,TDSQL-C 核心技術創(chuàng)新表現(xiàn)在兩方面:一方面是架構創(chuàng)新,另一方面是性能優(yōu)化。

TDSQL-C 云原生架構(圖由作者繪制)

在架構上,TDSQL-C 存算分離,把計算層和存儲層進行解耦,做分層處理,分層過后通過池化讓計算、存儲的能力變得無限大。存算分離后,存儲可以使用集群化的云存儲,大大提升存儲上限,計算資源可以跨實例、跨物理機調度,按需使用,彈性大大增加。

其次,TDSQL-C 共享存儲。如上圖所示,傳統(tǒng)上,Master 和 RO 雖然對應的是同一份數(shù)據(jù),但實際存儲時有六份數(shù)據(jù)。而每增加一個 RO 節(jié)點,就會多出三份數(shù)據(jù),這也讓整個集群的存儲副本數(shù)近一步放大。并且,高吞吐的數(shù)量使網(wǎng)絡問題成為瓶頸,在共享存儲側也有大量網(wǎng)絡浪費。而 TDSQL-C 采用共享存儲方式,如下圖所示,Master 和 RO 是基于一份數(shù)據(jù)放在共享存儲中,RO 只從共享存儲中讀取所需的 page,不需要寫入存儲,并且 RO 可以從主庫接收 WAL 在緩存中重放,以此保持緩存中 Page 持續(xù)更新。如此,TDSQL-C 就解決了業(yè)務容量和計算節(jié)點的擴容問題。

圖源InfoQ官網(wǎng)

第三,TDSQL-C 使用“l(fā)og is database”方案,把一部分數(shù)據(jù)庫計算邏輯下沉到存儲層完成, 實現(xiàn)網(wǎng)絡數(shù)據(jù)傳輸減少 90%+,計算層資源更聚焦于 SQL 處理,提升系統(tǒng)性能,分布式刷臟基本上規(guī)避 BP 刷臟的影響,加快了系統(tǒng)啟動速度。

除了架構創(chuàng)新,TDSQL-C 在性能優(yōu)化方面,不僅很好地利用云原生數(shù)據(jù)庫自身特點,而且充分結合英特爾產(chǎn)品和技術,實現(xiàn)極致性能。

具體而言,騰訊云 TDSQL-C 團隊首次深入底層軟件的設計層面,利用英特爾 oneAPI 收集軟件運行過程中的函數(shù)開銷等,通過反饋優(yōu)化技術進行再編譯。這樣,TDSQL-C 性能得到進一步提升,在大部分用戶場景下都有更好的效果,甚至在某個方面,性能提升可以達到 85%。

在這個過程中,英特爾 oneAPI 發(fā)揮著重要作用。作為一種開放、統(tǒng)一的編程模型,oneAPI 用于 CPU 和加速器,并支持多個廠商的計算機架構。

其次,為優(yōu)化讀取性能和寫入性能,騰訊云 TDSQL-C 團隊基于英特爾傲騰持久化內存設計了一個二級緩存方案,因為由計算和存儲分離帶來的遠程 I/O 成為不小的挑戰(zhàn)。同時,根據(jù)數(shù)據(jù)溫度,智能存儲分層:熱數(shù)據(jù)放在內存,冷數(shù)據(jù)放在磁盤。在使用傲騰持久化內存后,團隊重新定義溫數(shù)據(jù),實行低冗余度存儲。在計算節(jié)點,通過對溫數(shù)據(jù)進行緩存,團隊極大提高了數(shù)據(jù)庫在 IO 密集型場景下的訪問速度。

圖由作者繪制

如上圖所示,TDSQL-C 團隊在遠程存儲和 buffer pool 之間實現(xiàn)了二級緩存層,它使用本地存儲介質。從 buffer pool 中淘汰的頁面緩存在該層——實際上并非淘汰,而是把從buffer pool 移出的數(shù)據(jù)緩存到本地的 SSD存儲或AEP存儲。下次訪問該數(shù)據(jù)時,滿足一定的條件下,可以直接從本地讀取,這樣就能最大限度地降低網(wǎng)絡 I/O 的消耗。

通過與 英特爾 技術團隊的聯(lián)合創(chuàng)新,結合最新一代英特爾? 至強? 可擴展處理器以及英特爾? 傲騰? 持久內存(PMem)的硬件特性,TDSQL-C 團隊重構了二級緩存設計方案,在IO bound 場景中的讀寫性能提升2倍以上。

同時,TDSQL-C 團隊攜手英特爾多方位優(yōu)化存儲方案設計,如加入輪詢、算法優(yōu)化、消除鎖等機制,優(yōu)化存儲引擎等,并引入由英特爾提供的 SPDK 開發(fā)套件,優(yōu)化 NVMe 固態(tài)盤的 IOPS 和時延性能。并且,對網(wǎng)絡架構全面升級,TDSQL-C 新版本采用全鏈路 RDMA 網(wǎng)絡,依靠零拷貝、內核旁路、無 CPU 干預等特性,進一步優(yōu)化了存儲層與計算層以及存儲層多副本間關鍵路徑的系統(tǒng)性能,降低請求延遲最高達 80%,使 I/O 性能不再成為瓶頸。

簡言之,TDSQL-C 新版本對云原生數(shù)據(jù)庫場景進行了大量優(yōu)化,極大提升了數(shù)據(jù)庫性能,能更好地滿足企業(yè)對數(shù)據(jù)庫性能的極致追求。

從騰訊云與英特爾合作的創(chuàng)新實踐中,我們發(fā)現(xiàn)未來的數(shù)據(jù)庫將步入全棧優(yōu)化時代,從硬件平臺優(yōu)化到架構層優(yōu)化再到上面的應用層優(yōu)化。所謂“軟件優(yōu)化三年不如硬件更新一代”,比如算力上,一定是充分利用 CPU 最底層的指令集和最新的加速器。據(jù)悉,最新的英特爾? 至強? 可擴展處理器(Sapphire Rapids)一代,已經(jīng)從單純的提高主頻和增加核數(shù)逐步走向更多的加速器,包括 QAT 和 SGX 以及 DSA 等。在英特爾大數(shù)據(jù)首席工程師程從超看來,這些新的加速器會對數(shù)據(jù)庫的整個優(yōu)化設計帶來很大的影響,這也是未來需要充分重視的。

以硬件到基礎設施的優(yōu)化為例,算力優(yōu)化方面,需采用最新的處理器和最新的軟件版本,并選擇高主頻的核。同時,還要避免 NUMA,即非一致性內存訪問,因為它對數(shù)據(jù)庫的性能影響較大。并且,可以充分利用底層 CPU 最新的指令集,如 SIMD。在存儲優(yōu)化方面,實行數(shù)據(jù)封層存放,把 redo log 和 binlog 等日志存儲在低延時設備上,以及通過 PMEM 在物理存儲(HDD、SSD、NAND)和內存間增加一個 cache 層,作為應用的熱數(shù)據(jù)存儲,從而擴展內容容量,彌補存儲性能。為進一步優(yōu)化存儲,企業(yè)還可以利用 LSM 的多版本管理機制增強系統(tǒng)的性能。網(wǎng)絡優(yōu)化上,可以采用 ADQ,通過 SPDK/DPDK 等技術提高網(wǎng)絡性能,繞過 kernel space 的性能瓶頸。

寫在最后

隨著數(shù)字化不斷發(fā)展,數(shù)據(jù)的價值正不斷顯現(xiàn)。毫無疑問,圍繞數(shù)據(jù)的生產(chǎn)、存儲和消費構成的系列服務,將成為數(shù)字經(jīng)濟社會的核心價值鏈條,而其背后的支撐正是數(shù)據(jù)庫。這也意味著,數(shù)據(jù)庫將比以前發(fā)揮更大的作用。

從傳統(tǒng)關系型數(shù)據(jù)庫到云托管關系型數(shù)據(jù)庫再到云原生數(shù)據(jù)庫,數(shù)據(jù)庫不斷變革。我們看到,當企業(yè)業(yè)務從本地到上云再到原生發(fā)展時,云原生數(shù)據(jù)庫也將成為云時代數(shù)據(jù)庫的主角之一。作為支撐企業(yè)業(yè)務的關鍵 IT 基礎設施,云原生數(shù)據(jù)庫只有發(fā)揮出最大的價值,才能推動業(yè)務發(fā)展。而這需要不斷創(chuàng)新,不僅是先進的架構設計,而且與其他前沿的軟硬件產(chǎn)品和技術搭配,軟硬協(xié)同,從而實現(xiàn)最佳效用。

本文為轉載內容,授權事宜請聯(lián)系原著作權人。

DS

4.5k
  • 默克擬收購荷蘭類器官公司HUB,預計本月底完成交易
  • 昇思開源四年,開放生態(tài)如何引領中國AI框架突圍?

評論

暫無評論哦,快來評價一下吧!

下載界面新聞

微信公眾號

微博

數(shù)據(jù)庫“變調”:云原生數(shù)據(jù)庫如何實現(xiàn)架構“再創(chuàng)新”?

數(shù)據(jù)庫“煥然新生”:架構視角下,云原生數(shù)據(jù)庫的創(chuàng)新實踐。

圖片來源:Unsplash-Kevin Ku

文|智能相對論 InfoQ 萬佳

從傳統(tǒng)關系型數(shù)據(jù)庫到云數(shù)據(jù)庫,數(shù)據(jù)庫在不斷演進。與此同時,它也發(fā)揮著越來越重要的作用。從云計算、新媒體、音視頻、云游戲到移動 App,幾乎各行各業(yè)都離不開數(shù)據(jù)庫。一方面,數(shù)據(jù)庫作為 IT 基礎設施的關鍵一環(huán),對企業(yè)業(yè)務的發(fā)展起著支撐作用;另一方面,數(shù)字化在經(jīng)濟社會中不斷深入,數(shù)據(jù)成為核心要素,圍繞數(shù)據(jù)的生產(chǎn)、存儲和消費均依賴數(shù)據(jù)庫。

圖源IDC行業(yè)報告

IDC 報告顯示,數(shù)據(jù)庫、AI、大數(shù)據(jù)三者消耗了最多的 IT 基礎設施資源,并且在所有類型的工作負載中增長最快。由此可見,數(shù)據(jù)庫已經(jīng)成為云中最重要的工作負載之一。

隨著企業(yè)數(shù)字化轉型的深入,業(yè)務與數(shù)據(jù)的關系越來越緊密,數(shù)據(jù)庫市場呈現(xiàn)蓬勃發(fā)展之勢。根據(jù) IDC 預測,到 2024 年,中國關系型數(shù)據(jù)庫軟件市場規(guī)模將達到 38.2 億美元,未來 5 年整體市場年復合增長率為 23.3%。

除市場快速發(fā)展外,數(shù)據(jù)庫自身也在變化。云計算的出現(xiàn)和發(fā)展,讓企業(yè) IT 基礎設施云化,應用轉向云端。與此同時,從單體到微服務架構再到 Serverless 架構,系統(tǒng)架構不斷演進。這一方面為用戶提供了更優(yōu)秀的特性,另一方面也對云計算的組件提出更高要求。作為云計算關鍵技術和最基礎的組件之一,數(shù)據(jù)庫也需要適應這種架構變化。云數(shù)據(jù)庫應運而生。

“數(shù)據(jù)庫+云”還是“云+數(shù)據(jù)庫”?

云計算自 2006 年出現(xiàn)后,隨著企業(yè)上云進程的加速,傳統(tǒng)數(shù)據(jù)庫逐漸從私有部署轉化為云上部署,但變化主要集中在部署模式的不同,并未充分利用云計算理論為大數(shù)據(jù)技術本身賦能。而云原生概念的興起,讓數(shù)據(jù)庫迎來重大變革,云原生數(shù)據(jù)庫開始成為行業(yè)“主角”。

經(jīng)久不衰的關系型數(shù)據(jù)庫

眾所周知,數(shù)據(jù)庫起源于 20 世紀 60 年代。在 70 年代,關系型數(shù)據(jù)庫誕生,并成為沿用至今的數(shù)據(jù)庫存儲計算系統(tǒng)。即使隨著移動互聯(lián)網(wǎng)的發(fā)展,大數(shù)據(jù)技術的廣泛應用,涌現(xiàn)出越來越多新型數(shù)據(jù)庫,但關系型數(shù)據(jù)庫依舊占據(jù)主導地位。

據(jù) DB-Engines 統(tǒng)計,截至 2020 年 5 月,在收錄的 357 種數(shù)據(jù)庫中,關系型數(shù)據(jù)庫占比高達 75.2%。它之所以能經(jīng)久不衰,是因為其滿足數(shù)據(jù)庫的 ACID 特性,能幫助應用開發(fā)且簡化應用開發(fā)的復雜性。同時,它采用 SQL 標準,業(yè)務人員很容易看懂開發(fā)人員寫的代碼,代碼可讀性和可維護性非常強,降低了溝通成本。

在云計算出現(xiàn)前,關系型數(shù)據(jù)庫通常采用本地部署方式(On-Premises),其中,商業(yè)數(shù)據(jù)庫代表有 Oracle、Microsoft SQL Server、IBM Db2,開源數(shù)據(jù)庫代表則是 MySQL、PostgreSQL。那時,大多數(shù)企業(yè)都是自行采購硬件和租用 IDC。除服務器外,機柜、交換機、網(wǎng)絡配置和軟件安裝等底層很多事情都需要專業(yè)人士負責。數(shù)據(jù)庫方面,只有資金充裕的大企業(yè)(如電信、金融等)主要用 Oracle、IBM DB2 等商業(yè)關系型數(shù)據(jù)庫,它們的特點是性能強大、穩(wěn)定性好,但價格貴、維護成本高。

傳統(tǒng)數(shù)據(jù)庫架構依賴于高端硬件,每套數(shù)據(jù)庫系統(tǒng)服務器少、架構相對簡單,且無法支持新業(yè)務的擴展需求。如果想提升性能,主要靠采用配置更高、更先進的硬件。當然,這樣的機器也更昂貴。

除了擴展性差,傳統(tǒng)關系型數(shù)據(jù)庫還面臨一些挑戰(zhàn):一是部署成本高,維護難度大;二是由于私有化部署,數(shù)據(jù)庫內核迭代升級比較緩慢。并且,它無法應對高并發(fā)讀寫。像以 Web 2.0 為代表的網(wǎng)站,其數(shù)據(jù)庫負載非常高,本地部署的傳統(tǒng)關系型數(shù)據(jù)庫往往無法應對每秒上萬次的讀寫請求,硬盤 I/O 成為性能瓶頸。

云計算興起,關系型數(shù)據(jù)庫演化到云托管關系型數(shù)據(jù)庫

云計算出現(xiàn)后,傳統(tǒng)關系型數(shù)據(jù)庫遇到的問題部分得到緩解。借助 IaaS,企業(yè)開始將傳統(tǒng)數(shù)據(jù)庫“搬遷”到云上,因此出現(xiàn)了云托管關系型數(shù)據(jù)庫,云廠商稱之為 RDS 服務,如 Amazon RDS、阿里云 RDS 等。

與傳統(tǒng)關系型數(shù)據(jù)庫相比,云托管關系型數(shù)據(jù)庫在外部交互層面上,保持了和傳統(tǒng)“原版”數(shù)據(jù)庫幾乎完全一致的編程接口和使用體驗。在搭建、運維和管理層面,云托管關系型數(shù)據(jù)庫門檻更低,對用戶更友好,且實現(xiàn)了相當程度的智能化和自動化。許多在傳統(tǒng)數(shù)據(jù)庫中需借額外工具或產(chǎn)品的功能,在云托管關系型數(shù)據(jù)庫中默認內置,開箱即用。本質上,云托管是將原本部署于 IDC 機房內物理服務器(也可能是虛擬出來的服務器)上的傳統(tǒng)數(shù)據(jù)庫軟件部署在云主機上。

圖由作者繪制

以 Amazon RDS 為例。其架構類似在底層的數(shù)據(jù)庫上構建了一個中間層。這個中間層負責路由客戶端的 SQL 請求發(fā)往實際的數(shù)據(jù)庫存儲節(jié)點。因為將業(yè)務端的請求通過中間層代理,所以可對底層的數(shù)據(jù)庫實例進行很多運維工作。這些工作由于隱藏在中間層后邊,業(yè)務層可以做到基本無感知。另外,這個中間路由層基本只是簡單的轉發(fā)請求,所以底層可以連接各種類型的數(shù)據(jù)庫。其缺點在于,它本質上還是一個單機主從架構,無法適用超過最大配置物理機容量、CPU 負載和 IO 的場景。尤其是移動互聯(lián)網(wǎng)時代,很多企業(yè)業(yè)務快速增長,數(shù)據(jù)庫并發(fā)量越來越高,也愈加重視可擴展性。

云托管關系型數(shù)據(jù)庫雖然能部分實現(xiàn)“彈性”與“自愈”,但是這種方案存在資源利用率低、維護成本高、可用性低等問題。

以阿里云為例,阿里 PolarDB 之所以會誕生,原因之一是阿里云數(shù)據(jù)庫團隊在業(yè)務中遇到很大挑戰(zhàn):它們在云上維護了龐大的 MySQL 云服務(RDS)集群,包含成千上萬個實例,面臨很多棘手問題:

  • 云服務一般使用云硬盤,導致數(shù)據(jù)庫的性能沒物理機實例好,比如 I/O 延時過高;
  • RDS 實例集群很大,可能同時有很多實例在備份,從而占用云服務巨大的網(wǎng)絡和 I/O 帶寬,導致云服務不穩(wěn)定;
  • 大實例恢復需重建時,耗時太長,影響服務可用性;
  • 對需要讀寫分離,且要求部署多個只讀節(jié)點的用戶,最明顯的感覺是每增加一個只讀實例,成本是線性增長。

針對這些問題,可選解決方案是基于共享存儲,即數(shù)據(jù)庫共享存儲方案:RDS 實例(一般指一主一從的高可用實例)和只讀實例共享同一份數(shù)據(jù)。好處是實例故障或只讀擴展時,不用拷貝數(shù)據(jù),只需新建只讀計算節(jié)點或把故障節(jié)點重新拉起來。并且,通過快照技術和寫時拷貝解決數(shù)據(jù)備份和誤操作恢復問題。不過,業(yè)內可用的共享存儲方案非常少,即使可用,性能也達不到要求。

因此,想解決云托管關系型數(shù)據(jù)庫服務面臨的問題,必須改變思路,從架構入手。

架構“革命”,云原生數(shù)據(jù)庫出現(xiàn)

要知道,過去三四十年,傳統(tǒng)關系型數(shù)據(jù)庫架構并未發(fā)生很大改變。

圖源亞馬遜云科技博客

雖然在數(shù)據(jù)庫擴展方面存在不同的常規(guī)方法(如分區(qū)、無共享或共享磁盤等),但這些方法都基于同樣的基本數(shù)據(jù)庫架構。

正如亞馬遜云科技在博客中寫道:“這些方法無法解決大規(guī)模性能、彈性和爆炸半徑問題,因為嚴密耦合型整體式堆棧的基本局限性依然存在?!?/p>

為解決云托管關系型數(shù)據(jù)庫面臨的問題,適應云特性的云原生數(shù)據(jù)庫就此誕生。云原生數(shù)據(jù)庫完全為云設計,能充分發(fā)揮云的特點和優(yōu)勢。

具體說來,云原生數(shù)據(jù)庫有三大特點:第一,計算、存儲分離,由于對存儲與計算進行解耦合,實現(xiàn)了存儲與計算分離;第二,無狀態(tài),計算節(jié)點無狀態(tài)或較少狀態(tài);第三,存儲節(jié)點靈巧化,因采用小存儲塊方式組織副本,用以減少平均恢復時間,多副本共識算法,實現(xiàn)存儲的高可用與故障“自愈”能力。

目前,業(yè)內云原生數(shù)據(jù)庫的代表有亞馬遜云科技 Aurora、阿里 PolarDB、Azure CosmosDB、騰訊 TDSQL-C 等。

從上述各種云原生數(shù)據(jù)庫的實踐和發(fā)展來看,我們總結出數(shù)據(jù)庫技術的幾個發(fā)展趨勢:第一,從 scale up 到 scale out。打個比方,這就像從傳統(tǒng)火車到動車一樣,scale out 不僅可以降低用戶 TCO,而且該架構可以支撐系統(tǒng)擴展。尤其是如今的網(wǎng)絡已經(jīng)從百兆邁向 100G、200G,協(xié)議從 socket 邁向 RDMA,因此 scale out 架構已經(jīng)完全成為可能。其次,從物理機到云原生。正如英特爾大數(shù)據(jù)首席工程師程從超所言,“我們原來的數(shù)據(jù)庫從物理機逐步走向云平臺,充分利用云平臺底層的分布式存儲,以及計算資源池、存儲資源池的無限擴展能力,讓數(shù)據(jù)庫關注上層業(yè)務邏輯,與云平臺充分地結合,形成云原生?!钡谌瑥挠嬎愦鎯Ψ蛛x到邏輯和執(zhí)行引擎分離,走向 Serverless 架構。好處在于 CPU 可以動態(tài)擴展或縮容,為用戶提供 on demand 服務。第四,數(shù)據(jù)計算將放在內存里,數(shù)據(jù)存儲可能采用塊存儲、對象存儲。這樣,在計算過程中,避免和底層存儲“打交道”。最后是 AIOps。通過 AI 技術自動的對前端業(yè)務系統(tǒng)進行調優(yōu)。這可以在提高性能的同時,降低成本、預防 IT 事故,并提高業(yè)務的敏捷性。

發(fā)揮極致性能,云原生數(shù)據(jù)庫的創(chuàng)新實踐

如今人工智能、低代碼、即時數(shù)據(jù)分析等技術的加速創(chuàng)新意味著云上工作負載日趨多元化、動態(tài)化。如何應對這種變化,對云原生數(shù)據(jù)庫是非常大的考驗。

在架構設計上,現(xiàn)有云原生數(shù)據(jù)庫最顯著的特點是將原本一體運行的數(shù)據(jù)庫拆解,讓計算、存儲資源完全解耦,使用分布式云存儲替代本地存儲,將計算層變成無狀態(tài)。云原生數(shù)據(jù)庫將承載每層服務的資源池化,獨立、實時地伸縮資源池的大小,以匹配實時的工作負載,使得資源利用率最大化。

圖由作者繪制

如上圖所示,大部分云原生數(shù)據(jù)庫將 SQL 語句解析、物理計劃執(zhí)行、事務處理等都放在一層,統(tǒng)稱為計算層。而將事務產(chǎn)生的日志、數(shù)據(jù)的存儲放在共享存儲層,統(tǒng)稱為存儲層。在存儲層,數(shù)據(jù)采用多副本確保數(shù)據(jù)的可靠性,并通過 Raft 等協(xié)議保證數(shù)據(jù)的一致性。由此可見,高性能的分布式存儲是云原生數(shù)據(jù)庫實現(xiàn)的關鍵。

此外,計算節(jié)點與存儲節(jié)點之間采用高速網(wǎng)絡互聯(lián),并通過 RDMA 協(xié)議傳輸數(shù)據(jù),讓 I/O 性能不再成為瓶頸。值得注意的是,Amazon Aurora 并未使用 RDMA。

除架構外,云原生數(shù)據(jù)庫還需要與硬件搭配,軟硬協(xié)同,才能發(fā)揮出最大潛力。新硬件的發(fā)展為數(shù)據(jù)庫技術注入了更多的可能性,充分發(fā)揮硬件性能成了所有數(shù)據(jù)庫系統(tǒng)提升效率的重要手段。云原生數(shù)據(jù)庫拆解了計算、存儲,并利用網(wǎng)絡發(fā)揮分布式的能力,在這三個層面都充分結合新硬件的特性進行設計。

通過騰訊云 TDSQL-C 的實踐,我們可以深入了解云原生數(shù)據(jù)庫的創(chuàng)新思路。

TDSQL-C 是騰訊云自研的新一代云原生關系型數(shù)據(jù)庫,采用計算和存儲分離的架構,所有計算節(jié)點共享一份數(shù)據(jù),存儲容量高達 128TB,單庫最高可擴展至 16 節(jié)點,提供秒級的配置升降級、秒級的故障恢復和數(shù)據(jù)備份容災服務,兼具商用的性能和穩(wěn)定性以及開源的靈活和低成本。

大體上,TDSQL-C 核心技術創(chuàng)新表現(xiàn)在兩方面:一方面是架構創(chuàng)新,另一方面是性能優(yōu)化。

TDSQL-C 云原生架構(圖由作者繪制)

在架構上,TDSQL-C 存算分離,把計算層和存儲層進行解耦,做分層處理,分層過后通過池化讓計算、存儲的能力變得無限大。存算分離后,存儲可以使用集群化的云存儲,大大提升存儲上限,計算資源可以跨實例、跨物理機調度,按需使用,彈性大大增加。

其次,TDSQL-C 共享存儲。如上圖所示,傳統(tǒng)上,Master 和 RO 雖然對應的是同一份數(shù)據(jù),但實際存儲時有六份數(shù)據(jù)。而每增加一個 RO 節(jié)點,就會多出三份數(shù)據(jù),這也讓整個集群的存儲副本數(shù)近一步放大。并且,高吞吐的數(shù)量使網(wǎng)絡問題成為瓶頸,在共享存儲側也有大量網(wǎng)絡浪費。而 TDSQL-C 采用共享存儲方式,如下圖所示,Master 和 RO 是基于一份數(shù)據(jù)放在共享存儲中,RO 只從共享存儲中讀取所需的 page,不需要寫入存儲,并且 RO 可以從主庫接收 WAL 在緩存中重放,以此保持緩存中 Page 持續(xù)更新。如此,TDSQL-C 就解決了業(yè)務容量和計算節(jié)點的擴容問題。

圖源InfoQ官網(wǎng)

第三,TDSQL-C 使用“l(fā)og is database”方案,把一部分數(shù)據(jù)庫計算邏輯下沉到存儲層完成, 實現(xiàn)網(wǎng)絡數(shù)據(jù)傳輸減少 90%+,計算層資源更聚焦于 SQL 處理,提升系統(tǒng)性能,分布式刷臟基本上規(guī)避 BP 刷臟的影響,加快了系統(tǒng)啟動速度。

除了架構創(chuàng)新,TDSQL-C 在性能優(yōu)化方面,不僅很好地利用云原生數(shù)據(jù)庫自身特點,而且充分結合英特爾產(chǎn)品和技術,實現(xiàn)極致性能。

具體而言,騰訊云 TDSQL-C 團隊首次深入底層軟件的設計層面,利用英特爾 oneAPI 收集軟件運行過程中的函數(shù)開銷等,通過反饋優(yōu)化技術進行再編譯。這樣,TDSQL-C 性能得到進一步提升,在大部分用戶場景下都有更好的效果,甚至在某個方面,性能提升可以達到 85%。

在這個過程中,英特爾 oneAPI 發(fā)揮著重要作用。作為一種開放、統(tǒng)一的編程模型,oneAPI 用于 CPU 和加速器,并支持多個廠商的計算機架構。

其次,為優(yōu)化讀取性能和寫入性能,騰訊云 TDSQL-C 團隊基于英特爾傲騰持久化內存設計了一個二級緩存方案,因為由計算和存儲分離帶來的遠程 I/O 成為不小的挑戰(zhàn)。同時,根據(jù)數(shù)據(jù)溫度,智能存儲分層:熱數(shù)據(jù)放在內存,冷數(shù)據(jù)放在磁盤。在使用傲騰持久化內存后,團隊重新定義溫數(shù)據(jù),實行低冗余度存儲。在計算節(jié)點,通過對溫數(shù)據(jù)進行緩存,團隊極大提高了數(shù)據(jù)庫在 IO 密集型場景下的訪問速度。

圖由作者繪制

如上圖所示,TDSQL-C 團隊在遠程存儲和 buffer pool 之間實現(xiàn)了二級緩存層,它使用本地存儲介質。從 buffer pool 中淘汰的頁面緩存在該層——實際上并非淘汰,而是把從buffer pool 移出的數(shù)據(jù)緩存到本地的 SSD存儲或AEP存儲。下次訪問該數(shù)據(jù)時,滿足一定的條件下,可以直接從本地讀取,這樣就能最大限度地降低網(wǎng)絡 I/O 的消耗。

通過與 英特爾 技術團隊的聯(lián)合創(chuàng)新,結合最新一代英特爾? 至強? 可擴展處理器以及英特爾? 傲騰? 持久內存(PMem)的硬件特性,TDSQL-C 團隊重構了二級緩存設計方案,在IO bound 場景中的讀寫性能提升2倍以上。

同時,TDSQL-C 團隊攜手英特爾多方位優(yōu)化存儲方案設計,如加入輪詢、算法優(yōu)化、消除鎖等機制,優(yōu)化存儲引擎等,并引入由英特爾提供的 SPDK 開發(fā)套件,優(yōu)化 NVMe 固態(tài)盤的 IOPS 和時延性能。并且,對網(wǎng)絡架構全面升級,TDSQL-C 新版本采用全鏈路 RDMA 網(wǎng)絡,依靠零拷貝、內核旁路、無 CPU 干預等特性,進一步優(yōu)化了存儲層與計算層以及存儲層多副本間關鍵路徑的系統(tǒng)性能,降低請求延遲最高達 80%,使 I/O 性能不再成為瓶頸。

簡言之,TDSQL-C 新版本對云原生數(shù)據(jù)庫場景進行了大量優(yōu)化,極大提升了數(shù)據(jù)庫性能,能更好地滿足企業(yè)對數(shù)據(jù)庫性能的極致追求。

從騰訊云與英特爾合作的創(chuàng)新實踐中,我們發(fā)現(xiàn)未來的數(shù)據(jù)庫將步入全棧優(yōu)化時代,從硬件平臺優(yōu)化到架構層優(yōu)化再到上面的應用層優(yōu)化。所謂“軟件優(yōu)化三年不如硬件更新一代”,比如算力上,一定是充分利用 CPU 最底層的指令集和最新的加速器。據(jù)悉,最新的英特爾? 至強? 可擴展處理器(Sapphire Rapids)一代,已經(jīng)從單純的提高主頻和增加核數(shù)逐步走向更多的加速器,包括 QAT 和 SGX 以及 DSA 等。在英特爾大數(shù)據(jù)首席工程師程從超看來,這些新的加速器會對數(shù)據(jù)庫的整個優(yōu)化設計帶來很大的影響,這也是未來需要充分重視的。

以硬件到基礎設施的優(yōu)化為例,算力優(yōu)化方面,需采用最新的處理器和最新的軟件版本,并選擇高主頻的核。同時,還要避免 NUMA,即非一致性內存訪問,因為它對數(shù)據(jù)庫的性能影響較大。并且,可以充分利用底層 CPU 最新的指令集,如 SIMD。在存儲優(yōu)化方面,實行數(shù)據(jù)封層存放,把 redo log 和 binlog 等日志存儲在低延時設備上,以及通過 PMEM 在物理存儲(HDD、SSD、NAND)和內存間增加一個 cache 層,作為應用的熱數(shù)據(jù)存儲,從而擴展內容容量,彌補存儲性能。為進一步優(yōu)化存儲,企業(yè)還可以利用 LSM 的多版本管理機制增強系統(tǒng)的性能。網(wǎng)絡優(yōu)化上,可以采用 ADQ,通過 SPDK/DPDK 等技術提高網(wǎng)絡性能,繞過 kernel space 的性能瓶頸。

寫在最后

隨著數(shù)字化不斷發(fā)展,數(shù)據(jù)的價值正不斷顯現(xiàn)。毫無疑問,圍繞數(shù)據(jù)的生產(chǎn)、存儲和消費構成的系列服務,將成為數(shù)字經(jīng)濟社會的核心價值鏈條,而其背后的支撐正是數(shù)據(jù)庫。這也意味著,數(shù)據(jù)庫將比以前發(fā)揮更大的作用。

從傳統(tǒng)關系型數(shù)據(jù)庫到云托管關系型數(shù)據(jù)庫再到云原生數(shù)據(jù)庫,數(shù)據(jù)庫不斷變革。我們看到,當企業(yè)業(yè)務從本地到上云再到原生發(fā)展時,云原生數(shù)據(jù)庫也將成為云時代數(shù)據(jù)庫的主角之一。作為支撐企業(yè)業(yè)務的關鍵 IT 基礎設施,云原生數(shù)據(jù)庫只有發(fā)揮出最大的價值,才能推動業(yè)務發(fā)展。而這需要不斷創(chuàng)新,不僅是先進的架構設計,而且與其他前沿的軟硬件產(chǎn)品和技術搭配,軟硬協(xié)同,從而實現(xiàn)最佳效用。

本文為轉載內容,授權事宜請聯(lián)系原著作權人。