Apollo配置中心原理简介
配置中心發(fā)展背景
隨著程序功能的日益復(fù)雜,程序的配置日益增多:
各種功能的開關(guān)、參數(shù)的配置、服務(wù)器的地址……
對(duì)程序配置的期望值也越來(lái)越高:
配置修改后實(shí)時(shí)生效,灰度發(fā)布,分環(huán)境、分集群管理配置,完善的權(quán)限、審核機(jī)制……
在這樣的大環(huán)境下,傳統(tǒng)的通過(guò)配置文件、數(shù)據(jù)庫(kù)等方式已經(jīng)越來(lái)越無(wú)法滿足開發(fā)人員對(duì)配置管理的需求。
Apollo客戶端設(shè)計(jì)
上圖簡(jiǎn)要描述了Apollo客戶端的實(shí)現(xiàn)原理:
之前提到了Apollo客戶端和服務(wù)端保持了一個(gè)長(zhǎng)連接,從而能第一時(shí)間獲得配置更新的推送。長(zhǎng)連接實(shí)際上是通過(guò)Http Long Polling實(shí)現(xiàn)的,具體而言:
- 客戶端發(fā)起一個(gè)Http請(qǐng)求到服務(wù)端
- 服務(wù)端會(huì)保持住這個(gè)連接60秒
- 如果在60秒內(nèi)有客戶端關(guān)心的配置變化,被保持住的客戶端請(qǐng)求會(huì)立即返回,并告知客戶端有配置變化的namespace信息,客戶端會(huì)據(jù)此拉取對(duì)應(yīng)namespace的最新配置
- 如果在60秒內(nèi)沒有客戶端關(guān)心的配置變化,那么會(huì)返回Http狀態(tài)碼304給客戶端
- 客戶端在收到服務(wù)端請(qǐng)求后會(huì)立即重新發(fā)起連接,回到第一步
考慮到會(huì)有數(shù)萬(wàn)客戶端向服務(wù)端發(fā)起長(zhǎng)連,在服務(wù)端使用了async servlet(Spring DeferredResult)來(lái)服務(wù)Http Long Polling請(qǐng)求。
注:DeferredResult可以允許容器線程快速釋放以便接受更多的請(qǐng)求提升吞吐量,讓真正的業(yè)務(wù)邏輯在其他的工作線程中完成。
在實(shí)現(xiàn)上,考慮到Apollo的實(shí)際使用場(chǎng)景,以及為了盡可能減少外部依賴,Apollo沒有采用外部的消息中間件,而是通過(guò)數(shù)據(jù)庫(kù)實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的消息隊(duì)列。
?
總結(jié)
以上是生活随笔為你收集整理的Apollo配置中心原理简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Eureka、Zookeeper和Con
- 下一篇: #{}和${}的区别是什么?