(四十五) springcloud分佈式微服務電商 商城之跟我學習SpringCloud-Smconf(分佈式配置管理框架)概述

Smconf 專注於分佈式環境下的配置的統一管理。採用 Java+Zookeeper+Mongodb+Spring Boot 開發。目前只支持 Java,其他的使用語言需要通過調用 REST API 來實現。

每個技術人都有一個開源的夢想,那就是自己也能開發出一個讓很多人使用的框架。其實分享使用不是重點,重點是自己寫的架構本身,你對它的各個方面都瞭如指掌,可以很方便添加新功能,比如加上一些適應公司內部需求的功能。

筆者之所以拋棄了 SpringCloud Config,一方面在於它的配置刷新這塊不是很方便,需要集成消息總線加上 WebHook 才能完成。另一個原因就是一些特殊的需求實現起來沒那麼方便,比如推送配置到指定的節點。

Smconf 目前支持的功能如下:

  • 提供配置的統一管理。
  • 多個環境(生產環境爲 prod,線上測試環境爲 online,線下測試環境爲 test,開發環境爲 dev)。
  • Web 後臺配置管理。
  • 配置修改後實時同步到使用的客戶端。
  • 無縫集成 Spring 和 Spring Boot 項目。
  • 非 Spring 項目中也可以使用。
  • Web 後臺支持不同賬號管理不同環境的配置。
  • 支持水平擴容、負載,部署多個 Server、Client 自動發現。
  • 支持配置更新回調接口做擴展。
  • 支持手動觸發推送配置到指定的節點。
  • 修改配置可以選擇推送的節點,可用於做灰度發佈測試。
  • 配置的歷史修改記錄。

Smconf 工作原理

如圖 1 所示爲 Smconf 的整個架構規劃,Smconf 同樣也分爲服務端和客戶端兩個部分,服務端負責配置信息的管理,客戶端負責拉取配置信息及上傳配置信息。

1. 基本概念

在正式介紹 Smconf 的工作原理之前,我們先來看幾個基本概念。

  • 環境:在 Smconf 中總共分了 4 個環境,分別是生產環境(prod)、線上測試環境(online)、線下測試環境(test)、開發環境(dev),Smconf Client 會根據不同的環境加載不同的配置。
  • 系統:這裏的系統就是指服務的名稱,能夠直觀反映這個配置是哪個服務在使用。
  • 配置文件:一個系統中有多個配置文件,可以將同類的配置放到一個文件中,也可以只用一個配置文件,配置文件需要定義一個實體類。
  • 配置 key:一個配置文件中有多個配置項,實體類的字段名稱就是配置的 key,字段的值就是配置的 value。

2. 客戶端講解

客戶端在啓動的時候會將自身的信息註冊到 Zookeeper 中,爲每一個配置文件註冊一個節點,添加 watcher 監聽,同時獲取 Server 的節點信息,然後連接 Smconf Server 初始化配置數據或者拉取最新的配置到本地。

配置信息只有在配置中心不存在時纔會初始化配置,如存在,則拉取配置中心的配置覆蓋本地的配置,當然也可以通過配置項來執行是否拉取遠程配置。

在 Smconf 中每個配置都必須存在於某一個配置文件中,拉取的配置信息會註冊到配置文件的實體類中,配置類是受 Spring 管理的,可以直接注入使用。

3. 服務端講解

接着來看服務端,配置信息是存儲在 Mongodb 中的,Mongodb 可以做副本集,不存在單點問題。可以啓動多個 Smconf Server,並且不需要做負載均衡,在啓動的時候它會將自身的信息註冊到 Zookeeper 中。

當配置發生修改的時候,通過觸發 Zookeeper 的 watcher 事件來通知 Smconf Client 配置有修改,需要重新加載配置。

Smconf 提供了友好的 Web 頁面對配置信息進行管理,通過不同的賬號、不同的權限控制,確保配置不被隨便修改。

推薦電子商務源碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章