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