Apollo系列之架构设计(一)
原創(chuàng)文章,轉(zhuǎn)載請(qǐng)標(biāo)注。https:https://www.cnblogs.com/boycelee/p/17967590
目錄- 一、什么是配置中心?
- 二、傳統(tǒng)配置有什么問(wèn)題?
- 三、配置中心的場(chǎng)景
-
四、架構(gòu)設(shè)計(jì)
- (1)基礎(chǔ)模型
- (2)詳細(xì)架構(gòu)
-
六、模塊介紹
-
客戶端層
- Client
- Portal
-
網(wǎng)絡(luò)層
- NginxLB
- Meta Server
- Eureka
-
服務(wù)端層
- Config Service
- Admin Service
-
客戶端層
-
七、思考
- 1、為什么NginxLB與Eureka一起使用?不使用Eureka是否可行?
- 2、Confg Service 、Admin Service以及Portal為什么作為獨(dú)立應(yīng)用單獨(dú)部署?
- 最后
一、什么是配置中心?
配置中心是集中管理和動(dòng)態(tài)更新應(yīng)用配置信息的服務(wù),服務(wù)能夠在不停機(jī)的情況下新增或修改配置信息,具有以下關(guān)鍵特點(diǎn):
(1)集中管理。配置中心集中存儲(chǔ)服務(wù)所需要的各類配置信息;
(2)動(dòng)態(tài)變更。應(yīng)用服務(wù)不需要重啟就可以從配置中心動(dòng)態(tài)獲取到最新數(shù)據(jù);
(3)通知機(jī)制。當(dāng)服務(wù)配置發(fā)生變化時(shí),配置中心可以提供通知機(jī)制,通知應(yīng)用程序關(guān)心的配置發(fā)生變化。
能夠提高系統(tǒng)的可維護(hù)性、靈活性和實(shí)時(shí)性。
二、傳統(tǒng)配置有什么問(wèn)題?
傳統(tǒng)配置會(huì)使用本地靜態(tài)文件作為存儲(chǔ)介質(zhì)。就存在這幾個(gè)問(wèn)題:
(1)動(dòng)態(tài)修改。本地靜態(tài)文件修改時(shí)必須重啟應(yīng)用,無(wú)法做到動(dòng)態(tài)修改;
(2)統(tǒng)一管理。存儲(chǔ)格式、存儲(chǔ)地點(diǎn)都雜亂無(wú)章,無(wú)法對(duì)配置進(jìn)行統(tǒng)一規(guī)范和約束;
(3)即時(shí)生效。配置完成后,需要多機(jī)器部署完成,修改配置才能夠生效。無(wú)法做到及時(shí)通知、及時(shí)生效。
三、配置中心的場(chǎng)景
大體場(chǎng)景有如下這幾種:
(1)系統(tǒng)相關(guān)。如線程池配置信息、緩存大小、連接池大小、熔斷/限流閾值等;
(2)業(yè)務(wù)相關(guān)。如活動(dòng)文案、推廣活動(dòng)、積分規(guī)則、價(jià)格策略等;
(3)開關(guān)相關(guān)。A/B Test、特性開關(guān)、推送開關(guān)等;
(4)安全相關(guān)。數(shù)據(jù)庫(kù)連接信息、加密秘鑰、賬號(hào)密碼等。
四、架構(gòu)設(shè)計(jì)
(1)基礎(chǔ)模型
(2)詳細(xì)架構(gòu)
架構(gòu)圖分為三層,分別是客戶端層、網(wǎng)絡(luò)層以及服務(wù)層。其中客戶端層包括client模塊、portal模塊,網(wǎng)絡(luò)層包括Load Balancer(Nginx)和Mata Server以及Eureka,服務(wù)層包括Config Service模塊和Admin Service模塊。
六、模塊介紹
客戶端層
Client
- 客戶端負(fù)責(zé)從Config Service獲取應(yīng)用的配置信息;
- 監(jiān)聽配置變化。當(dāng)配置發(fā)生更新時(shí),Config Service會(huì)通知Client,并出發(fā)其進(jìn)行配置刷新;
- 通過(guò)ip + port的方式遠(yuǎn)程調(diào)用Config Service,以獲取配置數(shù)據(jù)。
Portal
- 管理平臺(tái),提供配置中心的管理功能,包括應(yīng)用創(chuàng)建、查看、修改、發(fā)布以及回滾等功能
網(wǎng)絡(luò)層
NginxLB
- Client、Portal通過(guò)域名的方式訪問(wèn)MetaServer,Nginx作為負(fù)載均衡器;
- Nginx將請(qǐng)求分發(fā)到每個(gè)Meta Server服務(wù)實(shí)例,結(jié)合Eureka可以動(dòng)態(tài)地獲取到注冊(cè)中心注冊(cè)的服務(wù)實(shí)例(Config Service、Admin Service)列表。
Meta Server
- Meta Server封裝Eureka Client,通過(guò)Eureka Client獲取Config Service和Admin Service的服務(wù)信息,Client與Portal不需要關(guān)心注冊(cè)中心的服務(wù)發(fā)現(xiàn)問(wèn)題;
- Client和Portal通過(guò)ip+port的方式訪問(wèn)Client Service 與 Admin Service
- Meta Server是邏輯概念與Config Service模塊一起部署在同一實(shí)例中;
- Meta Service還提供其他注冊(cè)中心的封裝類,其中包括Consul、Nacos、Kubernetes等;
Eureka
- Eureka是用于服務(wù)注冊(cè)與服務(wù)發(fā)現(xiàn)的注冊(cè)中心,Config Sevice與Admin Service會(huì)定期向注冊(cè)中心上報(bào)心跳;
- Eureka與Config Service部署在一起,簡(jiǎn)化部署和管理。
- 相對(duì)于Zookeeper其部署方式更便捷。
服務(wù)端層
Config Service
- 服務(wù)于Client模塊;
- 提供獲取配置的接口;
- 基于長(zhǎng)輪詢,提供配置更新接口;
Admin Service
- 服務(wù)于Admin模塊;
- 提供配置管理接口;
- 提供修改、發(fā)布配置等接口。
七、思考
1、為什么NginxLB與Eureka一起使用?不使用Eureka是否可行?
(1)負(fù)載均衡(Nginx LB)。具有高可用和容錯(cuò)的特性,當(dāng)Apollo配置中心節(jié)點(diǎn)出現(xiàn)故障時(shí),負(fù)載均衡器可以將流量重新路由到其他可用的節(jié)點(diǎn)上,從而實(shí)現(xiàn)系統(tǒng)的穩(wěn)定性。
(2)服務(wù)注冊(cè)與發(fā)現(xiàn)(Eureka)。Eureka可以幫助配置中心實(shí)現(xiàn)動(dòng)態(tài)的服務(wù)注冊(cè)和發(fā)現(xiàn)。Config Service動(dòng)態(tài)注冊(cè)到Eureka中,而Client通過(guò)Eureka獲取可用節(jié)點(diǎn)列表。從而實(shí)現(xiàn)動(dòng)態(tài)獲取配置中心節(jié)點(diǎn)變化。
(3)綜合使用Nginx負(fù)載均衡和Eureka注冊(cè)中心,可以提高配置中心的可用性和容錯(cuò)性。這種架構(gòu)允許系統(tǒng)在動(dòng)態(tài)環(huán)境中靈活地處理配置中心(Config Service)節(jié)點(diǎn)的變化,并且確保客戶端(Client)始終能夠訪問(wèn)到可用的的配置中心(Config Service)節(jié)點(diǎn)。
(4)不使用Eureka,只使用Nginx負(fù)載均衡是可行的。這種情況下配置中心節(jié)點(diǎn)(Config Service)由Nginx進(jìn)行負(fù)載均衡和請(qǐng)求分發(fā),不需要Eureka進(jìn)行服務(wù)注冊(cè)與服務(wù)發(fā)現(xiàn)。優(yōu)點(diǎn)是架構(gòu)簡(jiǎn)單,缺點(diǎn)是Nginx雖然可以感知到節(jié)點(diǎn)不可用,但其并不具備動(dòng)態(tài)節(jié)點(diǎn)管理的能力,當(dāng)新的節(jié)點(diǎn)加入時(shí),Eureka能夠及時(shí)發(fā)現(xiàn)且自動(dòng)地處理,而Nginx則需要人工干預(yù)。
2、Confg Service 、Admin Service以及Portal為什么作為獨(dú)立應(yīng)用單獨(dú)部署?
(1)Confg Service和Admin Service獨(dú)立部署,是從功能解耦上考慮,Confg Service服務(wù)于Client端負(fù)責(zé)處理配置相關(guān)邏輯,而Admin Service服務(wù)于Portal管理平臺(tái),提供接口給Portal進(jìn)行使用。從產(chǎn)品迭代角度來(lái)分析Admin Service因?yàn)榉?wù)于Protal管理平臺(tái)其迭代頻率會(huì)高于Confg Service,分開獨(dú)立部署能夠提升開發(fā)靈活性以及降低發(fā)布風(fēng)險(xiǎn)。
(2)Admin Service和Portal獨(dú)立部署,是為了環(huán)境隔離時(shí),Protal能夠調(diào)用不同Service提供的API接口,進(jìn)行不同環(huán)境配置的統(tǒng)一管理。
最后
懂得不多,做得太少。歡迎批評(píng)、指正。
總結(jié)
以上是生活随笔為你收集整理的Apollo系列之架构设计(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Flink异步IO
- 下一篇: RocketMQ事务消息在订单创建和库存