微服務架構學習與思考(13):分佈式配置中心

一、配置中心的誕生

用編程語言編寫應用項目時,一般都會有項目的配置文件。比如用 java 編寫項目,有一個 properties 的配置文件,會把一些配置信息寫入到該文本文件中,例如數據庫相關的配置信息。

這也體現了軟件設計的一個原則:關注點分離。把代碼和配置信息相分離。

image-20230528174718494

​ (單體應用項目配置文件)

在單體應用項目中,這個配置文件一般都是靜態的文本文件。項目比較小時,配置信息不是很多、變動也少,這時使用靜態配置文件足矣。修改了配置後,重啓一下應用就可以了。

隨着項目的發展壯大,業務增多,用戶增多,功能增多,原來的大單體應用項目會慢慢的拆分爲多個獨立的應用項目,然後向着微服務架構發展演變。

image-20230528182956226

​ (大單體應用拆爲爲各個獨立應用)

這樣,隨着大單體項目拆分爲一個一個獨立應用項目時,配置文件也會跟着項目遷移,每個項目都有自己的配置文件,配置文件變得分散。

假如業務要增加一個功能,而實現這個功能需要協調多個項目開發,並修改各自配置時,就需要到一個一個項目上去修改配置,然後重啓應用以使配置生效。

這樣做是可行的,但是有沒有可以改進的地方?讓配置修改更加高效,而不需要一個文件一個文件去修改,這樣太低效了。

如何從系統架構角度出發,構建靈活、易擴展的系統,快速應對配置需求的變化。

能不能獨立出一個存儲配置的系統?能不能把這些配置信息集中存儲在一個地方,修改時只需在一個地方修改,然後動態分發給相應的應用項目?當然可以,這就是配置中心

image-20230528193642156

隨着多個項目向着微服務架構的進化,應用項目分拆爲更多的小服務,由各種服務來給應用項目提供功能,服務越多,配置信息也越多,配置中心也需要更多功能才能滿足需求,配置中心也會向着分佈式配置管理中心進化。

二、靜態配置文件的問題

在業務量比較小的單體應用中,靜態文本配置文件使用是沒有大的問題。但是隨着業務逐漸發展壯大,對大單體拆分爲多個應用,就會產生一些問題:

  • 配置文件分散,修改起來比較麻煩
  • 配置生效不及時,修改後需要重啓應用以使配置生效
  • 多環境配置,無法區分多個配置環境,比如開發的環境,測試的環境,預發佈的環境,生產的環境
  • 各種配置信息多,難以管理,比如分佈式限流的配置信息,各種監控的配置信息等等配置
  • 配置信息無法回滾,沒有類似版本控制功能的話,就無法進行回滾

等等各種問題。

三、配置中心功能

上面是靜態配置文件最初出現的問題,後面隨着應用的拆分、隨着業務功能越來越多,對配置的功能要求也逐漸變多:

  • 版本管理功能,配置的發佈有版本功能可支持回滾,也進行信息回溯
  • 配置信息回滾
  • 灰度發佈功能,支持功能灰度發佈
  • 集中統一管理,對多環境配置信息管理,比如開發、測試、生產等各種環境的配置信息
  • 實時生效,修改完後及時下發給對應的應用,應用可以進行熱更新配置,不用重啓應用
  • 推送配置信息的軌跡
  • 集羣功能,有集羣功能,能擴容,能容災,高可用
  • 客戶端配置更新狀態跟蹤
  • 權限的管理,變更配置信息的審計
  • UI界面管理

等等功能。

配置中心的這些功能,解決了靜態配置文件出現的問題,而且還新增了很多額外的功能。

四、開源配置中心

有很多開源的軟件可以作爲配置中心使用,比如下面這些:

當然還有很多其他的,比如 Spring Cloud Config,Disconf,Zookeeper 等。

下面介紹下 Apollo 分佈式配置中心。

五、Apollo分佈式配置中心

Apollo(阿波羅)介紹

image-20230528204632789

​ (來源:https://github.com/apolloconfig/apollo/ apollo github)

Apollo(阿波羅)是一款可靠的分佈式配置管理中心,誕生於攜程框架研發部,能夠集中化管理應用不同環境、不同集羣的配置,配置修改後能夠實時推送到應用端,並且具備規範的權限、流程治理等特性,適用於微服務配置管理場景。

服務端基於Spring Boot和Spring Cloud開發,打包後可以直接運行,不需要額外安裝Tomcat等應用容器。

背景:

隨着程序功能的日益複雜,程序的配置日益增多:各種功能的開關、參數的配置、服務器的地址……

對程序配置的期望值也越來越高:配置修改後實時生效,灰度發佈,分環境、分集羣管理配置,完善的權限、審覈機制……

在這樣的大環境下,傳統的通過配置文件、數據庫等方式已經越來越無法滿足開發人員對配置管理的需求。Apollo配置中心應運而生!

--- 來自 Apollo 官網

Apollo 功能特性

  • 統一管理不同環境、不同集羣的配置
  • 配置修改實時生效(熱發佈)
  • 版本發佈管理
  • 灰度發佈
  • 權限管理、發佈審覈、操作審計
  • 客戶端配置信息監控
  • 多種客戶端,並提供Java和.Net原生客戶端
  • 提供開放平臺API
  • UI 界面管理

更多信息請查看文檔:https://www.apolloconfig.com/#/zh/design/apollo-introduction

架構設計

Apollo基礎模型

  1. 用戶在配置中心對配置進行修改併發布
  2. 配置中心通知Apollo客戶端有配置更新
  3. Apollo客戶端從配置中心拉取最新的配置、更新本地配置並通知到應用

image-20230528210004468

架構模塊

五個主要核心模塊:

  • Config Service

    • 提供配置的讀取、推送等功能
    • 服務對象是Apollo客戶端
  • Admin Service

    • 提供配置的修改、發佈等功能
    • 服務對象是Apollo Portal(管理界面)
  • Meta Server

    • Meta Server用於封裝Eureka的服務發現接口
  • Client

    • 實時獲取配置信息
    • 通過訪問 Meta Server 獲取 Config Service 服務列表
    • 在Client側會做load balance、錯誤重試
  • Portal

    • 配置管理界面 UI
    • 通過 Meta Server 獲取 Admin Service 服務列表
    • 在 Portal側會做 load balance、錯誤重試

image-20230528210114024

以上信息和圖片來源:https://www.apolloconfig.com/#/zh/design/apollo-design

Apollo部署

這部分請查看部署文檔:https://www.apolloconfig.com/#/zh/deployment/quick-start

Apollo文檔

開源地址和文檔:

歡迎大家留言討論和點推薦鼓勵

六、參考

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