Apollo(阿波羅)開(kāi)源分布式配置中心
Apollo(阿波羅)是一款可靠的分布式配置管理中心,誕生于攜程框架研發(fā)部,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r(shí)推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性,適用于微服務(wù)配置管理場(chǎng)景。
一、背景介紹
服務(wù)端基于 Spring Boot 和 Spring Cloud 開(kāi)發(fā),打包后可以直接運(yùn)行,不需要額外安裝 Tomcat 等應(yīng)用容器。
Java 客戶端不依賴任何框架,能夠運(yùn)行于所有 Java 運(yùn)行時(shí)環(huán)境,同時(shí)對(duì) Spring/Spring Boot 環(huán)境也有較好的支持。
.NET 客戶端不依賴任何框架,能夠運(yùn)行于所有 .NET 運(yùn)行時(shí)環(huán)境。
更多產(chǎn)品介紹參見(jiàn) Apollo 配置中心介紹。
本地快速部署請(qǐng)參見(jiàn) Quick Start。
二、配置界面
三、功能介紹
-
統(tǒng)一管理不同環(huán)境、不同集群的配置
-
Apollo 提供了一個(gè)統(tǒng)一界面集中式管理不同環(huán)境(environment)、不同集群(cluster)、不同命名空間(namespace)的配置。
-
同一份代碼部署在不同的集群,可以有不同的配置,比如zk的地址等
-
通過(guò)命名空間(namespace)可以很方便的支持多個(gè)不同應(yīng)用共享同一份配置,同時(shí)還允許應(yīng)用對(duì)共享的配置進(jìn)行覆蓋
-
-
配置修改實(shí)時(shí)生效(熱發(fā)布)
-
用戶在 Apollo 修改完配置并發(fā)布后,客戶端能實(shí)時(shí)(1秒)接收到最新的配置,并通知到應(yīng)用程序。
-
-
版本發(fā)布管理
-
所有的配置發(fā)布都有版本概念,從而可以方便的支持配置的回滾。
-
-
灰度發(fā)布
-
支持配置的灰度發(fā)布,比如點(diǎn)了發(fā)布后,只對(duì)部分應(yīng)用實(shí)例生效,等觀察一段時(shí)間沒(méi)問(wèn)題后再推給所有應(yīng)用實(shí)例。
-
-
權(quán)限管理、發(fā)布審核、操作審計(jì)
-
應(yīng)用和配置的管理都有完善的權(quán)限管理機(jī)制,對(duì)配置的管理還分為了編輯和發(fā)布兩個(gè)環(huán)節(jié),從而減少人為的錯(cuò)誤。
-
所有的操作都有審計(jì)日志,可以方便的追蹤問(wèn)題。
-
-
客戶端配置信息監(jiān)控
-
可以方便的看到配置在被哪些實(shí)例使用
-
-
提供Java和.Net原生客戶端
-
提供了 Java 和 .Net 的原生客戶端,方便應(yīng)用集成
-
支持 Spring Placeholder 和 Annotation,方便應(yīng)用使用(需要 Spring 3.1.1+)
-
同時(shí)提供了 Http 接口,非 Java 和 .Net 應(yīng)用也可以方便的使用
-
-
提供開(kāi)放平臺(tái) API
-
Apollo 自身提供了比較完善的統(tǒng)一配置管理界面,支持多環(huán)境、多數(shù)據(jù)中心配置管理、權(quán)限、流程治理等特性。
-
不過(guò) Apollo 出于通用性考慮,對(duì)配置的修改不會(huì)做過(guò)多限制,只要符合基本的格式就能夠保存。
-
在我們的調(diào)研中發(fā)現(xiàn),對(duì)于有些使用方,它們的配置可能會(huì)有比較復(fù)雜的格式,如 xml, json,需要對(duì)格式做校驗(yàn)。
-
還有一些使用方如 DAL,不僅有特定的格式,而且對(duì)輸入的值也需要進(jìn)行校驗(yàn)后方可保存,如檢查數(shù)據(jù)庫(kù)、用戶名和密碼是否匹配。
-
對(duì)于這類應(yīng)用,Apollo 支持應(yīng)用方通過(guò)開(kāi)放接口在 Apollo 進(jìn)行配置的修改和發(fā)布,并且具備完善的授權(quán)和權(quán)限控制
-
-
部署簡(jiǎn)單
-
配置中心作為基礎(chǔ)服務(wù),可用性要求非常高,這就要求 Apollo 對(duì)外部依賴盡可能地少
-
目前唯一的外部依賴是 MySQL,所以部署非常簡(jiǎn)單,只要安裝好 Java 和 MySQL 就可以讓 Apollo 跑起來(lái)
-
Apollo 還提供了打包腳本,一鍵就可以生成所有需要的安裝包,并且支持自定義運(yùn)行時(shí)參數(shù)
-
四、使用文檔
五、設(shè)計(jì)
六、部署
七、發(fā)布?xì)v史
八、FAQ
九、結(jié)語(yǔ)
目前 Apollo 在攜程生產(chǎn)環(huán)境穩(wěn)定服務(wù)著 10 萬(wàn)+實(shí)例的配置需求,同時(shí)也有超過(guò)一百家外部公司投入生產(chǎn)使用的成功案例。
大家如果對(duì)配置需求有痛點(diǎn)的話,建議可以關(guān)注一下 Apollo 配置中心,我們?cè)?Github 上有非常豐富的文檔介紹,也有著一個(gè)非?;钴S的技術(shù)支持群。
另外,Apollo 從項(xiàng)目之初就是作為一個(gè)開(kāi)源項(xiàng)目開(kāi)發(fā)的,所以也非常希望能有更多的力量投入進(jìn)來(lái),歡迎大家發(fā)起 Pull Request!
