盤點(diǎn) | 主流云原生數(shù)據(jù)庫(kù)技術(shù)方案
作者:RadonDB 開(kāi)源社區(qū)
來(lái)源:SegmentFault 思否社區(qū)
作者:柯煜昌 顧問(wèn)軟件工程師
目前從事 RadonDB 容器化研發(fā),華中科技大學(xué)研究生畢業(yè),有多年的數(shù)據(jù)庫(kù)內(nèi)核開(kāi)發(fā)經(jīng)驗(yàn)。
你將 Pick 這些內(nèi)容:
云原生的概念 云原生數(shù)據(jù)庫(kù)的概念 兩種主流技術(shù)路線分析 六種云原生數(shù)據(jù)庫(kù)方案和功能介紹 云原生數(shù)據(jù)庫(kù)的核心功能和價(jià)值
背景
提供按需服務(wù); 用戶只愿支付運(yùn)營(yíng)費(fèi)用而不愿支付資產(chǎn)費(fèi)用; 云服務(wù)提供商集群規(guī)模越來(lái)越大,甚至遍布全球,集群達(dá)到云級(jí)規(guī)模(Cloud-Scale)。
RDS 的挑戰(zhàn)


云原生數(shù)據(jù)庫(kù)簡(jiǎn)介

1 Spanner 類
1.1 架構(gòu)

1.2 存儲(chǔ)高可用性

1.3 優(yōu)缺點(diǎn)

2 Aurora 類
2.1 架構(gòu)


Aurora 網(wǎng)絡(luò) IO
數(shù)據(jù)庫(kù)主實(shí)例變成計(jì)算節(jié)點(diǎn),數(shù)據(jù)庫(kù)主實(shí)例不再進(jìn)行刷臟頁(yè)動(dòng)作,僅僅向存儲(chǔ)寫日志,存儲(chǔ)應(yīng)用日志實(shí)現(xiàn)持久化,即日志應(yīng)用下沉到存儲(chǔ)。數(shù)據(jù)庫(kù)主實(shí)例沒(méi)有后臺(tái)寫動(dòng)作,沒(méi)有 cache 強(qiáng)制刷臟替換,沒(méi)有檢查點(diǎn);
數(shù)據(jù)庫(kù)復(fù)制實(shí)例獲取日志內(nèi)容,通過(guò)日志應(yīng)用更新自身的 buffer/cache 等內(nèi)存對(duì)象;
主實(shí)例與復(fù)制實(shí)例共享存儲(chǔ);
將崩潰恢復(fù),備份、恢復(fù)、快照功能下放到存儲(chǔ)層。
將存儲(chǔ)分段(Segment),以 10G 作為分段單位大小, 每個(gè)分段共六個(gè)副本,部署于三個(gè)可用區(qū)(Available Zone),每個(gè)可用區(qū)兩個(gè)副本,Aurora 將這六個(gè)分段稱為一個(gè)保護(hù)組(Protection Group,PG),實(shí)現(xiàn)高可用。
存儲(chǔ)節(jié)點(diǎn)能接收日志記錄應(yīng)用來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)物理頁(yè)的持久化,并且使用 Gossip 協(xié)議同步各個(gè)副本間的日志。

2.2 高可用

存儲(chǔ)多副本之間用 Raft 算法保證高可用,Raft 算法包含了 Quorum 仲裁算法,而且更加靈活;
與 Aurora 一樣,主從計(jì)算節(jié)點(diǎn)通過(guò)網(wǎng)絡(luò)傳輸 redo 日志,同步雙方的 buffer cache 以及其他內(nèi)存對(duì)象。
4 PolarDB 方案

5 Socrates 方案

SQL Server 為了支持 Snapshot 隔離級(jí),提供了多版本數(shù)據(jù)頁(yè)(Page Version Store)的功能;
使用 SSD 存儲(chǔ)作為 buffer pool 的擴(kuò)展(Reslilient Cache),可以加速故障崩潰恢復(fù)過(guò)程;
RBIO Protocol 是擴(kuò)展的網(wǎng)絡(luò)協(xié)議,用以進(jìn)行遠(yuǎn)程數(shù)據(jù)頁(yè)讀取;
Snapshot Backup/Restore 快速備份與恢復(fù);
新增 XLogService 模塊。
盡量復(fù)用了原有 SQL Server 的特性,使用 SQL Server 組件充當(dāng) Page Server,模擬 Aurora 的存儲(chǔ)節(jié)點(diǎn);
Socrates 有一個(gè)很大的創(chuàng)新,日志與頁(yè)面存儲(chǔ)分離。它認(rèn)為持久性(durability)不需要使用快速存儲(chǔ)設(shè)備中的副本,而可用性(availability)不需要有固定數(shù)量的復(fù)制節(jié)點(diǎn)。因此 XLog 和 XStore 負(fù)責(zé) durability,計(jì)算節(jié)點(diǎn)和 page server 僅用于可用性(它們失效的時(shí)候不會(huì)丟數(shù)據(jù),僅僅是不可用);
redo 日志傳遞均借助 Xlog Service,而不是通過(guò)主從計(jì)算節(jié)點(diǎn)通過(guò)網(wǎng)絡(luò)傳輸。主實(shí)例節(jié)點(diǎn)不需要額外進(jìn)行日志緩存來(lái)適應(yīng)從實(shí)例節(jié)點(diǎn)。
6 TaurasDB 方案

總結(jié)
云原生數(shù)據(jù)庫(kù)的核心功能
計(jì)算與存儲(chǔ)分離,計(jì)算節(jié)點(diǎn)保持少狀態(tài),甚至無(wú)狀態(tài);
基于日志的進(jìn)行持久化;
存儲(chǔ)分片/分塊,易于擴(kuò)容;
存儲(chǔ)多副本與共識(shí)算法;
備份、恢復(fù)、快照功能下放到存儲(chǔ)層。
知名方案的非核心功能

云原生數(shù)據(jù)庫(kù)的核心價(jià)值
基于日志進(jìn)行持久化與復(fù)制更輕量,避免寫放大效應(yīng),各大廠商均號(hào)稱比原版 MySQL 有 5~7 倍性能。
計(jì)算節(jié)點(diǎn)無(wú)狀態(tài)或少狀態(tài),計(jì)算節(jié)點(diǎn)與存儲(chǔ)擴(kuò)展靈活。
將數(shù)據(jù)庫(kù)持久文件分片,以小粒度方式副本方式降低 MTTR,以及共識(shí)算法來(lái)實(shí)現(xiàn)高可用。
計(jì)算能力與存儲(chǔ)容量按需伸縮,減少資源浪費(fèi)。
更少的資源、更少的浪費(fèi)、更少的維護(hù),最終達(dá)到更小的成本。
參考文獻(xiàn)
【2】: "Spanner: Google’s Globally-Distributed Database"
【3】: TiDB: A Raft-based HTAP Database
【4】: PolarDB redo replication
【5】: PolarDB Architecture
【6】: GDPR
【7】: "Socrates: The New SQL Server in the Cloud"
【8】: Taurus Database: How to be Fast, Available, and Frugal in the Cloud
【9】: 騰訊云新一代自研數(shù)據(jù)庫(kù)CynosDB技術(shù)詳解——架構(gòu)設(shè)計(jì)

