Nacos Committer 張龍:Nacos Sync 的設計原理和規劃

圖:Nacos Meetup @杭州

與你同行,擡頭即是星空。git

本文整理自Nacos Committer 張龍的現場分享,阿里巴巴中間件授權發佈。github

隨着 Nacos 1.0.0 穩定版的發佈,愈來愈多的企業開始在測試/預演/生產環境中逐步部署 Nacos。目前,除了部分企業已處於轉型分佈式架構的過程當中,會考慮直接使用 Nacos 上生產,但仍有很多企業會考慮一些比較現實的問題:數據庫

  • 存量用戶如何遷移註冊中心到 Nacos?
  • 多區域註冊中心之間如何同步?
  • 已有註冊中心與 Nacos 如何並存使用?

這裏,我將經過對 Nacos Sync 的介紹,來回答這三個問題。網絡

Nacos Sync 是什麼?

Nacos Sync 是一個支持多種註冊中心的同步組件,基於 SpringBoot 開發框架,數據層採用 Spring Data JPA,遵循了標準的 JPA 訪問規範,支持多種數據源存儲,默認使用 Hibernate 實現,更加方便的支持表的自動建立更新。架構

下圖是 Nacos Sync 系統的概念圖,Nacos Sync 經過從各個註冊中心拉取註冊的服務實例數據同步到 Nacos,左右兩邊是不一樣的註冊中心,綠色表明目前是能夠進行雙向同步的,藍色表明暫時只能進行單向同步。框架

組件特性

Nacos Sync 使用了高效的事件異步驅動模型,支持多種自定義事件,使得同步任務處理的延時控制在3s,8C16G的單機可以支持6K的同步任務。異步

除了單機部署,Nacos Sync 也提供了高可用的集羣部署模式,做爲無狀態設計,支持將任務等狀態數據遷移到了數據庫,使得集羣擴展很是方便。分佈式

系統模塊架構

下圖是 Nacos Sync 目前的系統架構圖,畫的比較簡單,只是把一些比較重要的模塊作了描述。測試

Web Console: 提供給用戶進行註冊中心和同步任務進行相關界面操做優化

Processor Frame: 註冊中心和任務的業務處理邏輯

Timer Manager: 定時輪詢數據庫獲取同步任務進行處理

Event Frame: 異步事件來進行同步任務的同步以及刪除

Extension: 對接各類註冊中心客戶端的擴展實現

總體調用流程

咱們來看一下 Nacos Sync 一次完整的調用流程:

  1. 經過 Web 控制檯添加相關注冊中心,通常都必須配置兩個註冊中心,一個源註冊中心,另一個是目標註冊中心,註冊中心相關數據會寫入到數據庫;
  2. 添加完註冊中心之後,增長一個同步任務,添加須要同步的服務(對於Dubbo來講就是RPC接口,對於Spring Cloud就是應用名);
  3. Nacos Sync 會每隔 3s 從數據庫撈取同步任務,並經過異步事件的方式進行發佈;
  4. 同步服務管理監聽到定時任務發佈的的事件,目前有同步/刪除這兩種事件;
  5. 同步服務管理根據不一樣的策略選擇相關的同步服務進行真正同步邏輯處理;

目前已經支持同步類型

下面的表格介紹了目前支持的幾種同步類型,而且說明了在 Dubbo 和 Spring Cloud 下是否支持同步,表格中列舉的幾種註冊中心,不管單向仍是雙向同步都是在和 Nacos 進行交互。

使用場景和 Demo

  • 多個網絡互通的 Region 之間進行服務共享,打破 Region 之間的服務調用限制;

  • 雙向同步功能,支持 Dubbo+ZooKeeper 服務平滑遷移到 Dubbo+Nacos ;

這裏提供兩個 Demo ,用來分別演示上面的兩個經典使用場景,詳細的操做步驟能夠經過下方連接,進行訪問。

單向同步場景,在 Spring Cloud 生態中,Eureka 同步到 Nacos 示例 
https://github.com/paderlol/nacos-sync-example/tree/master/one-way-sync

雙向同步場景,在 Dubbo 生態中 ZooKeeper 與 Nacos 互相同步示例 
https://github.com/paderlol/nacos-sync-example/tree/master/two-way-sync

版本演進

Nacos Sync 目前已經發布3個小版本,經過下圖,咱們能夠看到每一個版本已經作了的一些工做,以及下個版本即將作的一些事情。

0.4.0 規劃介紹

  • 功能健壯性

同步數據一致性校驗,0.4.0版本前,同步任務執行以後,雙端數據一致性未進行檢查的;
註冊中心健康檢查;

  • 用戶體驗

同步數據實時狀態透出 ,0.4.0版本前,控制檯的任務狀態是數據庫的任務執行狀態,用戶沒辦法知道當前的數據狀態;
任務批量刪除;
多維度增長任務同步,優化只支持服務粒度,用戶只能一個一個添加的用戶體驗;

  • 功能完善
    支持 Eureka/Consul 和 Nacos 的雙向同步;

本文做者:張龍,Github ID: @paderlol,Nacos Committer,就任於長沙蜜獾信息科技有限公司。



本文做者:中間件小哥

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索