合格的配置中心應(yīng)有的素養(yǎng)No.76

最近在看配置中心的一些設(shè)計(jì)曼库,好像基本都是五花八門,主要看的是還是攜程的 Apollo 這個(gè)開(kāi)源的配置中心項(xiàng)目。一直以來(lái)都覺(jué)得配置中心很重要微姊,因?yàn)檫@對(duì)于灰度發(fā)布,線上實(shí)施干預(yù)都有非常重大的作用分预。但是嘛兢交,你們都知道我有多懶,所以又一直沒(méi)去好好了解一下笼痹,今天趁這個(gè)時(shí)間跟大家聊聊配置一個(gè)合格的配置中心應(yīng)有的素養(yǎng)配喳。

  1. 首先什么是配置?

  2. 配置有什么獲取方式凳干?

  3. 為什么需要實(shí)時(shí)變更配置晴裹?

  4. 為什么需要配置中心

  5. 配置中心的分層有必要嗎?

  6. 實(shí)時(shí)變更配置的方式有幾種救赐?

  7. 配置中心還有什么其他基本的素養(yǎng)涧团?

  8. 一個(gè)實(shí)時(shí)推送的配置中心架構(gòu)是怎樣的?

01经磅、首先什么是配置泌绣?

我的理解是,配置是同一個(gè)程序在不同場(chǎng)景不同環(huán)境下做出不同表現(xiàn)的一個(gè)可變動(dòng)頻繁的點(diǎn)预厌。配置在啟動(dòng)的時(shí)候通過(guò)各種形式進(jìn)行獲取阿迈,在整個(gè)生命流程中配置一般來(lái)說(shuō),是只讀的轧叽,程序是不會(huì)主動(dòng)去變更的苗沧,只有其他地方變更了之后才會(huì)觸發(fā)程序的變更。

最經(jīng)典的配置有兩類炭晒,一類是數(shù)值型崎页,比如客戶的授信額度比例。一類是 Bool 型腰埂,用來(lái)對(duì)某些功能做禁用或啟用飒焦。

public class configuration {

    private int NUMBER_CONFIG  = 5;
    private boolean SWITCH_CONFIG = true;

    public void config(){
        if(SWITCH_CONFIG){
            System.out.println("YES");
        }
        System.out.println("print YES" + NUMBER_CONFIG);
    }
}

02、配置有什么獲取方式?

配置的獲取方式不外乎5種牺荠。Hard Code翁巍、配置文件、環(huán)境變量休雌、數(shù)據(jù)庫(kù)獲取灶壶、啟動(dòng)參數(shù),外部 server 獲取杈曲。

喇喇喇驰凛。上面我寫的那堆玩意就是 Hard Code 的。什么叫 Hard Code担扑,就是代碼寫得跟鐵似的硬邦邦的你敲一下還會(huì)叮的一生那種恰响。

配置文件,吶涌献,平時(shí)用的比較多還是配置文件胚宦,比如 Spring 的 application.xml 啊,someFool.properties燕垃。

環(huán)境變量枢劝,嗯,比如 JAVA_HOME 之類的在操作系統(tǒng)上的環(huán)境變量卜壕。

數(shù)據(jù)庫(kù)獲取您旁,就是啟動(dòng)的時(shí)候或者定時(shí)去數(shù)據(jù)庫(kù)撈一下。

啟動(dòng)參數(shù)轴捎,就是作為啟動(dòng)的時(shí)候帶的參數(shù)被冒。比如 java -jar start.jar big。最后的 big 就是啟動(dòng)參數(shù)轮蜕,也是配置項(xiàng)的一種昨悼。

外部 server 獲取,意思就是這個(gè)配置項(xiàng)呢跃洛,是其他系統(tǒng)維護(hù)的率触,比如說(shuō)存款準(zhǔn)備金,就是一個(gè)央媽這個(gè)超級(jí)中心維護(hù)的配置項(xiàng)汇竭,所有的中小企業(yè)都要去央媽獲取葱蝗。

03、為什么需要實(shí)時(shí)變更配置细燎?

人都是善變的两曼,別問(wèn)我為什么。玻驻。悼凑。老板昨天說(shuō)咱有錢偿枕,就給客戶爸爸們發(fā)錢吧,一單 15% 户辫。今天發(fā)現(xiàn)銀包撐不住了渐夸,跟我說(shuō)大蕉同學(xué)我不管你怎么搞你趕緊把這個(gè)功能下了,我又不想發(fā)版本渔欢,所以就需要實(shí)時(shí)變更配置了墓塌。就這么簡(jiǎn)單,人都是善變的奥额。

04苫幢、為什么需要配置中心?

一個(gè)應(yīng)用兩個(gè)應(yīng)用還行垫挨,要是有100個(gè)應(yīng)用韩肝,還真不知道怎么管理,實(shí)時(shí)推送配置項(xiàng)也成了一大難題“舴鳎現(xiàn)在傳統(tǒng)的比較主流的配置項(xiàng)管理做法有這么幾種。

改代碼重新打包(真特么傻逼)

改配置項(xiàng)重啟玫氢。(說(shuō)實(shí)話蠻那啥的)

改數(shù)據(jù)庫(kù)重啟帚屉。(一樣)

改數(shù)據(jù)庫(kù)定時(shí)獲取。(浪費(fèi)資源漾峡,一直在輪詢攻旦,還需要一定時(shí)間才生效)

只能說(shuō),時(shí)間太長(zhǎng)了生逸,太浪費(fèi)了牢屋,少則30秒多則60分鐘(不要問(wèn)我為什么是60分鐘,因?yàn)橛幸恍┥当茟?yīng)用啟動(dòng)起來(lái)就特么要這么久)槽袄。

所以有個(gè)配置中心來(lái)幫你管理這些東西烙无,不亦說(shuō)乎?

05遍尺、配置中心的分層有必要嗎截酷?

現(xiàn)在主流的配置中心都會(huì)進(jìn)行分層,五花八門乾戏,有的恨不得一臺(tái)機(jī)器一臺(tái)機(jī)器管理迂苛,有的又特么的一個(gè)集群只能統(tǒng)一配置。其實(shí)只需要下面幾個(gè)維度就夠了鼓择,應(yīng)用維度三幻,集群維度,機(jī)器維度呐能。有了這三個(gè)維度基本可以滿足99.9999%的需求念搬,如果發(fā)現(xiàn)還不能滿足,那么你所說(shuō)的不在我這個(gè)范圍。(偷笑ing)

06锁蠕、實(shí)時(shí)變更配置的方式有幾種夷野?

從廣義來(lái)說(shuō),就兩種荣倾,一是定時(shí)拉取悯搔,而是實(shí)時(shí)推送。

定時(shí)拉取的有:定時(shí)從數(shù)據(jù)庫(kù)拉取舌仍,定時(shí)從外部 server 拉取妒貌,定時(shí)從共享配置文件讀取。

實(shí)時(shí)推送的有:用 kafka 等消息隊(duì)列作為消費(fèi)端消費(fèi)铸豁,用 webSocket灌曙、 http 或者 rpc 接口 作為服務(wù)端接收推送。

07节芥、配置中心還有什么其他基本的素養(yǎng)在刺?

可分區(qū)推送

可以作為 A/B Test 的一種手段,也可以用來(lái)預(yù)防配置出錯(cuò)头镊。

審批

一般來(lái)說(shuō)配置變更是一件不小的事情蚣驼,還是要有審批鏈的。

環(huán)境識(shí)別

對(duì)于 DEV 開(kāi)發(fā)環(huán)境相艇,STG 測(cè)試環(huán)境颖杏,PRD 生產(chǎn)環(huán)境要能做到針對(duì)環(huán)境不同讀取不同的配置項(xiàng)。

持久化

有時(shí)候配置中心會(huì)掛了坛芽,而這時(shí)候是不應(yīng)該影響應(yīng)用的留储,所以應(yīng)該要有持久化的機(jī)制來(lái)保證服務(wù)恢復(fù)后的數(shù)據(jù)問(wèn)題。

監(jiān)控

用戶能實(shí)時(shí)知道發(fā)布到什么哪了咙轩,哪些機(jī)器是新配置哪些機(jī)器是舊配置获讳,以及基于版本的實(shí)實(shí)時(shí)回滾功能。

操作審計(jì)

對(duì)配置的一切操作都會(huì)有操作記錄活喊,以便后期監(jiān)控和審計(jì)用赔嚎。

08、一個(gè)實(shí)時(shí)推送的配置中心架構(gòu)是怎樣的胧弛?

image

一個(gè)配置中心最樸素的架構(gòu)就是上面這樣尤误。用戶發(fā)布配置修改,配置中心通知應(yīng)用進(jìn)行更新结缚,應(yīng)用獲取最新配置损晤。

再細(xì)一點(diǎn)呢,分為客戶端和配置中心兩路來(lái)講红竭。

客戶端

客戶端在應(yīng)用啟動(dòng)的同事尤勋,要啟動(dòng)一個(gè)服務(wù)專門用來(lái)接收來(lái)自配置中心的通知喘落,這個(gè)服務(wù)可以是 kafka 、RocketMQ最冰、WebSocket瘦棋、RPC、DUBBO 等能作為服務(wù)提供給外部的接口暖哨,并主動(dòng)向配置中心注冊(cè)自己赌朋。

服務(wù)提供完之后,開(kāi)始掃描自己所需要的配置項(xiàng)篇裁,并根據(jù)配置主動(dòng)從本地讀扰媛(本地開(kāi)發(fā)模式)或從配置中心獲取相應(yīng)環(huán)境的配置項(xiàng)。

讀取完成后放在內(nèi)存中达布,所有對(duì)于配置的讀取都從內(nèi)存中讀取团甲,對(duì)于JAVA來(lái)說(shuō)可能就是一個(gè) static 變量或者一個(gè) HashMap 。

如果配置中心通知變更了黍聂,那么直接讀取新的值躺苦,然后替換內(nèi)存中的配置項(xiàng),就 ok 了产还。

配置中心

配置中心要做的事情匹厘,就是根據(jù)用戶的操作,對(duì)配置項(xiàng)進(jìn)行發(fā)布雕沉,通過(guò)調(diào)用客戶端提供的接口或者發(fā)送消息集乔,通知客戶端來(lái)更新消息去件,或者直接把更新的配置項(xiàng)推過(guò)去坡椒。非常樸素但是非常好用。

如果覺(jué)得還行的話點(diǎn)贊或者分享給朋友吧尤溜,當(dāng)然能贊賞個(gè)一毛錢就更好了我都會(huì)很開(kāi)心也歡迎留言告訴我大家希望看到些什么倔叼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宫莱,隨后出現(xiàn)的幾起案子丈攒,更是在濱河造成了極大的恐慌,老刑警劉巖授霸,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巡验,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡碘耳,警方通過(guò)查閱死者的電腦和手機(jī)显设,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辛辨,“玉大人捕捂,你說(shuō)我怎么就攤上這事瑟枫。” “怎么了指攒?”我有些...
    開(kāi)封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵慷妙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我允悦,道長(zhǎng)膝擂,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任澡屡,我火速辦了婚禮猿挚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘驶鹉。我一直安慰自己绩蜻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布室埋。 她就那樣靜靜地躺著办绝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姚淆。 梳的紋絲不亂的頭發(fā)上孕蝉,一...
    開(kāi)封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音腌逢,去河邊找鬼降淮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛搏讶,可吹牛的內(nèi)容都是我干的佳鳖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼媒惕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼系吩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起妒蔚,我...
    開(kāi)封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤穿挨,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后肴盏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體科盛,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年菜皂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贞绵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幌墓,死狀恐怖但壮,靈堂內(nèi)的尸體忽然破棺而出冀泻,到底是詐尸還是另有隱情,我是刑警寧澤蜡饵,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布弹渔,位于F島的核電站,受9級(jí)特大地震影響溯祸,放射性物質(zhì)發(fā)生泄漏肢专。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一焦辅、第九天 我趴在偏房一處隱蔽的房頂上張望博杖。 院中可真熱鬧,春花似錦筷登、人聲如沸剃根。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)狈醉。三九已至,卻和暖如春惠险,著一層夾襖步出監(jiān)牢的瞬間苗傅,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工班巩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留渣慕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓抱慌,卻偏偏與公主長(zhǎng)得像逊桦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遥缕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理卫袒,服務(wù)發(fā)現(xiàn)宵呛,斷路器单匣,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,958評(píng)論 6 13
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,077評(píng)論 25 707
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,804評(píng)論 6 342
  • 自古辭舊迎新總是闔家團(tuán)聚幸福安樂(lè)的時(shí)刻。人們寄語(yǔ)未來(lái)宝穗,賦予它許多美好的祝愿和希望户秤。求財(cái)源廣進(jìn),求家庭和睦逮矛,求身體健...
    魚鰍兒閱讀 120評(píng)論 0 0