W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
本文為您介紹 OceanBase 遷移服務(wù)(OceanBase Migration Service,OMS)包含的組件。
OMS 內(nèi)部主要包含以下組件:
OMS 結(jié)構(gòu)遷移的核心組件(DBCat)作為 OceanBase 原生的 Schema 轉(zhuǎn)換引擎,可以根據(jù)源端、目標(biāo)端具體的數(shù)據(jù)源類型和字符編碼類型,進(jìn)行精確的數(shù)據(jù)類型映射或轉(zhuǎn)換。OMS 的結(jié)構(gòu)遷移組件支持轉(zhuǎn)換、遷移數(shù)據(jù)庫中的表、約束、索引和視圖等多種對象。
同時,DBCat 可以嚴(yán)格對齊和兼容 OceanBase 的租戶類型。例如,OceanBase 的某個版本暫時不支持源端數(shù)據(jù)庫中的部分?jǐn)?shù)據(jù)源類型,DBCat 會選擇最接近且兼容度最高的數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換映射。
全量數(shù)據(jù)流模塊(Dataflow)負(fù)責(zé)源庫存量數(shù)據(jù)的遷移,以及遷移后的全字段校驗。為了擴展靈活性和充分復(fù)用組件,Dataflow 自下而上分別是 Reader 模塊、Writer 模塊、Broker 模塊和統(tǒng)一數(shù)據(jù)模型層:
Reader 模塊:負(fù)責(zé)從源端讀取數(shù)據(jù),每一種數(shù)據(jù)庫類型都有對應(yīng)的 Reader 插件。Reader 插件根據(jù)統(tǒng)一數(shù)據(jù)模型層轉(zhuǎn)換讀取的記錄后,將其放入 Broker 模塊中,由其它模塊消費。
Writer 模塊:從 Broker 模塊訂閱某張表的記錄,根據(jù)每個 Writer 插件的類型,將記錄按照統(tǒng)一數(shù)據(jù)模型層轉(zhuǎn)換為適配下游的插入語句后,寫入下游。
Broker 模塊:用于解耦 Reader、Writer 或其它模塊,以提升性能。解藕后,上下游模塊可以相互獨立,便于維護(hù)和擴展。
統(tǒng)一數(shù)據(jù)模型層:各組件間通過 Broker 要實現(xiàn)解藕,還需要有一層統(tǒng)一數(shù)據(jù)模型。數(shù)據(jù)從 Reader 寫入 Broker 時需要先按統(tǒng)一數(shù)據(jù)模型轉(zhuǎn)換,從 Broker 獲取數(shù)據(jù)記錄后,也需要由記錄的統(tǒng)一數(shù)據(jù)模型轉(zhuǎn)化為下游適配的對象或語句。
在上述底層模塊的基礎(chǔ)上,OMS 實現(xiàn)了數(shù)據(jù)的遷移、校驗和訂正。
遷移數(shù)據(jù)時,您需要在配置好源端、目標(biāo)端、待遷移表和庫表映射等關(guān)鍵信息后,為每張遷移表創(chuàng)建一條 Reader > Broker > Writer 的通道,再由上層遷移程序?qū)γ繌埍淼倪w移進(jìn)行調(diào)度。您可以并發(fā)遷移多張表,在 Reader 和 Writer 組件中可以并發(fā)執(zhí)行每張表的遷移。
進(jìn)行數(shù)據(jù)校驗和訂正時,您需要在配置好源端、目標(biāo)端、待遷移表和庫表映射等關(guān)鍵信息后,為每張校驗的表創(chuàng)建 SrcReader > Broker > DstReader 和 Broker > Verifier 的校驗通道。
不同類型數(shù)據(jù)庫的日志讀取模塊(Store)的實現(xiàn)方式不同,例如 OceanBase Store 模塊的實現(xiàn)方式是依賴于 OceanBase 的 Liboblog 工具。
Lliboblog 是 OceanBase 的增量數(shù)據(jù)同步工具,通過 RPC 方式拉取 OceanBase 各個分區(qū)的 Redo 日志后,結(jié)合各個表和列的 Schema 信息,轉(zhuǎn)換 Redo 日志為中間定義的數(shù)據(jù)格式,最后以事務(wù)的方式輸出修改的數(shù)據(jù)。
同步寫入模塊包括 JDBCWriter 和 Connector:
同步寫入模塊(JDBCWriter)是從日志讀取模塊(Store)拉取增量數(shù)據(jù)的同時,將其翻譯為 INSERT
、UPDATE
或 DELETE
等 SQL 語句寫入數(shù)據(jù)至目標(biāo)端的組件。
Store 組件記錄的是流式的增量數(shù)據(jù),可以通過 Pipeline 保證數(shù)據(jù)的有序性。Writer 組件單線程順序執(zhí)行事務(wù)可以滿足基本要求,但不能擴展性能,所以 OMS 引入并發(fā)寫機制。
在提升同步性能的同時,還需要保證數(shù)據(jù)的一致性,所以 OMS 引入沖突矩陣機制實現(xiàn)亂序并發(fā)寫入,以確保每個事務(wù)的最終一致性。
為了避免循環(huán)復(fù)制問題,所有通過 OMS 的 JDBCWriter 模塊寫入的數(shù)據(jù)都會在 Store 組件中進(jìn)行打標(biāo)處理,以確保不會再次被其它模塊消費。
同步寫入模塊(Connector)是將 JDBCWriter 的功能插件化,包括源端(Source) 和目標(biāo)端(Sink) 插件。以同步 OceanBase 數(shù)據(jù)至 Kafka 為例,在數(shù)據(jù)同步過程中,OB-Store-Source 為源端插件,Kafka-Sink 為目標(biāo)端插件。
Connector 的優(yōu)勢如下:
可擴展性強,源端和目標(biāo)端可以進(jìn)行組合。
方便統(tǒng)一同步任務(wù)資源的管理、監(jiān)控和運維。
作為統(tǒng)一中間層,將不同源端的 Record 格式進(jìn)行結(jié)構(gòu)化,便于實現(xiàn) Record 的 Filter 和 Transformer 等功能
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: