Apollo有一點很好,就是它是由國內攜程團隊開發,並且文檔寫的很全,代碼也徹底開源。若是去了解它也能夠直接去看它的官方文檔。mysql
在實際開發中都會與配置打交道,舉個簡單例子,咱們開發項目確定會鏈接數據庫,mysql也好oracle也好。那麼咱們 本地環境 和 線上環境 鏈接的數據確定是不同的,git
那若是沒有配置中心,咱們要作的就是在發佈前把本地數據庫配置信息改爲線上環境,若是僅僅是切換數據庫那倒還好,但隨着程序功能的日益複雜,程序的配置日益github
增多好比,各類功能的開關、參數的配置、服務器的地址。同時對程序配置的指望值也愈來愈高:配置修改後 實時生效,灰度發佈,分環境、spring
分集羣管理配置,完善的權限、審覈機制。在這樣的大環境下,傳統的經過配置文件、數據庫等方式已經愈來愈沒法知足開發人員對配置管理的需求。sql
Apollo配置中心應運而生!數據庫
在現代開發中配置的分類仍是蠻多的,下面借用楊波老師的一張圖,來看下目前比較常見的分類及場景。緩存
在咱們實際開發業務中,開關這個概念實際上是很是常見的,有些時候是須要用戶在頁面去進行開關操做,那麼咱們通常數據庫新建配置表來存儲用戶操做的開關。服務器
但有些時候是不須要用戶去操做的,只需咱們後臺開發人員進行配置開關的,那其實就不須要在數據庫去建一個配置表,而是經過配置中心就能夠完成了。網絡
Apollo(阿波羅)是攜程框架部門研發的開源配置管理中心,可以集中化管理應用不一樣環境、不一樣集羣的配置,配置修改後可以實時推送到應用端,而且具有規範的權限、oracle
流程治理等特性。
Apollo做爲爲配置中心,有着很是多的優勢。
Apollo支持4個維度管理Key-Value格式的配置:
一、application (應用) 二、environment (環境) 三、cluster (集羣) 四、namespace (命名空間)
一、application
一、Apollo 客戶端在運行時須要知道當前應用是誰,從而能夠根據不一樣的應用來獲取對應應用的配置。
二、每一個應用都須要有惟一的身份標識,能夠在代碼中配置 app.id
參數來標識當前應用,Apollo 會根據此指來辨別當前應用。
二、environment
在實際開發中,咱們的應用常常要部署在不一樣的環境中,通常狀況下分爲 開發、測試、生產 等等不一樣環境,不一樣環境中的配置也是不一樣的,在 Apollo 中默認提供了
四種環境:
FAT:功能測試環境
UAT:集成測試環境
DEV:開發環境
PRO:生產環境
在程序中若是想指定使用哪一個環境,能夠配置變量 env
的值爲對應環境名稱便可。
三、cluster
一、一個應用下不一樣實例的分組,好比典型的能夠按照數據中心分,把上海機房的應用實例分爲一個集羣,把北京機房的應用實例分爲另外一個集羣。
二、對不一樣的集羣,同一個配置能夠有不同的值,好比說上面所指的兩個北京、上海兩個機房設置兩個集羣,都有 mysql 配置參數,其中參數中配置的地址是不同的。
四、namespace
一個應用中不一樣配置的分組,能夠簡單地把 namespace 類比爲不一樣的配置文件,不一樣類型的配置存放在不一樣的文件中,如數據庫配置文件,RPC 配置文件等。
熟悉 SpringBoot 的都知道,SpringBoot 項目都有一個默認配置文件 application.yml,若是還想用多個配置,能夠建立多個配置文件來存放不一樣的配置信息,經過
指定 spring.profiles.active 參數指定應用不一樣的配置文件。這裏的 namespace 概念與其相似,將不一樣的配置放到不一樣的配置 namespace 中。
Namespace 分爲兩種權限,分別爲:
Apollo客戶端會把從服務端獲取到的配置在 本地文件系統緩存 一份,用於在遇到服務不可用,或網絡不通的時候,依然能從本地恢復配置,不影響應用正常運行。
本地緩存路徑默認位於如下路徑,因此請確保 /opt/data或C:\opt\data\目錄存在,且應用有讀寫權限。
本地配置文件會如下面的文件名格式放置於本地緩存路徑下:
{appId}+{cluster}+{namespace}.properties
網上有一張圖總結的很完整
總結
一、SpringCloudConfig優點是對SpringBoot原生支持,且是SpringCloud組件。缺點是 無界面管理,且須要git,SpringCloudBus、Mq支持其動態更新。
二、Apollo優點是技術棧單一,僅須要Mysql就能夠支持動態更新配置,便於維護。缺點是否是SpringCloud體系,雖然開源,版本更新也活躍,可是對SpringCloud的
支持沒有SpringCloudConfig的好。
別人罵我胖,我會生氣,由於我內心認可了我胖。別人說我矮,我就會以爲可笑,由於我內心知道我不可能矮。這就是咱們爲何會對別人的攻擊生氣。 攻我盾者,乃我心裏之矛(26)