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