用程式語言編寫應用專案時,一般都會有專案的組態檔。比如用 java 編寫專案,有一個 properties 的組態檔,會把一些設定資訊寫入到該文字檔案中,例如資料庫相關的設定資訊。
這也體現了軟體設計的一個原則:關注點分離。把程式碼和設定資訊相分離。
(單體應用專案組態檔)
在單體應用專案中,這個組態檔一般都是靜態的文字檔案。專案比較小時,設定資訊不是很多、變動也少,這時使用靜態組態檔足矣。修改了設定後,重啟一下應用就可以了。
隨著專案的發展壯大,業務增多,使用者增多,功能增多,原來的大單體應用專案會慢慢的拆分為多個獨立的應用專案,然後向著微服務架構發展演變。
(大單體應用拆為為各個獨立應用)
這樣,隨著大單體專案拆分為一個一個獨立應用專案時,組態檔也會跟著專案遷移,每個專案都有自己的組態檔,組態檔變得分散。
假如業務要增加一個功能,而實現這個功能需要協調多個專案開發,並修改各自設定時,就需要到一個一個專案上去修改設定,然後重啟應用以使設定生效。
這樣做是可行的,但是有沒有可以改進的地方?讓設定修改更加高效,而不需要一個檔案一個檔案去修改,這樣太低效了。
如何從系統架構角度出發,構建靈活、易擴充套件的系統,快速應對設定需求的變化。
能不能獨立出一個儲存設定的系統?能不能把這些設定資訊集中儲存在一個地方,修改時只需在一個地方修改,然後動態分發給相應的應用專案?當然可以,這就是設定中心。
隨著多個專案向著微服務架構的進化,應用專案分拆為更多的小服務,由各種服務來給應用專案提供功能,服務越多,設定資訊也越多,設定中心也需要更多功能才能滿足需求,設定中心也會向著分散式設定管理中心進化。
在業務量比較小的單體應用中,靜態文字組態檔使用是沒有大的問題。但是隨著業務逐漸發展壯大,對大單體拆分為多個應用,就會產生一些問題:
等等各種問題。
上面是靜態組態檔最初出現的問題,後面隨著應用的拆分、隨著業務功能越來越多,對設定的功能要求也逐漸變多:
等等功能。
設定中心的這些功能,解決了靜態組態檔出現的問題,而且還新增了很多額外的功能。
有很多開源的軟體可以作為設定中心使用,比如下面這些:
當然還有很多其他的,比如 Spring Cloud Config,Disconf,Zookeeper 等。
下面介紹下 Apollo 分散式設定中心。
(來源:https://github.com/apolloconfig/apollo/ apollo github)
Apollo(阿波羅)是一款可靠的分散式設定管理中心,誕生於攜程框架研發部,能夠集中化管理應用不同環境、不同叢集的設定,設定修改後能夠實時推播到應用端,並且具備規範的許可權、流程治理等特性,適用於微服務設定管理場景。
伺服器端基於Spring Boot和Spring Cloud開發,打包後可以直接執行,不需要額外安裝Tomcat等應用容器。
背景:
隨著程式功能的日益複雜,程式的設定日益增多:各種功能的開關、引數的設定、伺服器的地址……
對程式設定的期望值也越來越高:設定修改後實時生效,灰度釋出,分環境、分叢集管理設定,完善的許可權、稽核機制……
在這樣的大環境下,傳統的通過組態檔、資料庫等方式已經越來越無法滿足開發人員對設定管理的需求。Apollo設定中心應運而生!
--- 來自 Apollo 官網
更多資訊請檢視檔案:https://www.apolloconfig.com/
五個主要核心模組:
Config Service
Admin Service
Meta Server
Client
Portal
以上資訊和圖片來源:https://www.apolloconfig.com/
這部分請檢視部署檔案:https://www.apolloconfig.com/
開源地址和檔案: