CloudCanal實現跨互聯網數據安全同步(進階)

来源:https://www.cnblogs.com/clougence/archive/2022/12/09/16968279.html
-Advertisement-
Play Games

簡介 CloudCanal 實現的 基於 Kafka 構建安全的跨互聯網數據同步 方案被客戶用於生產後,又出現了新的需求,主要集中在方案能否更加輕量化和可控性上,簡而言之,去掉 Kafka 中轉,直接在 CloudCanal 中實現跨網路安全互通。 本篇文章即介紹 CloudCanal 實現的更加輕 ...


簡介

CloudCanal 實現的 基於 Kafka 構建安全的跨互聯網數據同步 方案被客戶用於生產後,又出現了新的需求,主要集中在方案能否更加輕量化和可控性上,簡而言之,去掉 Kafka 中轉,直接在 CloudCanal 中實現跨網路安全互通。
本篇文章即介紹 CloudCanal 實現的更加輕量化方案,特點包括

  • 無消息等獨立軟體依賴
  • 兩端資料庫完全不開放公網埠
  • 兩端資料庫元數據可映射
  • 基於 HTTPS 傳輸
  • 具備用戶名密碼鑒權機制
  • 支持多種資料庫異構互通

技術點

image.png

Tunnel數據源

去掉消息依賴的跨互聯網資料庫互通,我們是通過一個虛擬的數據源 Tunnel 實現。
Tunnel 數據源本身並不是實體資料庫,而是一組邏輯信息,包括

  • ip(或功能變數名稱)
  • port
  • 用戶名
  • 密碼
  • TLS 證書文件和密碼
  • 元數據

通過這個虛擬數據源,我們可以使用 HTTP(S) 或 TCP 實現數據拉取或者接收數據的目的,同時完全匹配 CloudCanal 業務模型,達到功能的完整性。

PUSH模型

對於數據傳輸模式 PUSH 或 PULL,我們選擇了 PUSH 模式,即客戶端將數據推送到服務端,本質原因在於

  • 主要解決互通問題,而非訂閱問題
  • 目標端同步寫入數據更加匹配 CloudCanal 其他目標端風格
  • 數據通道無數據持久化,無需維護 store 來暫存數據

當然,PUSH 模式也帶來一些問題,包括

  • 如何確保最終數據寫入再提交位點
  • 位點回溯複雜(全量和增量、不同數據源位點格式不一致)

對於上述兩個問題,我們採用 延遲提交位點技術 解決

延遲提交位點技術

採用 PUSH 模式後,位點管理是比較複雜且危險的工作,如果提早提交位點,可能丟數據。
為此,我們實現了 延遲提交位點技術,即客戶端每一次寫入 server 端,只返回已經提交的位點,並且將所有數據源、所有任務類型的位點序列化成 json 字元串。

通過這項技術,我們能夠確保位點之前的數據肯定已經寫到對端,並且在某些業務場景下,通過客戶端任務的位點回溯,達到重覆消費某一段時間數據的目的。

元數據映射

因為使用了虛擬的 Tunnel 數據源,並且其帶有 schema(存儲於CloudCanal kv配置表中), 所以針對這個數據源,我們模擬了表結構獲取和遷移的過程,讓其在任務創建和運維過程中如同一個真實存在的資料庫。
一個真實的 Tunnel 數據源的元數據如下:

[
  {
    "db": "cc_virtual_db",
    "schemas": [
      {
        "schema": "cc_virtual_schema",
        "tables": [
          {
            "table": "WORKER_STATS",
            "columns": [
              {
                "name": "ID",
                "jdbcType": -5,
                "typeName": "LONG",
                "key": true
              },
              {
                "name": "GMT_CREATE",
                "jdbcType": 93,
                "typeName": "TIMESTAMP",
                "key": false
              },
              {
                "name": "AUCRDT",
                "jdbcType": 93,
                "typeName": "TIMESTAMP",
                "key": false
              }
            ]
          },
          {
            "table": "KBS_QUESTION",
            "columns": [
              {
                "name": "ID",
                "jdbcType": -5,
                "typeName": "LONG",
                "key": true
              },
              {
                "name": "CATEGORY",
                "jdbcType": 12,
                "typeName": "STRING",
                "key": false
              }
            ]
          }
        ]
      }
    ]
  }
]

我們可以通過結構遷移 (MySQL/SQLServer/Oracle -> Tunnel) 擴充它,或者直接通過 數據源管理->更多->查看配置->_**dbsJson **_進行修改。

操作示例

本示例使用阿裡雲資源模擬杭州 RDS for MySQL 到深圳 RDS for MySQL , 兩端資料庫均不開公網埠,數據走互聯網, 採用 HTTPS 傳輸和用戶名密碼認證。

環境準備

  • 杭州環境部署 CloudCanal ,併購買 RDS for MySQL 作為源端

image.png
image.png

  • 深圳環境部署 CloudCanal , 併購買 RDS for MySQL 作為目標端

image.png
image.png

  • 因 CloudCanal 為 docker 版本 , 深圳環境 CloudCanal 安裝包解壓後 ,需要修改 docker-compose.yml 埠映射再安裝/升級,並開放 ECS 安全組相關埠,以便遠程連接。
    • 此例以 18443 埠作為 Tunnel 數據源監聽埠

image.png
image.png

為目標端資料庫初始化元數據

  • 因無法通過 Tunnel 到對端資料庫做結構遷移,所以需要事先使用 mysqldump 等工具初始化對端資料庫結構

image.png

添加 Tunnel 數據源

  • 分別在源端和目標端 CloudCanal 配置 Tunnel 數據源

image.png

  • 源端數據源列表

image.png

  • 目標端數據源列表

image.png

為 Tunnel 初始化元數據

  • 源端創建一個 MySQL -> Tunnel 結構遷移,並完成

image.png
image.png

  • 目標端
    • 從源端 Tunnel 數據源拷貝結構並複製到對端

image.png
image.png
image.png

目標端任務創建

  • 選擇 Tunnel 和 目標資料庫

image.png

  • 選擇數據同步

image.png

  • 選擇表、列、映射略
  • 任務正常運行,監聽埠並準備接收數據

image.png

源端任務創建

  • 選擇源端資料庫 和 Tunnel 數據源

image.png

  • 選擇數據同步,並初始化數據

image.png

  • 數據初始化中(如有效率問題,可忽略)

image.png

  • 數據持續同步中

image.png

數據驗證

造增量數據

  • 為了造數據簡便,開下源端資料庫公網地址

image.png

數據校驗

  • 在深圳環境添加源端數據源,並做數據校驗。結果顯示數據一致。

image.png

常見問題

  • 目前支持哪些鏈路的互通?

    • MySQL/SQLServer/ORACLE -> MySQL , 其他互通按需添加。
  • Tunnel 到對端資料庫能做結構遷移麽?準備表結構比較麻煩

    • 因為資料庫結構對元數據精度要求很高,Tunnel中間結構主要為同步服務,所以元數據級別上還無法構成精確的結構遷移源端。建議構建臨時實例(只dump表結構)並開公網,再使用CloudCanal結構遷移解決問題。
  • Tunnel 數據源有結構,能動態編輯麽?

    • Tunnel 數據源模擬了一個資料庫,編輯任務能力天然具備。加表先編輯目標端任務,再編輯源端任務,否則反之。我們後續計劃用一篇專門的文章介紹這個運維操作。
  • 目前數據互通還存在什麼問題?

    • 對於 blob 等欄位類型還需要進一步支持和驗證
    • 跨互聯網,性能層面需要經過特別的優化
    • 安全層面,目前僅用到 HTTPS 證書加密,配合自定義的賬號密碼

總結

本文主要介紹純粹通過 CloudCanal 進行數據互通實踐,通過引入虛擬數據源,達成數據互通和元數據映射等能力,具備不錯的可落地性。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 之所以會搞這個手勢識別分類,其實是為了滿足之前群友提的需求,就是針對稚暉君的ElectronBot機器人的上位機軟體的功能豐富,因為本來擅長的技術棧都是.NET,也剛好試試全能的.NET是不是真的全能就想著做下試試了,MediaPipe作為谷歌開源的機器視覺庫,功能很豐富了,而且也支持c++, ...
  • 一:背景 1. 簡介 .NET 高級調試要想玩的好,看懂彙編是基本功,但看懂彙編和能寫點彙編又完全是兩回事,所以有時候看的多,總手癢癢想寫一點,在 Windows 平臺上搭建彙編環境不是那麼容易,大多還是用微軟的 MASM + DosBox 搭一個 8086 的環境,這玩意距今快 50 年了。 在以 ...
  • 原文鏈接 [https://www.cnblogs.com/densen2014/p/16964858.html] 在Blazor項目嵌入 pdf.js 時不能正確顯示中文,瀏覽器F12顯示如下錯誤 錯誤 l10n.js /web/locale/locale.properties not found ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家講的是存儲器大廠Micron的NOR Flash晶元特殊絲印設計(FBGA代碼)。 痞子衡之前寫過一篇文章 《J-Flash在Micron Flash固定區域下載校驗失敗的故事》,這篇文章里提及了 Micron 家的串列 NOR Flash 與 ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家講的是國內外串列NOR Flash廠商官網Cross Reference功能。 串列 NOR Flash 是一個相對發展穩定的市場,目前全球市場約 90% 的份額被中國的三家廠商(Winbond華邦/MXIC旺巨集/GigaDevice兆易創新) ...
  • 我們前面採集的日誌數據已經保存到 Kafka 中,作為日誌數據的 ODS 層,從 Kafka 的ODS 層讀取的日誌數據分為 3 類, 頁面日誌、啟動日誌和曝光日誌。這三類數據雖然都是用戶行為數據,但是有著完全不一樣的數據結構,所以要拆分處理。將拆分後的不同的日誌寫回 Kafka 不同主題中,作為日 ...
  • 前言 "redis是單線程的" 這句話我們耳熟能詳。但它有一定的前提,redis整個服務不可能只用到一個線程完成所有工作,它還有持久化、key過期刪除、集群管理等其它模塊,redis會通過fork子進程或開啟額外的線程去處理。所謂的單線程是指從網路連接(accept) -> 讀取請求內容(read) ...
  • 作者:李紅建 責編:宇亭 在第一期研發分享中,我們解釋了,為什麼Tinamu作為一款列式存儲引擎在初期不支持 Delete 功能的原因,然後對一些友商列式存儲引擎的 Delete 方案進行了一些調研和總結,感興趣的同學可以查看我們上一期的分享:關於列式資料庫實現 Delete 功能的調研之旅。 本期 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...