GBase新聞
GBase 8c 分布式核心技術(shù)初揭秘—CDC數(shù)據(jù)同步
數(shù)據(jù)庫系統(tǒng)作為企業(yè)IT基礎(chǔ)設(shè)施中的重要組件,其穩(wěn)定性與可用性是上層系統(tǒng)運(yùn)行的必要基礎(chǔ)。并且隨著數(shù)字化發(fā)展,大量的核心業(yè)務(wù)對(duì)于城市級(jí)別容災(zāi)提出了更高的要求。作為一款分布式數(shù)據(jù)庫,GBase 8c可輕松實(shí)現(xiàn)例如兩地三中心架構(gòu)的集群異地災(zāi)備。GBase 8c異地災(zāi)備集群間的不同節(jié)點(diǎn)采用各自對(duì)應(yīng)的高可用部署方式,兩地間采用同步或者異步復(fù)制的備份方式。可以抵御硬件級(jí)別故障、機(jī)房級(jí)別和城市級(jí)別災(zāi)難,兩地之間距離可以大于1000千米。
除此之外,GBase 8c還支持多集群部署,集群間進(jìn)行數(shù)據(jù)雙向同步來提供異地多活的架構(gòu),以滿足對(duì)高可用有嚴(yán)苛要求的業(yè)務(wù)需求。GBase 8c實(shí)現(xiàn)異地多活的關(guān)鍵,則是其中的數(shù)據(jù)同步機(jī)制,而CDC正是實(shí)現(xiàn)數(shù)據(jù)同步機(jī)制的核心技術(shù)。
下面將主要介紹GBase 8c數(shù)據(jù)庫中CDC技術(shù)的架構(gòu)及其實(shí)現(xiàn)原理。
CDC技術(shù)原理
GBase 8c中的CDC (Change Data Capture) ,中文名稱為變更數(shù)據(jù)捕獲,是一種通過解析GBase 8c的WAL增量日志,獲取表級(jí)別的所有數(shù)據(jù)變化,并將其轉(zhuǎn)換為可以復(fù)制到同構(gòu)或者異構(gòu)系統(tǒng)格式的機(jī)制。
作為一款多模多態(tài)分布式數(shù)據(jù)庫,GBase 8c的CDC實(shí)現(xiàn)機(jī)制及執(zhí)行流程上可分為主備式及分布式兩大類:
主備式
基于邏輯復(fù)制的發(fā)布訂閱功能是實(shí)現(xiàn)CDC技術(shù)的核心機(jī)制,在GBase 8c的主備式架構(gòu)中,數(shù)據(jù)同步的發(fā)布訂閱主要執(zhí)行流程如下:
主備式CDC執(zhí)行流程示意圖
本地GBase 8c,可以指定單個(gè)表,也可以指定某個(gè)數(shù)據(jù)庫中的所有表,作為邏輯復(fù)制的發(fā)布端。異地GBase 8c為邏輯復(fù)制的訂閱端,連接本地GBase 8c的服務(wù)端口。本地GBase 8c啟動(dòng)一個(gè)WalSender線程來讀取WAL日志進(jìn)行解碼,并輸出特定格式的消息發(fā)送給異地GBase 8c的ApplyWorker線程,ApplyWorker識(shí)別特定格式的消息后直接執(zhí)行相應(yīng)的INSERT\UPDATE\DELETE等語句來完成數(shù)據(jù)的回放。其中本地的主機(jī)通過復(fù)制槽(Repliaction Slot)機(jī)制來保存消費(fèi)者偏移量,跟蹤訂閱者進(jìn)度。
分布式
不同于主備式架構(gòu),分布式架構(gòu)中DN分布在多臺(tái)服務(wù)器中,本地集群的一個(gè)事務(wù)可能涉及到多個(gè)服務(wù)器上的DN節(jié)點(diǎn)。因此,異地集群在進(jìn)行數(shù)據(jù)同步及回放時(shí),根據(jù)不同的事務(wù)處理策略,存在兩種不同的執(zhí)行方式。
1. 基于分片的分布式訂閱流程
第一種就是基于分片的分布式訂閱,此同步方式的核心機(jī)制與主備式相同,也是基于邏輯復(fù)制功能。不同的地方在于異地集群在進(jìn)行訂閱時(shí),是以本地GBase 8c的DN為基準(zhǔn),啟動(dòng)多個(gè)訂閱任務(wù),分別連接每個(gè)DN節(jié)點(diǎn)。此時(shí)異地集群在CN中會(huì)啟動(dòng)多個(gè) ApplyWorker 線程,每個(gè)線程復(fù)制一個(gè)DN節(jié)點(diǎn)的邏輯日志。本地集群的每個(gè)DN啟動(dòng)一個(gè)WalSender線程來讀取本DN節(jié)點(diǎn)WAL日志進(jìn)行解碼,并輸出特定格式的消息發(fā)送給異地GBase 8c的ApplyWorker線程進(jìn)行數(shù)據(jù)回放。
基于分片的分布式訂閱流程示意圖
此種同步方式,雖然是以DN節(jié)點(diǎn)個(gè)數(shù)為并行度進(jìn)行并行同步,同步效率高,但因?yàn)闆]有有效的機(jī)制保證本地集群的分布式事務(wù)在異地集群回放的全局有序性,所以也就無法保證回放事務(wù)的原子性與全局事務(wù)一致性,只能保證數(shù)據(jù)的最終一致性。
2. CDC 發(fā)布訂閱操作執(zhí)行流程
為了解決基于分片的分布式訂閱無法保證數(shù)據(jù)回放的全局事務(wù)一致性問題,在分布式架構(gòu)場(chǎng)景下的第二種同步方式中,GBase 8c新增了CDC節(jié)點(diǎn),通過對(duì)所有DN上的分布式事務(wù)進(jìn)行合并和排序,來保證異地集群上的事務(wù)能夠全局有序性的回放,實(shí)現(xiàn)數(shù)據(jù)的強(qiáng)一致,保證分布式事務(wù)的原子性。
CDC節(jié)點(diǎn)整體的架構(gòu)如下圖所示:
CDC架構(gòu)圖
CDC節(jié)點(diǎn)采用和CN類似的無狀態(tài)設(shè)計(jì),只存儲(chǔ)本地集群的元數(shù)據(jù)信息,當(dāng)CDC節(jié)點(diǎn)異常宕掉后,重新拉起實(shí)例或使用備用節(jié)點(diǎn)即可繼續(xù)服務(wù)。按功能不同,CDC內(nèi)部主要由3個(gè)角色組成:
1. Dumper
Dumper通過邏輯復(fù)制的方式從DN上拉取邏輯解碼后的WAL增量日志,將事務(wù)信息輸出給Joiner進(jìn)行排序合并。
2. Joiner
Joiner負(fù)責(zé)接受各個(gè)Dumper發(fā)送過來的事務(wù)信息,將具有相同的csn事務(wù)進(jìn)行合并后按照csn順序進(jìn)行排序,以構(gòu)建完整的全局事務(wù)輸出給Output線程。
3. Output
Output負(fù)責(zé)將完整的事務(wù)流輸出給異地集群,輸出的格式支持json、sql、internaloutput(類似于pgoutput格式)。當(dāng)異地集群是GBase 8c數(shù)據(jù)庫時(shí),使用internaloutput格式進(jìn)行replay性能最優(yōu)。
該CDC 同步機(jī)制的發(fā)布訂閱流程具體如下:
CDC執(zhí)行流程示意圖
此時(shí)異地GBase 8c集群將連接本地GBase 8c集群的CDC節(jié)點(diǎn)來進(jìn)行訂閱任務(wù)的創(chuàng)建。本地集群的CDC節(jié)點(diǎn)啟動(dòng)n個(gè)Dumper線程,并開始接收多個(gè)WalSender線程輸出的邏輯解碼增量日志。隨后CDC的Joiner線程通過將增量日志消息進(jìn)行事務(wù)合并和排序操作,構(gòu)建出完整有序的全局事務(wù)信息,并最終由Output線程對(duì)外進(jìn)行輸出。最后異地集群CN節(jié)點(diǎn)啟動(dòng)ApplyWorker線程,對(duì)Output線程發(fā)來的特定格式信息進(jìn)行邏輯日志解析及回放操作,完成數(shù)據(jù)同步。此種數(shù)據(jù)同步方式保證了異地集群上的事務(wù)回放的全局有序性,實(shí)現(xiàn)了數(shù)據(jù)的強(qiáng)一致。
關(guān)于 GBase 8c
GBase 8c是基于openGauss3.0構(gòu)建的一款多模多態(tài)的分布式數(shù)據(jù)庫,支持行存、列存、內(nèi)存等多種存儲(chǔ)模式和單機(jī)、主備式、分布式等多種部署形態(tài)。GBase 8c具備高性能、高可用、彈性伸縮、高安全性等特性,可以部署在物理機(jī)、虛擬機(jī)、容器、私有云和公有云,為關(guān)鍵行業(yè)核心系統(tǒng)、互聯(lián)網(wǎng)業(yè)務(wù)系統(tǒng)和政企業(yè)務(wù)系統(tǒng)提供安全、穩(wěn)定、可靠的數(shù)據(jù)存儲(chǔ)和管理服務(wù)。