加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶(hù)
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 為什么需要配置中心 ●
    • 什么是Apollo?●
    • 功能介紹?●
    • 架構(gòu)設(shè)計(jì)
    • ?服務(wù)端設(shè)計(jì)?●
    • 客戶(hù)端設(shè)計(jì)?●
    • 結(jié)束語(yǔ)?●
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

五分鐘技術(shù)趣談 | 淺析Apollo配置中心

2023/12/29
3607
閱讀需 11 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

作者:李重,單位:中國(guó)移動(dòng)智慧家庭運(yùn)營(yíng)中心

隨著程序功能的日益復(fù)雜,程序的配置日益增多。各種功能的開(kāi)關(guān)、參數(shù)的配置、服務(wù)器的地址等,對(duì)程序的配置提出了更高的要求,比如,配置修改后實(shí)時(shí)生效,灰度發(fā)布,分環(huán)境、分集群管理配置,完善的權(quán)限、審核機(jī)制等。SpringBoot項(xiàng)目大多使用@Value注解或者@ConfigurationProperties注解讀取配置信息,線(xiàn)上項(xiàng)目經(jīng)常需要對(duì)某些配置進(jìn)行調(diào)整,如果每次都需要修改配置文件再重新發(fā)布服務(wù),難免會(huì)導(dǎo)致服務(wù)中斷,尤其是在分布式系統(tǒng)中多個(gè)服務(wù)節(jié)點(diǎn)都需要修改配置文件的場(chǎng)景,基于此配置中心應(yīng)運(yùn)而生。

為什么需要配置中心

- 配置實(shí)時(shí)生效

傳統(tǒng)的靜態(tài)配置方式要想修改某個(gè)配置,只能修改之后重新發(fā)布應(yīng)用,要實(shí)現(xiàn)動(dòng)態(tài)性,可以選擇使用數(shù)據(jù)庫(kù),通過(guò)定時(shí)輪詢(xún)?cè)L問(wèn)數(shù)據(jù)庫(kù)來(lái)感知配置的變化。輪詢(xún)頻率低感知配置變化的延時(shí)就長(zhǎng),輪詢(xún)頻率高,感知配置的變化延時(shí)就短,但比較損耗性能,需要在實(shí)時(shí)性和性能之間做折中。配置中心專(zhuān)門(mén)針對(duì)這個(gè)業(yè)務(wù)場(chǎng)景,兼顧實(shí)時(shí)性和一致性來(lái)管理動(dòng)態(tài)配置。

- 配置管理流程

配置的權(quán)限管理、灰度發(fā)布、版本管理、格式校驗(yàn)和安全配置等一系列配置管理相關(guān)的特性也是配置中心不可或缺的一部分。

什么是Apollo?

Apollo(阿波羅)是一款可靠的分布式配置管理中心,誕生于攜程框架研發(fā)部,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r(shí)推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性,適用于微服務(wù)配置管理場(chǎng)景。

功能介紹?

? 統(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)行覆蓋。

配置界面支持多語(yǔ)言(中文,English)。

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

用戶(hù)在Apollo修改完配置并發(fā)布后,客戶(hù)端能實(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)題。

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

可以方便的看到配置在被哪些實(shí)例使用。

? 提供Java和.Net原生客戶(hù)端

提供了Java和.Net的原生客戶(hù)端,方便應(yīng)用集成。

支持Spring Placeholder,Annotation和Spring Boot的ConfigurationProperties,方便應(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ù)、用戶(hù)名和密碼是否匹配。

對(duì)于這類(lèi)應(yīng)用,Apollo支持應(yīng)用方通過(guò)開(kāi)放接口在Apollo進(jìn)行配置的修改和發(fā)布,并且具備完善的授權(quán)和權(quán)限控制。

? 部署簡(jiǎn)單

配置中心作為基礎(chǔ)服務(wù),可用性要求非常高,這就要求Apollo對(duì)外部依賴(lài)盡可能地少。

目前唯一的外部依賴(lài)是MySQL,所以部署非常簡(jiǎn)單,只要安裝好Java和MySQL就可以讓Apollo跑起來(lái)。

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

架構(gòu)設(shè)計(jì)

4.1 基礎(chǔ)模型

如下即是Apollo的基礎(chǔ)模型:

用戶(hù)在配置中心對(duì)配置進(jìn)行修改并發(fā)布。

配置中心通知Apollo客戶(hù)端有配置更新。

Apollo客戶(hù)端從配置中心拉取最新的配置、更新本地配置并通知到應(yīng)用。

4.2 架構(gòu)模塊

如下即是Apollo架構(gòu)模塊的概覽:

Portal:英文意思為門(mén)戶(hù),在架構(gòu)中充當(dāng)?shù)慕巧珵楣芾矶耍脩?hù)通過(guò)該模塊對(duì)配置進(jìn)行修改。

PortalDB:存儲(chǔ)一些環(huán)境變量、配置環(huán)境等信息的數(shù)據(jù)庫(kù)。注意,該庫(kù)不存儲(chǔ)配置信息。

Admin Service:負(fù)責(zé)接收Portal發(fā)送過(guò)來(lái)的配置信息,對(duì)配置信息進(jìn)行修改。

ConfigDB:儲(chǔ)存配置信息的數(shù)據(jù)庫(kù)。

Client:配置信息使用者,通常為微服務(wù)。

Config Service:負(fù)責(zé)定期從數(shù)據(jù)庫(kù)(ConfigDB)中拉取配置信息,若有變化,推送給客服端?;蚴强蛻?hù)端定期利用該服務(wù)拉取配置信息。

Eureka:注冊(cè)中心,無(wú)論Conifg Service還是Admin Service,在實(shí)際使用中都是部署在多臺(tái)服務(wù)器上的。因此,對(duì)于客戶(hù)端或者門(mén)戶(hù)管理端而言,建立兩個(gè)服務(wù)的連接都需要通過(guò)注冊(cè)中心發(fā)現(xiàn)服務(wù)地址后再連接。

Meta Service:從Eureka獲取Config Service和Admin Service的服務(wù)信息,相當(dāng)于是一個(gè)Eureka Client,增設(shè)一個(gè)Meta Server的角色主要是為了封裝服務(wù)發(fā)現(xiàn)的細(xì)節(jié),對(duì)Portal和Client而言,永遠(yuǎn)通過(guò)一個(gè)Http接口獲取Admin Service和Config Service的服務(wù)信息,而不需要關(guān)心背后實(shí)際的服務(wù)注冊(cè)和發(fā)現(xiàn)組件。

?服務(wù)端設(shè)計(jì)?

在配置中心中,一個(gè)重要的功能就是配置發(fā)布后實(shí)時(shí)推送到客戶(hù)端。下圖即是配置發(fā)布后的實(shí)時(shí)推送設(shè)計(jì):

1.用戶(hù)在Portal操作配置發(fā)布。

2.Portal調(diào)用Admin Service的接口操作發(fā)布。

3.Admin Service發(fā)布配置后,發(fā)送ReleaseMessage給各個(gè)Config Service。

4.Config Service收到ReleaseMessage后,通知對(duì)應(yīng)的客戶(hù)端。

客戶(hù)端設(shè)計(jì)?

下圖描述了Apollo客戶(hù)端的實(shí)現(xiàn)原理:

1.客戶(hù)端和服務(wù)端保持了一個(gè)長(zhǎng)連接,從而能第一時(shí)間獲得配置更新的推送(通過(guò)Http Long Polling實(shí)現(xiàn))。

2.客戶(hù)端還會(huì)定時(shí)從Apollo配置中心服務(wù)端拉取應(yīng)用的最新配置。

a.這是一個(gè)fallback機(jī)制,為了防止推送機(jī)制失效導(dǎo)致配置不更新。

b.客戶(hù)端定時(shí)拉取會(huì)上報(bào)本地版本,所以一般情況下,對(duì)于定時(shí)拉取的操作,服務(wù)端都會(huì)返回304 - Not Modified。

c.定時(shí)頻率默認(rèn)為每5分鐘拉取一次,客戶(hù)端也可以通過(guò)在運(yùn)行時(shí)指定System Property: apollo.refreshInterval來(lái)覆蓋,單位為分鐘。

3.客戶(hù)端從Apollo配置中心服務(wù)端獲取到應(yīng)用的最新配置后,會(huì)保存在內(nèi)存中。

4.客戶(hù)端會(huì)把從服務(wù)端獲取到的配置在本地文件系統(tǒng)緩存一份。

a.在遇到服務(wù)不可用,或網(wǎng)絡(luò)不通的時(shí)候,依然能從本地恢復(fù)配置。

5.應(yīng)用程序可以從Apollo客戶(hù)端獲取最新的配置、訂閱配置更新通知。

結(jié)束語(yǔ)?

在“約定優(yōu)于配置,配置優(yōu)于編碼”的開(kāi)發(fā)理念下,通過(guò)Apollo配置中心,程序員不需要每次更改線(xiàn)上配置都要重新發(fā)布服務(wù),成功實(shí)現(xiàn)了將配置與編碼解耦,為線(xiàn)上服務(wù)變更配置提供了解決方案。

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
LAN9303I-ABZJ 1 SMSC Ethernet Transceiver, 8 X 8 MM, ROHS COMPLIANT, QFN-56
$8.26 查看
LE88276DLCT 1 Microsemi Corporation Analog Transmission Interface,
$33.67 查看
KSZ8567RTXI 1 Microchip Technology Inc IC ETHERNET SWITCH 7PORT 128TQFP

ECAD模型

下載ECAD模型
$10.98 查看
中國(guó)移動(dòng)

中國(guó)移動(dòng)

中國(guó)移動(dòng)有限公司(「本公司」,包括子公司合稱(chēng)為「本集團(tuán)」)于1997年9月3日在香港成立,本集團(tuán)在中國(guó)內(nèi)地所有三十一個(gè)省、自治區(qū)、直轄市以及香港特別行政區(qū)提供通信和信息服務(wù),業(yè)務(wù)主要涵蓋個(gè)人、家庭、政企和新興市場(chǎng)的語(yǔ)音、數(shù)據(jù)、寬帶、專(zhuān)線(xiàn)、IDC、云計(jì)算、物聯(lián)網(wǎng)等,是中國(guó)內(nèi)地最大的通信和信息服務(wù)供應(yīng)商,亦是全球網(wǎng)絡(luò)和客戶(hù)規(guī)模最大、盈利能力領(lǐng)先、市值排名位居前列的世界級(jí)通信和信息運(yùn)營(yíng)商。

中國(guó)移動(dòng)有限公司(「本公司」,包括子公司合稱(chēng)為「本集團(tuán)」)于1997年9月3日在香港成立,本集團(tuán)在中國(guó)內(nèi)地所有三十一個(gè)省、自治區(qū)、直轄市以及香港特別行政區(qū)提供通信和信息服務(wù),業(yè)務(wù)主要涵蓋個(gè)人、家庭、政企和新興市場(chǎng)的語(yǔ)音、數(shù)據(jù)、寬帶、專(zhuān)線(xiàn)、IDC、云計(jì)算、物聯(lián)網(wǎng)等,是中國(guó)內(nèi)地最大的通信和信息服務(wù)供應(yīng)商,亦是全球網(wǎng)絡(luò)和客戶(hù)規(guī)模最大、盈利能力領(lǐng)先、市值排名位居前列的世界級(jí)通信和信息運(yùn)營(yíng)商。收起

查看更多

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

移動(dòng)Labs是中國(guó)移動(dòng)的社交化新媒體平臺(tái),是面向外部行業(yè)及產(chǎn)業(yè)鏈合作伙伴的信息發(fā)布、業(yè)務(wù)發(fā)展和產(chǎn)業(yè)推進(jìn)門(mén)戶(hù)。