日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

apollo 配置中心_配置中心——Apollo小记

發(fā)布時(shí)間:2025/3/12 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 apollo 配置中心_配置中心——Apollo小记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、什么是配置

配置是程序運(yùn)行時(shí),動(dòng)態(tài)調(diào)整行為的能力。

配置有以下屬性:

  • 配置是獨(dú)立于程序的只讀變量
    • 同一份程序在不同的配置下才會(huì)有不同的行為,而且配置對(duì)于程序來(lái)說(shuō)是只讀的,所以程序可以通過(guò)讀取配置來(lái)改變自己的行為,但是不能自己改動(dòng)配置文件。
  • 配置伴隨應(yīng)用的整個(gè)生命周期
    • 應(yīng)用在啟動(dòng)的時(shí)候通過(guò)讀取配置來(lái)初始化,在運(yùn)行時(shí)根據(jù)配置改變自己的行為。
  • 配置有多中加載方式
    • 程序內(nèi)部hard code,這種做法是反模式,十分不建議。
    • 配置文件。
    • 環(huán)境變量,配置可以預(yù)置在操作系統(tǒng)的環(huán)境變量里,程序運(yùn)行時(shí)讀取。
    • 啟動(dòng)參數(shù),可以在程序啟動(dòng)時(shí)一次性提供參數(shù)。
    • 基于數(shù)據(jù)庫(kù),將易變配置放在數(shù)據(jù)庫(kù)中,這樣可以在運(yùn)行期靈活調(diào)整配置。
  • 配置需要治理
    • 權(quán)限控制:對(duì)配置的修改需要有比較完善的權(quán)限控制,否則不正確的配置會(huì)引起災(zāi)難。
    • 不同環(huán)境、集群配置管理:同一份程序在不同環(huán)境(開發(fā)、測(cè)試、生產(chǎn))、不同的集群(如不同的數(shù)據(jù)中心)經(jīng)常需要有不同的配置,所以需要完善的環(huán)境、集群配置管理。
    • 框架類組件配置管理:如CAT客戶端的配置。

二、為什么需要配置中心

在沒(méi)有引入配置中心之前,一般研發(fā)的時(shí)候會(huì)有以下痛點(diǎn):

  • 配置格式散亂不規(guī)范
    • 有的用properties格式,有的用yml格式,有的用xml格式,還有存DB的,做法五花八門。
  • 主要采用本地靜態(tài)配置,配置修改麻煩
    • 在分布式微服務(wù)環(huán)境下,當(dāng)服務(wù)實(shí)例很多的時(shí)候,配置修改費(fèi)時(shí)費(fèi)力。
  • 易引發(fā)生產(chǎn)事故
    • 如將測(cè)試環(huán)境的配置帶到生產(chǎn)環(huán)境上。
  • 配置缺乏安全審計(jì)和版本控制功能
    • 無(wú)法查看到修改配置的人,修改了什么內(nèi)容,以及修改的時(shí)間,除了問(wèn)題也無(wú)法及時(shí)回滾。

三、配置中心的核心需求

  • 交付件和配置分離
    傳統(tǒng)做法應(yīng)用在打包部署的時(shí)候,會(huì)為不同環(huán)境打出不同配置的包,每個(gè)包里頭包含環(huán)境特定配置。而現(xiàn)在推薦采用如容器鏡像方式打包和交付微服務(wù),應(yīng)用鏡像一般只打一份,可以部署到不同環(huán)境,所以這要求交付件和配置進(jìn)行分離,交付件只制作一份,并且是不可變的,可以部署到任意環(huán)境。但是所有環(huán)境的配置都可以在配置中心集中配置,運(yùn)行期應(yīng)用可以根據(jù)自身環(huán)境到配置中心動(dòng)態(tài)拉取相應(yīng)的配置。
  • 抽象標(biāo)準(zhǔn)化
    配置中心應(yīng)該封裝屏蔽配置管理的細(xì)節(jié)和配置的不同格式,方便用戶進(jìn)行自主式配置管理,一般用戶只需要關(guān)注兩個(gè)抽象和標(biāo)準(zhǔn)化的接口即可:
    • 配置管理界面UI,方便應(yīng)用開發(fā)人員管理和發(fā)布配置。
    • 封裝好的客戶端API,方便應(yīng)用集成和獲取配置。
    多環(huán)境多集群
    微服務(wù)應(yīng)用大多采用多環(huán)境部署,一般標(biāo)準(zhǔn)的環(huán)境有開發(fā)/測(cè)試/生產(chǎn)等,有的應(yīng)用還需要多集群部署,如支持跨機(jī)房或多版本部署。配置中心需要支持對(duì)多環(huán)境和多集群應(yīng)用配置的集中式管理。高可用
    配置中心不能掛,否則會(huì)大面積影響微服務(wù)。實(shí)時(shí)性
    配置更新需要盡快通知到客戶端,有些配置的實(shí)時(shí)性要求很高,像是主備切換配置或者藍(lán)綠部署配置,這些需要秒級(jí)切換配置的能力。治理
    配置需要治理,具體包括:
    • 配置審計(jì),需要記錄修改人,修改內(nèi)容和修改事件,方便出現(xiàn)問(wèn)題時(shí)能后追溯。
    • 配置版本控制,每次變更需要版本化,出現(xiàn)問(wèn)題可以及時(shí)回滾到上一版本。
    • 配置權(quán)限控制,配置變更發(fā)布需要認(rèn)證授權(quán)。
    • 灰度發(fā)布,配置發(fā)布時(shí)可以先讓少數(shù)實(shí)例生效,確定沒(méi)有問(wèn)題就可以擴(kuò)大應(yīng)用范圍。

    四、什么是Apollo

    Apollo是攜程框架部門研發(fā)的開源配置管理中心,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r(shí)推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性。

    Apollo的特性如下:

    • 統(tǒng)一管理不同環(huán)境、不同集群的配置。
      • Apollo提供了一個(gè)統(tǒng)一界面集中式管理不同環(huán)境、不同集群、不同命名(namespace)空間的配置,而且同一份代碼部署在不同集群,可以有不同的配置。
    • 配置修改實(shí)時(shí)生效(熱發(fā)布)
    • 版本發(fā)布管理
    • 灰度發(fā)布
    • 客戶端配置信息監(jiān)控
      • 可以在界面上方便地看到配置在被哪些實(shí)例使用。
    • 提供Java和.Net原生客戶端
    • 提供開放平臺(tái)API
    • 部署簡(jiǎn)單

    可以看到,Apollo的特性幾乎符合上文配置中心的核心需求。

    五、Apollo的基本模型

  • 用戶現(xiàn)在UI界面修改/發(fā)布配置。
  • Apollo配置中心會(huì)將配置更新信息推送到Apollo客戶端。
  • 客戶端再?gòu)腁pollo配置中心拉取最新配置,更新本地配置之后,通知到應(yīng)用。
  • 六、Apollo客戶端設(shè)計(jì)

    1、Apollo客戶端實(shí)現(xiàn)原理

  • 客戶端和服務(wù)端會(huì)保持一個(gè)長(zhǎng)連接,從而第一時(shí)間獲取配置更新的推送。
  • 客戶端還會(huì)定時(shí)從Apollo配置中心服務(wù)端拉取應(yīng)用的最新配置,而且客戶端定時(shí)拉取會(huì)上報(bào)給本地版本,默認(rèn)每隔5分鐘拉取一次,也可以通過(guò)運(yùn)行時(shí)指定apollo.refreshInterval來(lái)覆蓋,單位為分鐘。
  • 客戶端從Apollo配置中心服務(wù)端獲取到應(yīng)用的最新配置后,會(huì)保存在內(nèi)存。
  • 客戶端會(huì)把從服務(wù)端拉取到的配置在本地文件系統(tǒng)緩存一份,保證在遇到服務(wù)不可用或網(wǎng)路故障時(shí),依賴能從本地恢復(fù)配置,也實(shí)現(xiàn)了一定的高可用性。
  • 應(yīng)用程序從客戶端獲取到罪行的配置、訂閱配置更新通知。
  • 2、配置更新推送實(shí)現(xiàn)

    上文提到Apollo客戶端和服務(wù)端保持了一個(gè)長(zhǎng)連接,從而可以第一時(shí)間獲得配置更新的推送,實(shí)際上長(zhǎng)連接是通過(guò)Http Long Polling實(shí)現(xiàn)的:

    • 客戶端發(fā)起Http請(qǐng)求給服務(wù)端
    • 服務(wù)端保持60s連接
      • 如果在60s中有客戶端關(guān)心的配置變化,則請(qǐng)求會(huì)立即返回,并告知客戶端有配置變化的namespace信息,客戶端會(huì)據(jù)此拉取該namespace的最新配置。
      • 如果60s內(nèi)沒(méi)有客戶端關(guān)心的配置變化,則返回http狀態(tài)碼304給客戶端。

    在服務(wù)端,是用async servlet(Spring DeferredResult)來(lái)服務(wù)Http Long Polling請(qǐng)求。

    七、Apollo總體設(shè)計(jì)

    在捋清思路之前,先對(duì)其中的模塊進(jìn)行了解:

    主要模塊:

    • ConfigService
      • 提供配置獲取接口
      • 提供配置推送接口
      • 服務(wù)于Apollo客戶端
    • AdminService
      • 提供配置管理接口
      • 提供配置修改發(fā)布接口
      • 服務(wù)于管理界面Portal
    • Client
      • 為應(yīng)用獲取配置,支持實(shí)時(shí)更新
      • 通過(guò)MetaServer獲取ConfigService的服務(wù)列表
      • 使用客戶端軟負(fù)載SLB方式調(diào)用ConfigService
    • Portal
      • 配置管理頁(yè)面
      • 通過(guò)MetaServer獲取AdminService的服務(wù)列表
      • 使用客戶端軟負(fù)載SLB方式調(diào)用AdminService

    輔助模塊:

    • Eureka
      • 用于服務(wù)發(fā)現(xiàn)和注冊(cè)
      • Config/AdminService注冊(cè)實(shí)例并定期報(bào)心跳
      • 和ConfigService一起部署
    • MetaServer
      • Portal通過(guò)域名訪問(wèn)MetaServer獲取AdminService的地址列表
      • Client通過(guò)域名訪問(wèn)MetaServer獲取ConfigService的地址列表
      • 相當(dāng)于Eureka Proxy
      • 和ConfigService一起部署
    • NginxLB
      • 和域名系統(tǒng)配合,協(xié)助Portal訪問(wèn)MetaServer獲取AdminService的地址列表
      • 和域名系統(tǒng)配合,協(xié)助Client訪問(wèn)MetaServer獲取ConfigService的地址列表
      • 和域名系統(tǒng)配置,協(xié)助用戶訪問(wèn)Portal進(jìn)行配置管理。

    1、簡(jiǎn)化架構(gòu)A

    假設(shè)沒(méi)有分布式微服務(wù)的服務(wù)發(fā)現(xiàn),那么:

  • Portal會(huì)調(diào)用AdminService進(jìn)行配置管理和發(fā)布
  • ConfigService和Client保持長(zhǎng)連接,ConfigService服務(wù)于Client進(jìn)行配置獲取,ConfigService和Client通過(guò)一種推拉結(jié)合的方式,實(shí)現(xiàn)配置實(shí)時(shí)更新 的同時(shí),保證配置更新不丟失。
  • ConfigService和AdminService共享ConfigDB,ConfigDB中存放項(xiàng)目在某個(gè)環(huán)境的配置信息,而且這三者在每個(gè)配置環(huán)境(DEV/FAT/UAT/PRO)中都要部署一份。
  • Protal有個(gè)獨(dú)立的PortalDB,存放用戶權(quán)限、項(xiàng)目和配置的元數(shù)據(jù)信息。Portal只需部署一份,它可以管理多套環(huán)境。
  • 2、簡(jiǎn)化架構(gòu)B

    因?yàn)镃lient要找ConfigService需要地址列表,Portal找到AdminService也需要地址列表,這時(shí)候就需要服務(wù)發(fā)現(xiàn)了。

  • Config/AdminService啟動(dòng)后都會(huì)注冊(cè)到Eureka服務(wù)注冊(cè)中心,并定期發(fā)送保持心跳。
  • Eureka采用集群方式部署,使用分布式 一致性協(xié)議保證每個(gè)勢(shì)力的狀態(tài)最終一致。
  • Client和Portal可以通過(guò)Eureka發(fā)現(xiàn)ConfigService和AdminService的地址列表。
  • 3、簡(jiǎn)化結(jié)構(gòu)C

    因?yàn)閿y程需要跟自家的.Net的系統(tǒng)兼容,所以引入了MetaServer服務(wù),這相當(dāng)于是代理Proxy,將Eureka的服務(wù)發(fā)現(xiàn)接口以更簡(jiǎn)單明確的HTTP接口的形式暴露出來(lái)。

    但是MetaServer本身也是無(wú)狀態(tài)以集群方式部署的,那么Client/Protal該如何發(fā)現(xiàn)MetaServer呢?傳統(tǒng)的方式是借助硬件(可以在其中指定MetaServer的位置)或者是軟件負(fù)載均衡器。

    4、簡(jiǎn)化結(jié)構(gòu)4

    使用NginxLB(也稱Software Load Balancer),由運(yùn)維為MetaServer集群配置一個(gè)域名,指向NginxLB集群,NginxLB再對(duì)MetaServer進(jìn)行負(fù)載均衡和流量轉(zhuǎn)發(fā)。Client/Portal通過(guò)域名+NginxLB間接訪問(wèn)MetaServer集群。

    -----------------------------------------------------------------------------------------------

    這里踩個(gè)坑,因?yàn)橐惶譖ortal就可以集中管理多套環(huán)境(DEV/FAT/UAT/PRO)中的配置,所以當(dāng)切換環(huán)境的時(shí)候,需要注意到.properties(.yml)等配置文件中(SpringBoot)是否有明確標(biāo)記處需要取出哪些namespace的配置,否則Client將會(huì)拉取不了配置中心的配置到本地。

    參考:

    微服務(wù)架構(gòu) 為什么需要配置中心攜程 Apollo 配置中心架構(gòu)深度剖析Apollo配置中心介紹

    總結(jié)

    以上是生活随笔為你收集整理的apollo 配置中心_配置中心——Apollo小记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。