一、配置中心的誕生
用編程語言編寫應用項目時,一般都會有項目的配置文件。比如用 java 編寫項目,有一個 properties 的配置文件,會把一些配置信息寫入到該文本文件中,例如數據庫相關的配置信息。
這也體現了軟件設計的一個原則:關注點分離。把代碼和配置信息相分離。
(單體應用項目配置文件)
在單體應用項目中,這個配置文件一般都是靜態的文本文件。項目比較小時,配置信息不是很多、變動也少,這時使用靜態配置文件足矣。修改了配置後,重啓一下應用就可以了。
隨着項目的發展壯大,業務增多,用戶增多,功能增多,原來的大單體應用項目會慢慢的拆分爲多個獨立的應用項目,然後向着微服務架構發展演變。
(大單體應用拆爲爲各個獨立應用)
這樣,隨着大單體項目拆分爲一個一個獨立應用項目時,配置文件也會跟着項目遷移,每個項目都有自己的配置文件,配置文件變得分散。
假如業務要增加一個功能,而實現這個功能需要協調多個項目開發,並修改各自配置時,就需要到一個一個項目上去修改配置,然後重啓應用以使配置生效。
這樣做是可行的,但是有沒有可以改進的地方?讓配置修改更加高效,而不需要一個文件一個文件去修改,這樣太低效了。
如何從系統架構角度出發,構建靈活、易擴展的系統,快速應對配置需求的變化。
能不能獨立出一個存儲配置的系統?能不能把這些配置信息集中存儲在一個地方,修改時只需在一個地方修改,然後動態分發給相應的應用項目?當然可以,這就是配置中心。
隨着多個項目向着微服務架構的進化,應用項目分拆爲更多的小服務,由各種服務來給應用項目提供功能,服務越多,配置信息也越多,配置中心也需要更多功能才能滿足需求,配置中心也會向着分佈式配置管理中心進化。
二、靜態配置文件的問題
在業務量比較小的單體應用中,靜態文本配置文件使用是沒有大的問題。但是隨着業務逐漸發展壯大,對大單體拆分爲多個應用,就會產生一些問題:
- 配置文件分散,修改起來比較麻煩
- 配置生效不及時,修改後需要重啓應用以使配置生效
- 多環境配置,無法區分多個配置環境,比如開發的環境,測試的環境,預發佈的環境,生產的環境
- 各種配置信息多,難以管理,比如分佈式限流的配置信息,各種監控的配置信息等等配置
- 配置信息無法回滾,沒有類似版本控制功能的話,就無法進行回滾
等等各種問題。
三、配置中心功能
上面是靜態配置文件最初出現的問題,後面隨着應用的拆分、隨着業務功能越來越多,對配置的功能要求也逐漸變多:
- 版本管理功能,配置的發佈有版本功能可支持回滾,也進行信息回溯
- 配置信息回滾
- 灰度發佈功能,支持功能灰度發佈
- 集中統一管理,對多環境配置信息管理,比如開發、測試、生產等各種環境的配置信息
- 實時生效,修改完後及時下發給對應的應用,應用可以進行熱更新配置,不用重啓應用
- 推送配置信息的軌跡
- 集羣功能,有集羣功能,能擴容,能容災,高可用
- 客戶端配置更新狀態跟蹤
- 權限的管理,變更配置信息的審計
- UI界面管理
等等功能。
配置中心的這些功能,解決了靜態配置文件出現的問題,而且還新增了很多額外的功能。
四、開源配置中心
有很多開源的軟件可以作爲配置中心使用,比如下面這些:
當然還有很多其他的,比如 Spring Cloud Config,Disconf,Zookeeper 等。
下面介紹下 Apollo 分佈式配置中心。
五、Apollo分佈式配置中心
Apollo(阿波羅)介紹
(來源: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基礎模型
- 用戶在配置中心對配置進行修改併發布
- 配置中心通知Apollo客戶端有配置更新
- Apollo客戶端從配置中心拉取最新的配置、更新本地配置並通知到應用
架構模塊
五個主要核心模塊:
-
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、錯誤重試
以上信息和圖片來源:https://www.apolloconfig.com/#/zh/design/apollo-design
Apollo部署
這部分請查看部署文檔:https://www.apolloconfig.com/#/zh/deployment/quick-start
Apollo文檔
開源地址和文檔:
歡迎大家留言討論和點推薦鼓勵