本文將介紹Data Transmission Service的整個系統架構及基本實現原理。
系統架構
DTS系統架構特性說明
- 主備冗餘
DTS的每個功能模組都部署在多個主備冗餘伺服器上。 容災系統持續對每台伺服器執行健康情況檢查。 如果一台伺服器運行異常,該伺服器上的工作負載將以最小的延遲切換到運行正常的伺服器。
- 接入地址動態檢測
對於資料同步和資料訂閱,容災系統會檢測資料來源接入地址是否發生變更。 如果執行個體接入地址已更改,則容災系統將重新設定資料來源以保證資料連線正常運行。
資料移轉工作原理
資料移轉過程包括三個階段,即結構遷移、全量資料移轉和增量資料移轉。 如果需要在遷移期間保持來源資料庫的正常運行,當您在配置遷移任務時,必須將結構遷移、全量資料移轉和增量資料移轉都選為所需的遷移類型。
- 結構遷移:在遷移資料之前,DTS需要在目標資料庫中重新建立資料結構。對於異構資料庫之間的遷移,DTS會解析來源資料庫的DDL代碼,將代碼轉換成目標資料庫的文法,然後在目標資料庫中重新建立結構對象。
- 全量資料移轉:在全量資料移轉階段,DTS會將來源資料庫的存量資料全部遷移到目標資料庫。 來源資料庫保持運行狀態,在遷移過程中仍不斷進行資料更新。 DTS使用增量資料讀模數塊來擷取全量資料移轉過程中發生的資料更新。 當全量資料移轉開始時,增量資料讀模數塊將被啟用。在全量資料移轉階段,增量資料會被解析、重新格式化並儲存在本地DTS伺服器上。
- 增量資料移轉:當全量資料移轉完成後,DTS會檢索本機存放區的增量資料,重新格式化,並將資料更新應用到目標資料庫中。 此過程將持續下去,直到所有進行中的資料變更都複製到目標資料庫,並且來源資料庫和目標資料庫完全同步。
資料同步的工作原理
DTS可以在兩個資料來源之間同步進行中的資料變更。資料同步通常用於OLTP到OLAP的資料轉送。資料同步包括以下兩個階段:
- 同步初始化:DTS先開始收集增量資料,然後將來源資料庫的結構和存量資料載入到目標資料庫。
- 資料即時同步:DTS同步進行中的資料變更,並保持來源資料庫和目標資料庫的同步。
為了同步進行中的資料變更,DTS使用兩個處理交易記錄的模組:
- 交易記錄讀模數塊:日誌讀模數塊從源執行個體讀取未經處理資料,經過解析、過濾及標準格式化,最終將資料在本地持久化。日誌讀模數塊通過資料庫協議串連並讀取源執行個體的增量日誌。如果來源資料庫為RDS MySQL,那麼資料抓模數塊通過Binlog dump協議串連源庫。
- 交易記錄應用模組:交易記錄應用模組從交易記錄讀模數塊檢索並篩選資料更新,僅保留與正在同步的對象相關的資料更新,進而將資料更新應用到目標資料庫。 在這個過程中,交易記錄應用模組會保持事務的ACID屬性,即原子性、一致性、隔離性和持久性。 交易記錄讀模數塊和交易記錄應用模組都基於冗餘部署。 容災系統檢查每台伺服器的健康情況。 如果發生異常,DTS將在運行正常的伺服器上恢複執行交易記錄。
資料訂閱的工作原理
資料訂閱支援即時拉取RDS執行個體的增量日誌,使用者可以通過DTS提供的SDK資料訂閱服務端來訂閱增量日誌,同時可以根據業務需求,實現資料定製化消費。
DTS服務端的日誌拉模數塊主要實現從資料來源抓取未經處理資料,通過解析、過濾、標準格式化等流程,最終將增量資料在本地持久化。
日誌抓模數塊通過資料庫協議串連並即時拉取源執行個體的增量日誌。例如源執行個體為RDS MySQL,那麼資料抓模數塊通過Binlog dump協議串連源執行個體。
日誌拉模數塊及下遊消費SDK的高可用:
- DTS容災系統一旦檢測到日誌拉模數塊出現異常,就會在健康服務節點上斷點重啟日誌拉模數塊,保證日誌拉模數塊的高可用。
- DTS支援在服務端實現下遊SDK消費進程的高可用。使用者同時對一個資料訂閱鏈路,啟動多個下遊SDK消費進程,服務端同時只向一個下遊消費推送增量資料,當這個消費進程異常後,服務端會從其他健康下遊中選擇一個消費進程,向這個消費進程推送資料,從而實現下遊消費的高可用。