<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          什么是分布式配置中心?

          共 3964字,需瀏覽 8分鐘

           ·

          2022-02-10 17:37

          我是敖丙的老婆,一年CRUD經(jīng)驗(yàn)用十年的markdown程序員???????常年被譽(yù)為優(yōu)質(zhì)八股文選手。

          上次給大家安排了監(jiān)控的相關(guān)使用姿勢(shì),不知道大家有沒(méi)有配置起來(lái)。但我可不管你們的進(jìn)度怎么樣,是不會(huì)等著你們的喲。

          今天來(lái)跟大家聊下分布式配置中心這個(gè)話題

          01、什么是分布式配置中心

          在之前我就很早已經(jīng)提及過(guò):分布式配置中心這種組件在后端就是標(biāo)配的。

          要理解分布式配置中心很簡(jiǎn)單:其實(shí)就是把一些配置的信息分離于自身的系統(tǒng),而這些信息又能被應(yīng)用實(shí)時(shí)獲取得到。

          要做到上面的核心功能并不難,但是作為中間件會(huì)需要更多的配套服務(wù),包括但不限于

          • 1、有后臺(tái)界面供我們修改配置
          • 2、配置服務(wù)如果掛了有相關(guān)的容災(zāi)邏輯
          • 3、支持不同環(huán)境下的配置信息(我們線上的配置一般是分不同的環(huán)境配置不同的值)
          • 4、相關(guān)權(quán)限管理(只有負(fù)責(zé)人才能對(duì)配置進(jìn)行update)
          • 5、簡(jiǎn)單易用(有對(duì)應(yīng)的SDK支持或api支持)
          • ...

          有的公司會(huì)自研一套這種分布式配置中心的組件,實(shí)現(xiàn)了上面我提到的功能。作為個(gè)人或者小公司,直接上開(kāi)源的就完事了。別老想著自研多么美妙,維護(hù)成本極大的

          02、為什么分布式配置中心

          我們可以把常變動(dòng)的配置信息存放在分布式配置中心上,比如:請(qǐng)求的ip地址、限流值、系統(tǒng)的配置值、各種業(yè)務(wù)開(kāi)關(guān)等等。

          甚至,我老東家的規(guī)則引擎也是在分布式配置中心的基礎(chǔ)上干的,分布式配置中心用到的場(chǎng)景是在是太多了...

          就以我們austin項(xiàng)目為例就好了,這期我們要實(shí)現(xiàn)丟棄消息。沒(méi)錯(cuò),你沒(méi)看錯(cuò)。我們項(xiàng)目的核心是發(fā)消息,但需要在系統(tǒng)中實(shí)現(xiàn)丟棄消息的功能。

          austin作為推送平臺(tái),它的定位是面向整個(gè)公司的所有類(lèi)型的消息推送。有了這個(gè)定位以后,我們很難去保證用這個(gè)系統(tǒng)的都是些什么人(自然在這里面就會(huì)有粗心的)。

          從austin的實(shí)現(xiàn)架構(gòu),我們可以發(fā)現(xiàn)的是:如果瞬間有大批量消息需要被下發(fā)時(shí),數(shù)據(jù)會(huì)堵在MQ上等待消費(fèi)

          我們是在austin-api層實(shí)現(xiàn)了判斷模板是否被刪除的校驗(yàn),但很有可能的是:請(qǐng)求已經(jīng)全部被austin-api處理完畢了,消息已經(jīng)積壓在MQ了。

          是可以在austini-handler再判斷一遍模板是否被刪除,但很多時(shí)候消息模板的擁有者并不是想把模板刪掉(刪掉意味著他們?cè)诳刂婆_(tái)就看不到該模板的配置消息了),可能他們就只是發(fā)錯(cuò)了而已,希望還沒(méi)下發(fā)的消息不再發(fā)送而已。

          除此之外,我們還得在austin項(xiàng)目實(shí)現(xiàn)白名單攔截的功能,這功能作用于devpre環(huán)境。

          對(duì)于austin項(xiàng)目而言,devpre環(huán)境跟線上環(huán)境其實(shí)沒(méi)有什么本質(zhì)上的區(qū)別。因?yàn)樽罱K是下發(fā)消息,只要環(huán)境能把消息下發(fā)到用戶(hù)手上,那就可以把他當(dāng)做線上環(huán)境在用。

          一般業(yè)務(wù)在正式下發(fā)消息之前,都會(huì)在devpre環(huán)境走一遍流程。但我們是很難保證它們的測(cè)試一定是正常的,萬(wàn)一業(yè)務(wù)方就出Bug導(dǎo)致dev/pre環(huán)境大批量推送了呢?

          所以,我們會(huì)在dev/pre環(huán)境設(shè)置白名單,只有在白名單的內(nèi)的用戶(hù)才能收到消息。而白名單的列表我們又可以維護(hù)在分布式配置中心上

          PS :相信大家多多少少都見(jiàn)過(guò)很多推送的事故(各大廠貌似都有過(guò)類(lèi)似的新聞和經(jīng)歷)。在很大原因上,就是環(huán)境混用了。本來(lái)想用dev或者pre環(huán)境去測(cè)試消息下發(fā),不料使用了生產(chǎn)環(huán)境。(這種問(wèn)題一般就需要通過(guò)權(quán)限和審批的干預(yù)了)

          像之前的實(shí)現(xiàn)的去重功能,我在代碼硬編碼寫(xiě)了具體的numseconds值。這些值也許有一天都會(huì)隨著運(yùn)營(yíng)規(guī)則有所變動(dòng),所以也會(huì)抽到分布式配置中心上。

          ....

          03、分布式配置中心 選擇

          從我第一天把Apollo寫(xiě)入到austin可能要引入的中間件,就有很多人問(wèn)我:為什么選擇Apollo。我還挺納悶的,怎么就這個(gè)中間件問(wèn)我的特別多呢?分布式配置中心可選擇的項(xiàng)目也是蠻多的:

          在網(wǎng)上也有很多相關(guān)的對(duì)比,比如:

          功能特性重要性spring-cloud-configApollodisconfNacos
          靜態(tài)配置管理基于file支持支持支持
          動(dòng)態(tài)配置管理支持支持支持支持
          統(tǒng)一管理無(wú),需要github支持支持支持
          多環(huán)境無(wú),需要github支持支持支持
          本地配置緩存無(wú)支持支持支持
          配置鎖支持不支持不支持不支持
          配置校驗(yàn)無(wú)無(wú)無(wú)無(wú)
          配置生效時(shí)間重啟生效,或手動(dòng)refresh生效實(shí)時(shí)實(shí)時(shí)實(shí)時(shí)
          配置更新推送需要手工觸發(fā)支持支持支持
          配置定時(shí)拉取無(wú)支持配置更新目前依賴(lài)事件驅(qū)動(dòng), client重啟或者server端推送操支持
          用戶(hù)權(quán)限管理無(wú),需要github支持支持支持
          授權(quán)、審核、審計(jì)無(wú),需要github支持無(wú)支持
          配置版本管理Git做版本管理界面上直接提供發(fā)布?xì)v史和回滾按鈕操作記錄有落數(shù)據(jù)庫(kù),但無(wú)查詢(xún)接口界面操作,支持回滾
          配置合規(guī)檢測(cè)不支持支持(但還需完善)
          支持
          實(shí)例配置監(jiān)控需要結(jié)合spring admin支持支持,可以查看每個(gè)配置在哪些機(jī)器上加載支持
          灰度發(fā)布不支持支持不支持部分更新支持
          告警通知不支持支持,郵件方式告警支持,郵件方式告警支持

          總體來(lái)說(shuō):Apollo支持的功能齊全、社區(qū)活躍、中文文檔豐富。所以,我就選擇了Apollo。社區(qū)活躍太重要了,當(dāng)你使用某個(gè)框架時(shí)出現(xiàn)問(wèn)題,然后網(wǎng)上一搜,發(fā)現(xiàn)都沒(méi)人有過(guò)類(lèi)似的踩坑記錄,這時(shí)候頭都大了。

          之前我就提到過(guò):技術(shù)選型并往往不跟技術(shù)掛鉤。如果是個(gè)人項(xiàng)目,選個(gè)社區(qū)活躍的,并且該中間件已經(jīng)被踩了很多坑的,學(xué)習(xí)它的思想和原理就能舉一反三。等以后知識(shí)面上去了,覺(jué)得自己當(dāng)時(shí)腦子進(jìn)了屎選了個(gè)破玩意,切換成本一般也不會(huì)有多大。

          如果是在公司,本身就有類(lèi)似的中間件,該用什么就用什么,在這基礎(chǔ)上修修補(bǔ)補(bǔ)就好了。如果沒(méi)有類(lèi)似的中間件,那就多點(diǎn)花時(shí)間調(diào)研,但我認(rèn)為在選取的時(shí)候最后還是離不開(kāi)中間件的成熟度和社區(qū)活躍度(也有可能大老板按照以往的習(xí)慣一拍板...)

          雖說(shuō)如此,感興趣的還是可以多看看對(duì)比對(duì)比,這類(lèi)文章在網(wǎng)上很多。(別老想著我什么都喂給你)

          04、分布式配置中心原理

          我以前的公司是自研的分布式配置中心,我曾經(jīng)就看過(guò)其原理思想。那時(shí)候看到公司自研的技術(shù)實(shí)現(xiàn)是利用長(zhǎng)連接使配置能實(shí)時(shí)被客戶(hù)端監(jiān)聽(tīng)到。這次引用了Apollo,我也去看了下設(shè)計(jì)文檔,也是通過(guò)長(zhǎng)輪詢(xún)的方式實(shí)現(xiàn)客戶(hù)端實(shí)時(shí)感知

          推薦大家去讀一讀,如果對(duì)分布式配置中心不太熟悉或者不了解它是什么東西的話。

          攜程Apollo配置中心架構(gòu)剖析演進(jìn)

          https://www.apolloconfig.com/#/zh/design/apollo-design

          對(duì)于這塊,我感覺(jué)我沒(méi)什么可講的,我平白無(wú)事也不會(huì)去撈源碼看(除非特別對(duì)某個(gè)技術(shù)實(shí)現(xiàn)感興趣,想看看人家是怎么實(shí)現(xiàn)的)。而Apollo文檔這塊做得是相當(dāng)不錯(cuò)了。

          我針對(duì)性從頭讀到尾,感覺(jué)挺流暢的,貌似不太需要我補(bǔ)充什么內(nèi)容。

          05、部署Apollo

          部署Apollo跟之前一樣直接用docker-compose就完事了,在GitHub已經(jīng)給出了對(duì)應(yīng)的教程和docker-compose.yml以及相關(guān)的文件,直接復(fù)制粘貼就完事咯。

          https://www.apolloconfig.com/#/zh/deployment/quick-start-docker

          https://github.com/apolloconfig/apollo/tree/master/scripts/docker-quick-start

          由于端口的占用問(wèn)題,我換了下映射端口,最主要看兩個(gè)端口吧:8070是后臺(tái)控制頁(yè)面的端口,8080是服務(wù)的端口

          06、SpringBoot 使用apollo

          寫(xiě)到這的時(shí)候,發(fā)現(xiàn)我是真的沒(méi)啥好寫(xiě)的,我無(wú)非也是跟著官方文檔弄弄。唯一的好處是我有現(xiàn)成的代碼,跟著做的同學(xué)可以直接復(fù)制粘貼就完了。

          1、引入maven的依賴(lài)

          <dependency>
          ??<groupId>com.ctrip.framework.apollogroupId>
          ??<artifactId>apollo-client-config-dataartifactId>
          ??<version>1.9.1version>
          dependency>

          2、在配置文件上加入apollo的配置信息:

          #?apollo??TODO
          app:
          ??id:?austin
          apollo:
          ??bootstrap:
          ????enabled:?true
          ????namespaces:?boss.austin

          配置的信息是在apollo的后臺(tái)上新增的(這塊大家只要能打開(kāi)后臺(tái),問(wèn)題就不大了,操作都挺簡(jiǎn)單的,感覺(jué)也沒(méi)必要看啥文檔)

          部門(mén)的創(chuàng)建其實(shí)也是一份"配置",輸入organizations就能把現(xiàn)有的部門(mén)給改掉,我新增了boss股東部門(mén),大家都是我的股東。

          3、在Spring中直接使用ApolloConfig就完了

          還值得一提的是,我們是在云服務(wù)器上使用docker部署的apollo的。一般獲取姿勢(shì)配置都是在內(nèi)網(wǎng)上暴露對(duì)應(yīng)的服務(wù)地址的,但我們這先體驗(yàn)的,所以可以直接跳過(guò)meta server

          為了方便使用,直接在啟動(dòng)的時(shí)候設(shè)置下參數(shù)就好了(跟著做的同學(xué)可以換下自己的ip和端口

          08、總結(jié)

          這篇文章簡(jiǎn)單介紹了什么是分布式配置中心,以及分布式配置中心能用來(lái)干什么,介紹了如何入門(mén)Apollo,使用SpringBoot環(huán)境下使用Apollo。

          我強(qiáng)烈建議如果不了解分布式配置中心的同學(xué)可以從Apollo入手,根據(jù)上面給出的鏈接閱讀下他的架構(gòu)由來(lái)以及它的設(shè)計(jì)理念。作為一個(gè)markdown程序員而言,我覺(jué)得寫(xiě)得很不錯(cuò)的了。

          對(duì)這感興趣的,也可以深入閱讀下源碼,看看關(guān)鍵的功能是怎么實(shí)現(xiàn)的(這不又是一條學(xué)習(xí)路徑?)

          如果公司還沒(méi)有用到分布式配置中心的,看完文章看看自己的項(xiàng)目有沒(méi)有相關(guān)的場(chǎng)景,可以專(zhuān)研下來(lái)接入下(一整個(gè)Q的KPI/OKR就有了,不用愁了)

          瀏覽 68
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  特级西西人体444w w w | 欧美日本一二三区 | 伊人视频在线观看 | 黄色毛片操逼视频 | 国产三级精品三级在线 |