數據傳輸 | dtle 之 job 實現簡析

  • 2020 年 3 月 26 日
  • 筆記

作者:呂海龍

愛可生 DTLE 團隊成員,負責 DTLE 開發 ,日常問題處理以及相關問題的排查。

本文來源:原創投稿

*愛可生開源社區出品,原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。


從 job 文件到源端目標端的數據傳輸,dtle 到底是如何實現的?

傳輸過程中的高可用,又是由誰實現呢?

下面,我們就簡單的介紹一下,job 實現的大體流程。

結構

如上圖所示,在 job 被傳入服務器中,為了將 job 中的任務映射到客戶端,job 會形成兩個 allocation,task,以及 driver,而 job 實現期間的服務器分配,則是通過 evaluation 來實現。

  • evaluation:評估是 dtle 做出調度決策的機制。
  • allocation:分配是作業中的任務組和客戶端節點之間的映射。分配由 dtle 服務端創建,作為評估期間的調度決策的一部分。
  • task:job 中聲明的 task,記錄了源端,或者目標端的連接信息以及所需要複製的庫表信息。
  • driver:驅動,功能的具體實現,dtle 數據傳輸的具體實現,有 driver 進行用實現。

詳解

evaluation

  • 評估是 dtle 做出調度決策的機制。當理想的狀態(作業)或實際的狀態(客戶端)發生變化時,dtle 創建一個新的評估,以確定是否必須採取任何行動。在創建一個 job 後,同樣會觸發一次評估。

allocation

  • allocation,表示 job 的分配,它記錄了 task 的詳細的信息,同時,它是 dtle 進行高可用部分調度的一環,在 dtle 的官方文檔中,我們可以通過對應的 api 接口,查看 allocation 的信息,並且從中查看到 task 的運行狀態等等信息,報錯信息等等,用戶可以通過 allocation 的報錯信息,確定問題來自於源端,或者目標端。

task

  • 通過官方文檔中的 job 結構,我們可知,task 被分為了源端和目標端,他們各自記載了對應的數據庫信息以及所要傳輸的庫表信息,總體來說,task 是一個任務實現的最基本單元,他指定任務的驅動、驅動的配置、約束和所需的資源。在 task 啟動之後,則會調用對應的 driver。
  {    {        "Name":"dtle-demo",        "Tasks":[            {                "Type":"Src",                "Config":Object{...}            },            {                "Type":"Dest",                "Config":Object{...}            }        ]    }    }   

driver

  • driver:driver,執行任務的具體方法,driver 承擔了數據傳輸的具體實現,從讀取 binglog,到數據的回放,都由 driver 進行實現。driver 只為數據傳輸服務。

總結

以上,便是一個 job,從請求提交,到最終實現所經歷的一個簡單流程。總體來說,我們一般將 job 的實現分為兩個部分,一個部分是調度,調度部分實現 job 的高可用,以及 job 轉移等一系列事物。而來另外一部分,則是傳輸部分的具體實現,從源端目標端的連接,到數據的抽取、清洗、回放。

相關鏈接

dtle 官方手冊:https://actiontech.github.io/dtle-docs-cn/