流量治理最大的痛點(diǎn)-資源利用率上不去
點(diǎn)擊上方藍(lán)字“設(shè)為星標(biāo)”
大家好,我是架構(gòu)擺渡人,這是流量治理系列的第9篇原創(chuàng)文章,如果有收獲,還請(qǐng)分享給更多的朋友。
?
曾經(jīng)有人問(wèn)過(guò)我,限流有痛點(diǎn)嗎?我當(dāng)時(shí)的回答是:限流閥值不太好評(píng)估以及限流降低了用戶的體驗(yàn),這是我認(rèn)為的痛點(diǎn)。
?
限流閥值到底怎么評(píng)估還是得有壓測(cè)的動(dòng)作,特別是現(xiàn)在電商平臺(tái),在大促前都會(huì)進(jìn)行全鏈路壓測(cè),將問(wèn)題暴露出來(lái),看能承受多少流量的請(qǐng)求。然后再根據(jù)業(yè)務(wù)預(yù)期,就知道要不要擴(kuò)容,以及流控的指標(biāo)了,說(shuō)難也不難,就是需要多種手段進(jìn)行佐證。
?
降低用戶體驗(yàn)這個(gè)是限流必須經(jīng)歷的,用戶正在下單,然后收到的提示就是服務(wù)器當(dāng)前太擁擠,網(wǎng)絡(luò)異常,請(qǐng)重試等等提示,說(shuō)簡(jiǎn)單點(diǎn)就是降低了用戶的體驗(yàn),因?yàn)橛脩粜枰磸?fù)操作。說(shuō)的嚴(yán)重點(diǎn)就是影響了下單的轉(zhuǎn)換率,所以這也是為什么電商平臺(tái)大促前要壓測(cè)的原因。不是說(shuō)直接限流到很低的水位就行,就是用戶體驗(yàn)和系統(tǒng)復(fù)雜度要權(quán)衡。
?
其實(shí)還有一個(gè)更痛的點(diǎn)就是:資源利用率上不去。
?
當(dāng)我們經(jīng)過(guò)壓測(cè)后,評(píng)估單節(jié)點(diǎn)的性能最大值時(shí),流控的閥值在70%是比較穩(wěn)妥的做法。比如你單機(jī)壓到1000 QPS, 然后CPU和內(nèi)存都在50%左右,那么直接就流控 1000 即可。
?
這1000里面可能還會(huì)細(xì)分接口,不同的接口限流的值也不同。比如你某個(gè)接口配置了500限流,只要這個(gè)接口的請(qǐng)求量超過(guò)了500那么必定會(huì)限流,但是有可能這個(gè)時(shí)候只有這個(gè)接口的訪問(wèn)量比較多,其他的都沒(méi)什么訪問(wèn)量,機(jī)器的CPU,內(nèi)存什么的還很低,包括數(shù)據(jù)庫(kù)的響應(yīng)也很快。此時(shí)好像不限流也沒(méi)關(guān)系,但是因?yàn)橄蘖髋渲玫氖枪潭ǖ闹担荒芟拗屏恕?/span>
?
面對(duì)這種情況,一種新的限流方式就誕生了,就是自適應(yīng)限流。自適應(yīng)限流就是沒(méi)有固定的限流閥值,限流的閥值會(huì)變化,變化的因素就是依賴的資源是否足夠,比如CPU,內(nèi)存等資源。
?
自適應(yīng)限流還是比較復(fù)雜的,復(fù)雜點(diǎn)在于需要實(shí)時(shí)采集各種數(shù)據(jù),然后通過(guò)大量的計(jì)算,再提取出決策,這個(gè)決策就是是否要限流,并且計(jì)算速度還得快。
?
大概的架構(gòu)如下:

當(dāng)然這個(gè)計(jì)算是單獨(dú)的服務(wù),還是內(nèi)嵌在當(dāng)前的應(yīng)用中都是可以的,取決于性能影響以及是否集群流控。
?
有了自適應(yīng)限流,資源的利用率將被大大提升。因?yàn)椴挥迷谠O(shè)置一個(gè)比較穩(wěn)妥的固定的值了,而是根據(jù)資源的使用情況來(lái)決定是否限流,最大程序利用資源。
?
在開(kāi)源框架Sentinel中也有這么一個(gè)自適應(yīng)限流的功能,感興趣的可以去學(xué)習(xí)下:https://github.com/alibaba/Sentinel/wiki/%E7%B3%BB%E7%BB%9F%E8%87%AA%E9%80%82%E5%BA%94%E9%99%90%E6%B5%81
?
自適應(yīng)限流的好處一個(gè)是能夠提高資源的利用率,還有就是能否適應(yīng)不確定的因素帶來(lái)的影響。相比于靜態(tài)的限流配置,我們一定是基于壓測(cè)后的結(jié)果來(lái)配置,即使是壓測(cè)后,到了真正大流量來(lái)襲的時(shí)候,也無(wú)法保證跟壓測(cè)時(shí)的結(jié)果一模一樣。萬(wàn)一有突發(fā)情況,一條慢Sql把數(shù)據(jù)庫(kù)的CPU打滿了,你限流的閥值還是那么多QPS, 慢SQL增加幾百倍,這個(gè)限流此時(shí)就失去了作用。
?
通過(guò)自適應(yīng)限流,根據(jù)實(shí)時(shí)計(jì)算的結(jié)果決定是否要流控,保證系統(tǒng)穩(wěn)定性。同時(shí)也避免了繁瑣的人工配置過(guò)程,系統(tǒng)自動(dòng)調(diào)節(jié)。
?
再舉一個(gè)例子:下單接口限流值為1000,訂單詳情為500。如果按照固定的值做限流,下單超過(guò)1000就會(huì)被限制,如果下單的請(qǐng)求量大于訂單詳情的量,那么自適應(yīng)限流是否可以先滿足業(yè)務(wù)價(jià)值更高的流量,讓這部分流量先通過(guò),如果此時(shí)有其他流量來(lái)是否可以自動(dòng)先限制住。這部分的價(jià)值不用我多說(shuō),大家都明白。
?
所以自適應(yīng)限流能做很多東西,主要是智能,智能提現(xiàn)在算法層面,有點(diǎn)人工智能的意思哈。
?
大家好,我是從古代穿越過(guò)來(lái)的美男子:架構(gòu)擺渡人。我將把我的武功秘籍全部傳授與你們,覺(jué)得有用請(qǐng)分享給身邊的朋友。來(lái)個(gè)三連吧,感謝各位!另外我還在B站錄制了《真實(shí)訂單業(yè)務(wù),億級(jí)數(shù)據(jù)帶你實(shí)戰(zhàn)分庫(kù)分表》的實(shí)戰(zhàn)課程,記得去學(xué)習(xí)哦!
點(diǎn)擊閱讀原文直達(dá)主頁(yè)
