Java Apollo 配置中心介紹

Apollo背景

隨著程序功能的日益復雜,程序的配置日益增多:各種功能的開關、參數(shù)的配置、服務器的地址……

對程序配置的期望值也越來越高:配置修改后實時生效,灰度發(fā)布,分環(huán)境、分集群管理配置,完善的權限、審核機制……

在這樣的大環(huán)境下,傳統(tǒng)的通過配置文件、數(shù)據(jù)庫等方式已經越來越無法滿足開發(fā)人員對配置管理的需求。

Apollo配置中心應運而生!

1.2 Apollo簡介

Apollo(阿波羅)是攜程框架部門研發(fā)的開源配置管理中心,能夠集中化管理應用不同環(huán)境、不同集群的配置,配置修改后能夠實時推送到應用端,并且具備規(guī)范的權限、流程治理等特性。

Apollo支持4個維度管理Key-Value格式的配置:

application (應用)

environment (環(huán)境)

cluster (集群)

namespace (命名空間)

同時,Apollo基于開源模式開發(fā),開源地址:https://github.com/ctripcorp/apollo

配置基本概念

既然Apollo定位于配置中心,那么在這里有必要先簡單介紹一下什么是配置。

按照我們的理解,配置有以下幾個屬性:

配置是獨立于程序的只讀變量

配置首先是獨立于程序的,同一份程序在不同的配置下會有不同的行為。

其次,配置對于程序是只讀的,程序通過讀取配置來改變自己的行為,但是程序不應該去改變配置。

常見的配置有:DB Connection Str、Thread Pool Size、Buffer Size、Request Timeout、Feature Switch、Server Urls等。

配置伴隨應用的整個生命周期

配置貫穿于應用的整個生命周期,應用在啟動時通過讀取配置來初始化,在運行時根據(jù)配置調整行為。

配置可以有多種加載方式

配置也有很多種加載方式,常見的有程序內部hard code,配置文件,環(huán)境變量,啟動參數(shù),基于數(shù)據(jù)庫等

配置需要治理

權限控制

由于配置能改變程序的行為,不正確的配置甚至能引起災難,所以對配置的修改必須有比較完善的權限控制

不同環(huán)境、集群配置管理

同一份程序在不同的環(huán)境(開發(fā),測試,生產)、不同的集群(如不同的數(shù)據(jù)中心)經常需要有不同的配置,所以需要有完善的環(huán)境、集群配置管理

框架類組件配置管理

還有一類比較特殊的配置 - 框架類組件配置,比如CAT客戶端的配置。

雖然這類框架類組件是由其他團隊開發(fā)、維護,但是運行時是在業(yè)務實際應用內的,所以本質上可以認為框架類組件也是應用的一部分。

這類組件對應的配置也需要有比較完善的管理方式。

2. Apollo 的優(yōu)點

正是基于配置的特殊性,所以Apollo從設計之初就立志于成為一個有治理能力的配置管理平臺,目前提供了以下的特性:

統(tǒng)一管理不同環(huán)境、不同集群的配置

Apollo提供了一個統(tǒng)一界面集中式管理不同環(huán)境(environment)、不同集群(cluster)、不同命名空間(namespace)的配置。

同一份代碼部署在不同的集群,可以有不同的配置,比如zk的地址等

通過命名空間(namespace)可以很方便的支持多個不同應用共享同一份配置,同時還允許應用對共享的配置進行覆蓋

配置修改實時生效(熱發(fā)布)

用戶在Apollo修改完配置并發(fā)布后,客戶端能實時(1秒)接收到最新的配置,并通知到應用程序

版本發(fā)布管理

所有的配置發(fā)布都有版本概念,從而可以方便地支持配置的回滾

灰度發(fā)布

支持配置的灰度發(fā)布,比如點了發(fā)布后,只對部分應用實例生效,等觀察一段時間沒問題后再推給所有應用實例

權限管理、發(fā)布審核、操作審計

應用和配置的管理都有完善的權限管理機制,對配置的管理還分為了編輯和發(fā)布兩個環(huán)節(jié),從而減少人為的錯誤。

所有的操作都有審計日志,可以方便的追蹤問題

客戶端配置信息監(jiān)控

可以在界面上方便地看到配置在被哪些實例使用

提供Java和.Net原生客戶端

提供了Java和.Net的原生客戶端,方便應用集成

支持Spring Placeholder, Annotation和Spring Boot的ConfigurationProperties,方便應用使用(需要Spring 3.1.1+)

同時提供了Http接口,非Java和.Net應用也可以方便的使用

提供開放平臺API

Apollo自身提供了比較完善的統(tǒng)一配置管理界面,支持多環(huán)境、多數(shù)據(jù)中心配置管理、權限、流程治理等特性。

不過Apollo出于通用性考慮,對配置的修改不會做過多限制,只要符合基本的格式就能夠保存。

在我們的調研中發(fā)現(xiàn),對于有些使用方,它們的配置可能會有比較復雜的格式,而且對輸入的值也需要進行校驗后方可保存,如檢查數(shù)據(jù)庫、用戶名和密碼是否匹配。

對于這類應用,Apollo支持應用方通過開放接口在Apollo進行配置的修改和發(fā)布,并且具備完善的授權和權限控制

部署簡單

配置中心作為基礎服務,可用性要求非常高,這就要求Apollo對外部依賴盡可能地少

目前唯一的外部依賴是MySQL,所以部署非常簡單,只要安裝好Java和MySQL就可以讓Apollo跑起來

Apollo還提供了打包腳本,一鍵就可以生成所有需要的安裝包,并且支持自定義運行時參數(shù)

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容