微服務(wù)架構(gòu)系列文章集合:https://www.cnblogs.com/jiujuan/p/17307285.html
一、配置中心的誕生
用編程語言編寫應(yīng)用項目時,一般都會有項目的配置文件。比如用 java 編寫項目,有一個 properties 的配置文件,會把一些配置信息寫入到該文本文件中,例如數(shù)據(jù)庫相關(guān)的配置信息。
這也體現(xiàn)了軟件設(shè)計的一個原則:關(guān)注點分離。把代碼和配置信息相分離。
? (單體應(yīng)用項目配置文件)
在單體應(yīng)用項目中,這個配置文件一般都是靜態(tài)的文本文件。項目比較小時,配置信息不是很多、變動也少,這時使用靜態(tài)配置文件足矣。修改了配置后,重啟一下應(yīng)用就可以了。
隨著項目的發(fā)展壯大,業(yè)務(wù)增多,用戶增多,功能增多,原來的大單體應(yīng)用項目會慢慢的拆分為多個獨(dú)立的應(yīng)用項目,然后向著微服務(wù)架構(gòu)發(fā)展演變。
? (大單體應(yīng)用拆為為各個獨(dú)立應(yīng)用)
這樣,隨著大單體項目拆分為一個一個獨(dú)立應(yīng)用項目時,配置文件也會跟著項目遷移,每個項目都有自己的配置文件,配置文件變得分散。
假如業(yè)務(wù)要增加一個功能,而實現(xiàn)這個功能需要協(xié)調(diào)多個項目開發(fā),并修改各自配置時,就需要到一個一個項目上去修改配置,然后重啟應(yīng)用以使配置生效。
這樣做是可行的,但是有沒有可以改進(jìn)的地方?讓配置修改更加高效,而不需要一個文件一個文件去修改,這樣太低效了。
如何從系統(tǒng)架構(gòu)角度出發(fā),構(gòu)建靈活、易擴(kuò)展的系統(tǒng),快速應(yīng)對配置需求的變化。
能不能獨(dú)立出一個存儲配置的系統(tǒng)?能不能把這些配置信息集中存儲在一個地方,修改時只需在一個地方修改,然后動態(tài)分發(fā)給相應(yīng)的應(yīng)用項目?當(dāng)然可以,這就是配置中心。
隨著多個項目向著微服務(wù)架構(gòu)的進(jìn)化,應(yīng)用項目分拆為更多的小服務(wù),由各種服務(wù)來給應(yīng)用項目提供功能,服務(wù)越多,配置信息也越多,配置中心也需要更多功能才能滿足需求,配置中心也會向著分布式配置管理中心進(jìn)化。
二、靜態(tài)配置文件的問題
在業(yè)務(wù)量比較小的單體應(yīng)用中,靜態(tài)文本配置文件使用是沒有大的問題。但是隨著業(yè)務(wù)逐漸發(fā)展壯大,對大單體拆分為多個應(yīng)用,就會產(chǎn)生一些問題:
- 配置文件分散,修改起來比較麻煩
- 配置生效不及時,修改后需要重啟應(yīng)用以使配置生效
- 多環(huán)境配置,無法區(qū)分多個配置環(huán)境,比如開發(fā)的環(huán)境,測試的環(huán)境,預(yù)發(fā)布的環(huán)境,生產(chǎn)的環(huán)境
- 各種配置信息多,難以管理,比如分布式限流的配置信息,各種監(jiān)控的配置信息等等配置
- 配置信息無法回滾,沒有類似版本控制功能的話,就無法進(jìn)行回滾
等等各種問題。
三、配置中心功能
上面是靜態(tài)配置文件最初出現(xiàn)的問題,后面隨著應(yīng)用的拆分、隨著業(yè)務(wù)功能越來越多,對配置的功能要求也逐漸變多:
- 版本管理功能,配置的發(fā)布有版本功能可支持回滾,也進(jìn)行信息回溯
- 配置信息回滾
- 灰度發(fā)布功能,支持功能灰度發(fā)布
- 集中統(tǒng)一管理,對多環(huán)境配置信息管理,比如開發(fā)、測試、生產(chǎn)等各種環(huán)境的配置信息
- 實時生效,修改完后及時下發(fā)給對應(yīng)的應(yīng)用,應(yīng)用可以進(jìn)行熱更新配置,不用重啟應(yīng)用
- 推送配置信息的軌跡
- 集群功能,有集群功能,能擴(kuò)容,能容災(zāi),高可用
- 客戶端配置更新狀態(tài)跟蹤
- 權(quán)限的管理,變更配置信息的審計
- UI界面管理
等等功能。
配置中心的這些功能,解決了靜態(tài)配置文件出現(xiàn)的問題,而且還新增了很多額外的功能。
四、開源配置中心
有很多開源的軟件可以作為配置中心使用,比如下面這些:
- Apollo
- Nacos
- ETCD
- Consul
- k8s ConfigMap
當(dāng)然還有很多其他的,比如 Spring Cloud Config,Disconf,Zookeeper 等。
下面介紹下 Apollo 分布式配置中心。
五、Apollo分布式配置中心
Apollo(阿波羅)介紹
? (來源:https://github.com/apolloconfig/apollo/ apollo github)
Apollo(阿波羅)是一款可靠的分布式配置管理中心,誕生于攜程框架研發(fā)部,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性,適用于微服務(wù)配置管理場景。
服務(wù)端基于Spring Boot和Spring Cloud開發(fā),打包后可以直接運(yùn)行,不需要額外安裝Tomcat等應(yīng)用容器。
背景:
隨著程序功能的日益復(fù)雜,程序的配置日益增多:各種功能的開關(guān)、參數(shù)的配置、服務(wù)器的地址……
對程序配置的期望值也越來越高:配置修改后實時生效,灰度發(fā)布,分環(huán)境、分集群管理配置,完善的權(quán)限、審核機(jī)制……
在這樣的大環(huán)境下,傳統(tǒng)的通過配置文件、數(shù)據(jù)庫等方式已經(jīng)越來越無法滿足開發(fā)人員對配置管理的需求。Apollo配置中心應(yīng)運(yùn)而生!
--- 來自 Apollo 官網(wǎng)
Apollo 功能特性
- 統(tǒng)一管理不同環(huán)境、不同集群的配置
- 配置修改實時生效(熱發(fā)布)
- 版本發(fā)布管理
- 灰度發(fā)布
- 權(quán)限管理、發(fā)布審核、操作審計
- 客戶端配置信息監(jiān)控
- 多種客戶端,并提供Java和.Net原生客戶端
- 提供開放平臺API
- UI 界面管理
更多信息請查看文檔:https://www.apolloconfig.com/#/zh/design/apollo-introduction
架構(gòu)設(shè)計
Apollo基礎(chǔ)模型
- 用戶在配置中心對配置進(jìn)行修改并發(fā)布
- 配置中心通知Apollo客戶端有配置更新
- Apollo客戶端從配置中心拉取最新的配置、更新本地配置并通知到應(yīng)用
架構(gòu)模塊
五個主要核心模塊:
-
Config Service
- 提供配置的讀取、推送等功能
- 服務(wù)對象是Apollo客戶端
-
Admin Service
- 提供配置的修改、發(fā)布等功能
- 服務(wù)對象是Apollo Portal(管理界面)
-
Meta Server
- Meta Server用于封裝Eureka的服務(wù)發(fā)現(xiàn)接口
-
Client
- 實時獲取配置信息
- 通過訪問 Meta Server 獲取 Config Service 服務(wù)列表
- 在Client側(cè)會做load balance、錯誤重試
-
Portal
- 配置管理界面 UI
- 通過 Meta Server 獲取 Admin Service 服務(wù)列表
- 在 Portal側(cè)會做 load balance、錯誤重試
以上信息和圖片來源:https://www.apolloconfig.com/#/zh/design/apollo-design
Apollo部署
這部分請查看部署文檔:https://www.apolloconfig.com/#/zh/deployment/quick-start
Apollo文檔
開源地址和文檔:
- https://www.apolloconfig.com/#/zh/README 中文文檔
- https://github.com/apolloconfig/apollo/ 開源地址
歡迎大家留言討論和點推薦鼓勵文章來源:http://www.zghlxwxcb.cn/news/detail-462476.html
也可以到我的公眾號:九卷技術(shù)錄:微服務(wù)架構(gòu)學(xué)習(xí)與思考(13):分布式配置中心 繼續(xù)討論文章來源地址http://www.zghlxwxcb.cn/news/detail-462476.html
六、參考
- https://github.com/apolloconfig/apollo/
- https://www.apolloconfig.com/#/zh/
- https://github.com/alibaba/nacos
- https://github.com/etcd-io/etcd
- https://github.com/hashicorp/consul
- https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-pod-configmap/
到了這里,關(guān)于微服務(wù)架構(gòu)學(xué)習(xí)與思考(13):分布式配置中心的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!