新聞中心
本文為您介紹 OceanBase 遷移服務(wù)(OceanBase Migration Service,OMS)包含的組件。

OMS 內(nèi)部主要包含以下組件:
- 結(jié)構(gòu)遷移核心組件
- 全量數(shù)據(jù)流和數(shù)據(jù)校驗(yàn)組件
- 日志讀取組件
- 同步寫入組件
結(jié)構(gòu)遷移核心組件
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ù)庫中的表、約束、索引和視圖等多種對象。
同時(shí),DBCat 可以嚴(yán)格對齊和兼容 OceanBase 的租戶類型。例如,OceanBase 的某個(gè)版本暫時(shí)不支持源端數(shù)據(jù)庫中的部分?jǐn)?shù)據(jù)源類型,DBCat 會選擇最接近且兼容度最高的數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換映射。
全量數(shù)據(jù)流和數(shù)據(jù)校驗(yàn)組件
全量數(shù)據(jù)流模塊(Dataflow)負(fù)責(zé)源庫存量數(shù)據(jù)的遷移,以及遷移后的全字段校驗(yàn)。為了擴(kuò)展靈活性和充分復(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 模塊中,由其它模塊消費(fèi)。
-
Writer 模塊:從 Broker 模塊訂閱某張表的記錄,根據(jù)每個(gè) Writer 插件的類型,將記錄按照統(tǒng)一數(shù)據(jù)模型層轉(zhuǎn)換為適配下游的插入語句后,寫入下游。
-
Broker 模塊:用于解耦 Reader、Writer 或其它模塊,以提升性能。解藕后,上下游模塊可以相互獨(dú)立,便于維護(hù)和擴(kuò)展。
-
統(tǒng)一數(shù)據(jù)模型層:各組件間通過 Broker 要實(shí)現(xiàn)解藕,還需要有一層統(tǒng)一數(shù)據(jù)模型。數(shù)據(jù)從 Reader 寫入 Broker 時(shí)需要先按統(tǒng)一數(shù)據(jù)模型轉(zhuǎn)換,從 Broker 獲取數(shù)據(jù)記錄后,也需要由記錄的統(tǒng)一數(shù)據(jù)模型轉(zhuǎn)化為下游適配的對象或語句。
在上述底層模塊的基礎(chǔ)上,OMS 實(shí)現(xiàn)了數(shù)據(jù)的遷移、校驗(yàn)和訂正。
遷移數(shù)據(jù)時(shí),您需要在配置好源端、目標(biāo)端、待遷移表和庫表映射等關(guān)鍵信息后,為每張遷移表創(chuàng)建一條 Reader > Broker > Writer 的通道,再由上層遷移程序?qū)γ繌埍淼倪w移進(jìn)行調(diào)度。您可以并發(fā)遷移多張表,在 Reader 和 Writer 組件中可以并發(fā)執(zhí)行每張表的遷移。
進(jìn)行數(shù)據(jù)校驗(yàn)和訂正時(shí),您需要在配置好源端、目標(biāo)端、待遷移表和庫表映射等關(guān)鍵信息后,為每張校驗(yàn)的表創(chuàng)建 SrcReader > Broker > DstReader 和 Broker > Verifier 的校驗(yàn)通道。
日志讀取組件
不同類型數(shù)據(jù)庫的日志讀取模塊(Store)的實(shí)現(xiàn)方式不同,例如 OceanBase Store 模塊的實(shí)現(xiàn)方式是依賴于 OceanBase 的 Liboblog 工具。
Lliboblog 是 OceanBase 的增量數(shù)據(jù)同步工具,通過 RPC 方式拉取 OceanBase 各個(gè)分區(qū)的 Redo 日志后,結(jié)合各個(gè)表和列的 Schema 信息,轉(zhuǎn)換 Redo 日志為中間定義的數(shù)據(jù)格式,最后以事務(wù)的方式輸出修改的數(shù)據(jù)。
同步寫入組件
同步寫入模塊包括 JDBCWriter 和 Connector:
-
同步寫入模塊(JDBCWriter)是從日志讀取模塊(Store)拉取增量數(shù)據(jù)的同時(shí),將其翻譯為
INSERT、UPDATE或DELETE等 SQL 語句寫入數(shù)據(jù)至目標(biāo)端的組件。Store 組件記錄的是流式的增量數(shù)據(jù),可以通過 Pipeline 保證數(shù)據(jù)的有序性。Writer 組件單線程順序執(zhí)行事務(wù)可以滿足基本要求,但不能擴(kuò)展性能,所以 OMS 引入并發(fā)寫機(jī)制。
在提升同步性能的同時(shí),還需要保證數(shù)據(jù)的一致性,所以 OMS 引入沖突矩陣機(jī)制實(shí)現(xiàn)亂序并發(fā)寫入,以確保每個(gè)事務(wù)的最終一致性。
為了避免循環(huán)復(fù)制問題,所有通過 OMS 的 JDBCWriter 模塊寫入的數(shù)據(jù)都會在 Store 組件中進(jìn)行打標(biāo)處理,以確保不會再次被其它模塊消費(fèi)。
-
同步寫入模塊(Connector)是將 JDBCWriter 的功能插件化,包括源端(Source) 和目標(biāo)端(Sink) 插件。以同步 OceanBase 數(shù)據(jù)至 Kafka 為例,在數(shù)據(jù)同步過程中,OB-Store-Source 為源端插件,Kafka-Sink 為目標(biāo)端插件。
Connector 的優(yōu)勢如下:
-
可擴(kuò)展性強(qiáng),源端和目標(biāo)端可以進(jìn)行組合。
-
方便統(tǒng)一同步任務(wù)資源的管理、監(jiān)控和運(yùn)維。
-
作為統(tǒng)一中間層,將不同源端的 Record 格式進(jìn)行結(jié)構(gòu)化,便于實(shí)現(xiàn) Record 的 Filter 和 Transformer 等功能
-
分享文章:創(chuàng)新互聯(lián)OceanBase教程:OceanBase組件基本原理
標(biāo)題URL:http://m.fisionsoft.com.cn/article/djiidhi.html


咨詢
建站咨詢
