<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>

          彈性伸縮

          共 5440字,需瀏覽 11分鐘

           ·

          2021-09-30 21:12

          彈性伸縮逐漸變成了各大云廠商的標(biāo)配。比如國(guó)內(nèi)的阿里云。

           
           
          國(guó)外的亞馬遜云。
           
           
          如果是公司內(nèi)部自己用的私有云,那就看公司規(guī)模了。規(guī)模小的可能沒(méi)有彈性伸縮,或者僅僅提供一小部分簡(jiǎn)單的功能,規(guī)模大的則必然有單獨(dú)的彈性伸縮產(chǎn)品。
           
          什么是彈性伸縮呢?簡(jiǎn)單說(shuō)就是,在需要很多機(jī)器的時(shí)候,自動(dòng)擴(kuò)容機(jī)器數(shù)量,在不需要那么多機(jī)器的時(shí)候,自動(dòng)縮減機(jī)器數(shù)量。
           
          比如正常情況下,你的項(xiàng)目 1 臺(tái)服務(wù)器就夠了,但節(jié)假日的時(shí)候訪問(wèn)人數(shù)突然增多,需要 5 臺(tái)機(jī)器才能扛得住,那就把機(jī)器臨時(shí)加到 5 臺(tái),然后節(jié)假日結(jié)束了,再縮減回原來(lái)的 1 臺(tái)。
           
          這個(gè)過(guò)程完全可以由人手動(dòng)去操作,可是人操作就會(huì)失誤,也會(huì)增加人力成本。而且這還只是簡(jiǎn)單的情況,如果是完全無(wú)法預(yù)測(cè)的高峰,比如突然有一條新聞上熱搜了,而你恰好是做資訊類(lèi)的產(chǎn)品,那必然訪問(wèn)人數(shù)突然增加,這時(shí)候你手動(dòng)擴(kuò)充機(jī)器根本來(lái)不及。
           
          而彈性伸縮,就是把這部分盡可能智能化,解放人們?cè)谶@方面浪費(fèi)的時(shí)間,并且要做得比人更好,更智能,更靠譜。
           
          怎么做呢?讓我們從最初沒(méi)有彈性伸縮時(shí)的場(chǎng)景開(kāi)始出發(fā)。
           
           

          無(wú)彈性

           
           
          我們假設(shè)部署一個(gè)服務(wù),已經(jīng)有了一個(gè)自動(dòng)化運(yùn)維的平臺(tái),在這個(gè)平臺(tái)下你新建一個(gè)服務(wù),一個(gè)服務(wù)下有多臺(tái)服務(wù)器,具體數(shù)量可以在服務(wù)配置里手動(dòng)填寫(xiě),每臺(tái)服務(wù)器都部署著同樣的代碼。
           
          服務(wù)名稱(chēng):flash-demo
          代碼倉(cāng)庫(kù)或鏡像地址:https://xxx
          服務(wù)器數(shù)量:10
          服務(wù)器規(guī)格:4核 8G 100G硬盤(pán)
           
          然后這個(gè)平臺(tái)下,你可以選擇一個(gè)服務(wù),并且選擇對(duì)應(yīng)的最新代碼,或者最新鏡像,點(diǎn)擊發(fā)布。之后這個(gè)平臺(tái)就會(huì)為你申請(qǐng)你指定數(shù)量的機(jī)器,并且部署上你的代碼。
           
          你這個(gè)服務(wù)的特征是,每個(gè)周末訪問(wèn)的人就變多,于是你在每個(gè)周五晚上,在服務(wù)器配置中把服務(wù)器數(shù)量改成 20。然后還要在每個(gè)周日晚上,把服務(wù)器數(shù)量改回成 10。
           
          就這樣日復(fù)一日,年復(fù)一年。
           
           

          定時(shí)任務(wù)

           
           
          你再也受不了這種重復(fù)性的勞動(dòng)了,打算把它自動(dòng)化!
           
          于是你在服務(wù)器配置中,增加一項(xiàng)配置,參數(shù)為時(shí)間數(shù)量,可以配置多個(gè)。表示達(dá)到某個(gè)時(shí)間,機(jī)器數(shù)量就調(diào)整多少。
           
          服務(wù)名稱(chēng):flash-demo
          代碼倉(cāng)庫(kù)或鏡像地址:https://xxx
          服務(wù)器數(shù)量:10
          服務(wù)器規(guī)格:4核 8G 100G硬盤(pán)
          時(shí)間:周五晚上 8:00
          數(shù)量:+10
          時(shí)間:周日晚上 8:00
          數(shù)量:-10
           
          這就把你剛剛的重復(fù)勞動(dòng)自動(dòng)化了,程序會(huì)自動(dòng)在每周五晚上 8:00 增加 10 臺(tái)機(jī)器,每周日晚上 8:00 再減少 10 臺(tái)機(jī)器。
           
          你從中解脫!你管它叫定時(shí)任務(wù)
           
           

          報(bào)警任務(wù)

           
           
          直到有一天,你的網(wǎng)站不知道什么原因,訪問(wèn)人數(shù)瞬間增多,可是你隔了好久才反應(yīng)過(guò)來(lái)。

          你趕緊手動(dòng)增加機(jī)器數(shù)量,才逐漸緩解下來(lái)。但由于時(shí)間的耽誤,損失的利益已經(jīng)不可挽回了。于是你決定,由程序來(lái)自動(dòng)監(jiān)控并處理。
           
          接著剛剛定時(shí)任務(wù)的思路,你又增加了一項(xiàng)配置。
           
          服務(wù)名稱(chēng):flash-demo
          代碼倉(cāng)庫(kù)或鏡像地址:https://xxx
          服務(wù)器數(shù)量:10
          服務(wù)器規(guī)格:4核 8G 100G硬盤(pán)
          時(shí)間:周五晚上 8:00
          數(shù)量:+10
          時(shí)間:周日晚上 8:00
          數(shù)量:-10
          觸發(fā)條件:QPS > 100
          數(shù)量:+2
          觸發(fā)條件:QPS < 50
          數(shù)量:-2
           
          這樣,每當(dāng)網(wǎng)站訪問(wèn)人數(shù)突增時(shí),單機(jī) QPS 一旦高于 100,就自動(dòng)觸發(fā)增加機(jī)器的操作,加 2 臺(tái)機(jī)器。同時(shí),如果 QPS 降下來(lái)了,小于 50,則減少 2 臺(tái)機(jī)器,節(jié)省資源。
           
          你管它叫報(bào)警任務(wù)。
           
           

          拆分出獨(dú)立的彈性伸縮模塊

           
           
          服務(wù)配置項(xiàng)越來(lái)越多,不但頁(yè)面越來(lái)越丑,而且也不好管理。另外如果有其他服務(wù)想要復(fù)用,只能完全復(fù)制一份。于是你想到了解耦的思想,把彈性伸縮任務(wù)這個(gè)功能,單獨(dú)抽成一個(gè)模塊。
           
          服務(wù)名稱(chēng):flash-demo
          代碼倉(cāng)庫(kù)或鏡像地址:https://xxx
          服務(wù)器數(shù)量:10
          服務(wù)器規(guī)格:4核 8G 100G硬盤(pán)
          綁定的任務(wù):task-1,task-2,task-3,task-4
           
          任務(wù)名稱(chēng):task-1
          任務(wù)類(lèi)型:定時(shí)任務(wù)
          時(shí)間:周五晚上 8:00
          數(shù)量:+10
           
          任務(wù)名稱(chēng):task-2
          任務(wù)類(lèi)型:定時(shí)任務(wù)
          時(shí)間:周日晚上 8:00
          數(shù)量:-10
           
          任務(wù)名稱(chēng):task-3
          任務(wù)類(lèi)型:報(bào)警任務(wù)
          觸發(fā)條件:QPS > 100
          數(shù)量:+2
           
          任務(wù)名稱(chēng):task-4
          任務(wù)類(lèi)型:報(bào)警任務(wù)
          觸發(fā)條件:QPS < 50
          數(shù)量:-2
           
          這樣,服務(wù)是一個(gè)模塊,彈性伸縮是一個(gè)模塊,彈性伸縮模塊下就是各種彈性任務(wù),分別綁定到不同的服務(wù)上,一下就清爽多了,方便管理,也可以復(fù)用。
           
           

          拆分出伸縮組

           
           
          你發(fā)現(xiàn),目前彈性擴(kuò)張的機(jī)器規(guī)格和部署的項(xiàng)目,都是和原服務(wù)相同的。
           
          而且,假如原服務(wù)有 5 臺(tái)機(jī)器,你設(shè)置的某一個(gè)彈性伸縮任務(wù)一觸發(fā)減少了 5 臺(tái)機(jī)器,結(jié)果導(dǎo)致你原服務(wù)一臺(tái)機(jī)器都沒(méi)有了,那就危險(xiǎn)了。
           
          再有,你的服務(wù)下的機(jī)器列表,你也無(wú)法分辨出哪個(gè)是你原有的機(jī)器,哪個(gè)是彈性伸縮得到的機(jī)器,雖然你可以通過(guò)加標(biāo)簽的方式。
           
          所以,暴露的問(wèn)題就是,彈性伸縮的這部分機(jī)器,沒(méi)有一個(gè)統(tǒng)一的管理。那么很自然,再抽出來(lái)一個(gè)概念就好了,你叫它伸縮組。
           
          同一個(gè)伸縮組下的機(jī)器規(guī)格是一樣的,你可以個(gè)性化指定,這樣就可以做到原服務(wù)有的非彈性機(jī)器規(guī)格是 4核 8G,然后彈性擴(kuò)容的機(jī)器是不同的 2核 4G,已達(dá)到個(gè)性化的需求。
           
          伸縮組需要綁定一個(gè)伸縮任務(wù),那么一個(gè)伸縮任務(wù)觸發(fā)后,就只在伸縮組里面進(jìn)行擴(kuò)展和收縮,不會(huì)影響原服務(wù)固定的非彈性機(jī)器數(shù)量。然后伸縮組也可以配置最大實(shí)例數(shù)與最小實(shí)例數(shù),以便更精細(xì)地控制。伸縮組還可以增加監(jiān)控,單獨(dú)監(jiān)控某一伸縮組內(nèi)的機(jī)器情況,就與原非彈性機(jī)器解耦開(kāi)了。
           
          任務(wù)名稱(chēng):task-1
          任務(wù)類(lèi)型:定時(shí)任務(wù)
          時(shí)間:周五晚上 8:00
          綁定伸縮組:伸縮組 A
          數(shù)量:+10
           
          伸縮組名稱(chēng):伸縮組 A
          機(jī)器規(guī)格:4核8G
          最大實(shí)力數(shù):30
          最小實(shí)力數(shù):10
           
          總之,一切解耦帶來(lái)的便利,都因?yàn)橐粋€(gè)伸縮組被拆出來(lái),而得到。
           
           

          拆分出彈性規(guī)則

           
           
          我們看剛剛的一個(gè)人物,其中有一項(xiàng)其實(shí)表示了如何在伸縮組里變更機(jī)器的含義。
           
          任務(wù)名稱(chēng):task-1
          任務(wù)類(lèi)型:定時(shí)任務(wù)
          時(shí)間:周五晚上 8:00
          綁定伸縮組:伸縮組 A
          數(shù)量:+10
           
          這表示當(dāng)觸發(fā)某條件時(shí),就增加 10 臺(tái)機(jī)器。
           
          但這個(gè)規(guī)則也會(huì)慢慢變得復(fù)雜,可能不僅僅是單純?cè)黾訋着_(tái)或者減少幾臺(tái),還有可能表達(dá)調(diào)整至幾臺(tái),根據(jù)超出閾值的程度動(dòng)態(tài)增減幾臺(tái)等等。一旦復(fù)雜起來(lái),把規(guī)則描述放在任務(wù)中就不太合適了,那好辦,拆出來(lái)。
           
          任務(wù)名稱(chēng):task-1
          任務(wù)類(lèi)型:定時(shí)任務(wù)
          時(shí)間:周五晚上 8:00
          綁定伸縮組:伸縮組 A
          綁定彈性規(guī)則:?jiǎn)渭冊(cè)黾?10 臺(tái)
           
          彈性規(guī)則名稱(chēng):?jiǎn)渭冊(cè)黾?10 臺(tái)
          規(guī)則類(lèi)型:簡(jiǎn)單規(guī)則
          執(zhí)行操作類(lèi)型:增加
          數(shù)量:10
          實(shí)例預(yù)熱時(shí)間:300 ms
           
          顧名思義,大家應(yīng)該能看懂,這里有個(gè)實(shí)例預(yù)熱時(shí)間,意思是實(shí)例啟動(dòng)成功后,過(guò) 300 ms 再加入負(fù)載均衡策略池里,允許被上層應(yīng)用訪問(wèn),這樣就可以留一部分預(yù)熱時(shí)間,用于比如 Java 應(yīng)用程序的類(lèi)加載過(guò)程。
           
          總之,你能想到的更靈活的改動(dòng),都直接在某一規(guī)則當(dāng)中就好了。你可以配置一個(gè)特別復(fù)雜精細(xì)的規(guī)則,然后綁定給任務(wù)去用,這一部分復(fù)雜性就完全不影響一個(gè)任務(wù)本身了,任務(wù)可以專(zhuān)注于自己的判斷條件,而不用去管具體觸發(fā)后的執(zhí)行規(guī)則是什么。
           
           

          操作智能化

           
           
          有的時(shí)候,你可能希望達(dá)到某個(gè)需求,就是希望 CPU 維持在 10% 左右。為了達(dá)到這個(gè)需求,其實(shí)可以通過(guò)兩個(gè)報(bào)警任務(wù)來(lái)實(shí)現(xiàn),一個(gè)是 CPU 大于 12% 時(shí)增加 2 臺(tái)機(jī)器,一個(gè)是 CPU 小于 8% 時(shí)減少 2 臺(tái)機(jī)器,通過(guò)兩個(gè)報(bào)警任務(wù),大概實(shí)現(xiàn)將 CPU 維持在 10% 左右這個(gè)用戶需求。
           
          但這時(shí)候你完全可以發(fā)揮你的產(chǎn)品思維,報(bào)警任務(wù)是底層的控制手段,而用戶訴求很可能是它們的組合和抽象,那我們完全可以就讓用戶配置一個(gè) CPU 維持在 10% 這樣一個(gè)最終目標(biāo),然后由程序自動(dòng)將其拆解為對(duì)應(yīng)的多個(gè)報(bào)警任務(wù)和彈性規(guī)則的組合,以滿足用戶的這一目標(biāo)。
           
          這樣,方便了用戶的配置,將底層復(fù)雜的配置實(shí)現(xiàn)對(duì)用戶保持了透明。這樣做的好處是顯而易見(jiàn)的,當(dāng)然壞處就是有潛規(guī)則了,用戶不知道你底層是怎么玩的,可能會(huì)心里沒(méi)底。畢竟用彈性伸縮的用戶,都是開(kāi)發(fā)人員嘛,開(kāi)發(fā)人員還是希望能夠知道更多細(xì)節(jié)的。
           
           

          可預(yù)測(cè)智能化

           
           
          如果說(shuō)上面的操作智能化可以簡(jiǎn)化一部分不希望關(guān)注太多細(xì)節(jié)的用戶,那可預(yù)測(cè)智能化就是更加簡(jiǎn)化了。
           
          我們可以根據(jù)用戶服務(wù)的歷史數(shù)據(jù),基于機(jī)器學(xué)習(xí)的方式,了解這個(gè)服務(wù)什么時(shí)候有可能處于高峰,什么時(shí)候又處于低谷,然后自動(dòng)幫忙配置出一系列的定時(shí)任務(wù)和報(bào)警任務(wù)。
           
          定時(shí)任務(wù)用于提前預(yù)測(cè)可能出現(xiàn)的高峰和低谷,動(dòng)態(tài)調(diào)整機(jī)器數(shù)。而報(bào)警任務(wù)作為一個(gè)兜底方案,萬(wàn)一沒(méi)預(yù)測(cè)到的地方,也不至于就沒(méi)有辦法了。
           
          此時(shí)用戶僅僅需要一鍵開(kāi)啟智能化,就可以完全不用管彈性伸縮這玩意了,當(dāng)然,你得有足夠的歷史數(shù)據(jù)供彈性伸縮平臺(tái)去分析,不能直接丟過(guò)去一個(gè)任務(wù)就讓人家給你智能管理。
           
          可預(yù)測(cè)智能化有兩個(gè)方向可以做,一個(gè)方向是前置預(yù)測(cè),就是完全基于歷史數(shù)據(jù),提前就把該擴(kuò)容的機(jī)器擴(kuò)好,流量洪峰來(lái)的時(shí)候直接就穩(wěn)穩(wěn)接住,這樣是最 Q 彈的。另一個(gè)方向是后置預(yù)測(cè),就是當(dāng)一波流量洪峰來(lái)的時(shí)候,發(fā)現(xiàn)這波流量比較迅猛,之后短時(shí)間內(nèi)可能很快達(dá)到一個(gè)高峰,那就別兩臺(tái)兩臺(tái)擴(kuò)了,直接先擴(kuò)個(gè) 20 臺(tái)再說(shuō),當(dāng)然這樣還是有一小段時(shí)間是沒(méi)有完美接住流量的,不過(guò)已經(jīng)比無(wú)預(yù)測(cè)無(wú)腦一點(diǎn)點(diǎn)擴(kuò)容的策略智能一些了。
           
           

          原理是啥

           
           
          有人問(wèn)彈性伸縮的原理是啥,我覺(jué)得沒(méi)有多大意義,因?yàn)闆](méi)什么原理。這個(gè)產(chǎn)品難點(diǎn)在于整個(gè)思想的設(shè)計(jì)和細(xì)節(jié)的處理,具體原理就三個(gè)重點(diǎn):
           
          一、如何獲取指標(biāo)數(shù)據(jù)
           
          因?yàn)閺椥陨炜s主要是根據(jù)某些指標(biāo)達(dá)到設(shè)定的閾值了,然后觸發(fā)什么什么操作。所以指標(biāo)獲取是第一步,比如 CPU 負(fù)載、內(nèi)存使用率等系統(tǒng)指標(biāo),以及 QPS 等業(yè)務(wù)指標(biāo),無(wú)論哪種指標(biāo),一定是有另外一個(gè)統(tǒng)一的打點(diǎn)監(jiān)控平臺(tái)去收集的,只需要調(diào)他們接口獲取就好了,就是一個(gè)數(shù)值的獲取嘛。
           
          二、如何進(jìn)行指標(biāo)聚合
           
          比如你的用戶配置了一個(gè)
          CPU 使用率大于 10% 增加 1 臺(tái)機(jī)器
           
          又配置了一個(gè)
          CPU 使用率大于 10% 增加 2 臺(tái)機(jī)器
           
          那此時(shí)你的邏輯是,提示用戶不能這樣進(jìn)行配置,還是有自己的一套聚合邏輯,比如取最大值,就增加 2 臺(tái)。這是你要去綜合考慮的細(xì)節(jié)問(wèn)題。
           
          三、如何調(diào)度機(jī)器
           
          觸發(fā)閾值后,最后一步就是增加或減少機(jī)器,或者更復(fù)雜的運(yùn)維操作比如重啟機(jī)器、執(zhí)行一些 shell 腳本等。這些也一定是有一個(gè)專(zhuān)門(mén)的調(diào)度產(chǎn)品和團(tuán)隊(duì)在去做的,他們的底層就是 k8s 調(diào)度 docker 容器那一套了,對(duì)于彈性計(jì)算產(chǎn)品來(lái)說(shuō),也是調(diào)幾個(gè)接口的事情,無(wú)需關(guān)心底層具體調(diào)度邏輯。
           
          所以也能看出,當(dāng)分工足夠細(xì)致時(shí),每一層都在做 CRUD 和調(diào)包俠的事情,一旦變得復(fù)雜了,那就該考慮再拆出一層讓另一個(gè)團(tuán)隊(duì)或產(chǎn)品去做了。
           
          關(guān)于彈性伸縮,你了解了么?了不了解我也就寫(xiě)到這了,哈哈哈。本篇文章并不是自己想像出來(lái)的一步步優(yōu)化和解耦,而是根據(jù)阿里云的彈性伸縮產(chǎn)品實(shí)際的發(fā)展路線來(lái)梳理的。
           
           
          你看,這些概念,就是我們上面講的概念。而且它們也并不是一蹴而就的,也是有一個(gè)不斷迭代的發(fā)展過(guò)程,具體我們可以看產(chǎn)品發(fā)布記錄。
           
           
          可以看到 2019 年 1 月開(kāi)始支持的這個(gè)目標(biāo)追蹤伸縮規(guī)則,其實(shí)就是我們的操作智能化的意思,新建一個(gè)目標(biāo)追蹤伸縮規(guī)則,就等于建立了多個(gè)報(bào)警任務(wù),并且綁定簡(jiǎn)單擴(kuò)縮容規(guī)則,以達(dá)到追蹤一個(gè)指定的監(jiān)控值,比如將 CPU 使用率追蹤保持為 10%。
           
          而阿里云的彈性伸縮還有很多更復(fù)雜的設(shè)計(jì),大家感興趣也可以去體驗(yàn)一下。
           
          本文所講的彈性伸縮如果你都能理解了,那市面上大部分彈性伸縮的設(shè)計(jì),都不會(huì)復(fù)雜過(guò)本文介紹的了。甚至大多數(shù)公司的所謂彈性伸縮,就只是我們講的最初設(shè)計(jì),僅僅在服務(wù)配置上多一個(gè)參數(shù),以最簡(jiǎn)單的增減機(jī)器的方式來(lái)實(shí)現(xiàn),這對(duì)大部分小規(guī)模的業(yè)務(wù)場(chǎng)景,已經(jīng)足夠了。
          瀏覽 56
          點(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>
                  亚洲黄片在线播放 | 嫩草99| 韩国毛片一区二区三区 | 日本无码在线看 | 免费毛片18女人毛片大全在线看 |