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