亚洲日本欧美日韩高观看,性高湖久久久久久久久,亚洲av成人噜噜无码网站,亚洲欧美日韩国产一区二区动图,亚洲欧美日韩国产精品一区二区


學(xué)AI,好工作 就找北大青鳥(niǎo)
關(guān)注小青 聽(tīng)課做題,輕松學(xué)習(xí)
周一至周日
4000-9696-28

千呼萬(wàn)喚,高并發(fā)限流算法之漏桶&令牌桶來(lái)了!

來(lái)源:北大青鳥(niǎo)總部 2023年06月08日 14:44

摘要: 無(wú)論是漏桶算法還是令牌桶算法,都只是工具,最終要服務(wù)于業(yè)務(wù),通過(guò)原理與偽代碼的結(jié)合,無(wú)論是直接面對(duì)用戶(hù)的業(yè)務(wù)部門(mén),還是服務(wù)于業(yè)務(wù)的基礎(chǔ)設(shè)施部門(mén),都必須要對(duì)高并發(fā)謹(jǐn)慎起來(lái),做好緩存降級(jí)限流措施。

等啊等,盼啊盼,6月份終于來(lái)了,在618,你可以清空掉所有的預(yù)售訂單,還有購(gòu)買(mǎi)商家所推出的限時(shí)折扣如前十五分鐘購(gòu)買(mǎi)5折等,買(mǎi)的人很開(kāi)心,商家也很開(kāi)心。然而程序員們不開(kāi)心了,提供應(yīng)用服務(wù)的團(tuán)隊(duì)、提供監(jiān)控服務(wù)的團(tuán)隊(duì)、提供基礎(chǔ)設(shè)施服務(wù)的團(tuán)隊(duì)都繃著一根神經(jīng),生怕是自己這一環(huán)掛了,導(dǎo)致整個(gè)服務(wù)鏈路崩塌,最后被老板祭天了。

而今天我們給大家?guī)?lái)了一劑良藥,那便是針對(duì)高并發(fā)的解決方案。所謂高并發(fā)指的是請(qǐng)求突然大量的襲來(lái),比如雙十一整點(diǎn)搶購(gòu)這種,服務(wù)器正常情況下的流量請(qǐng)求是50000個(gè),雙十一來(lái)了500000個(gè),這叫人服務(wù)器咋扛得住嘛。而應(yīng)對(duì)高并發(fā),我們也有三大法寶:緩存、降級(jí)、限流。所謂緩存就是把用戶(hù)最常訪(fǎng)問(wèn)的數(shù)據(jù)放起來(lái),用戶(hù)請(qǐng)求來(lái)時(shí),先訪(fǎng)問(wèn)緩存中的數(shù)據(jù),如果緩存沒(méi)有命中,再訪(fǎng)問(wèn)后端數(shù)據(jù),一定程度緩解了高并發(fā)。所謂降級(jí)就是非核心服務(wù)不讓訪(fǎng)問(wèn)了、核心服務(wù)返回上一級(jí)頁(yè)面,用戶(hù)請(qǐng)求來(lái)時(shí),最重要的頁(yè)面就是支付,其余的積分啥的都不重要,因此集中資源給到支付模塊使用。所謂限流就是限制流量,原來(lái)可以支撐50000個(gè)請(qǐng)求,突然來(lái)了500000個(gè)請(qǐng)求,限制只有60000個(gè)請(qǐng)求可以正常訪(fǎng)問(wèn),其余的都暫時(shí)先訪(fǎng)問(wèn)不了。

在限流中,常用的算法有兩個(gè):漏桶算法、令牌桶算法。漏桶算法就像是一個(gè)漏掉的水桶一樣,水桶底部是空的,無(wú)論上面倒多少水下來(lái),漏出去的水都是固定的。漏桶算法如下所示,在流量場(chǎng)景中,BurstyFlow代表流量,在0-2秒內(nèi)突然來(lái)了12Mbps的突發(fā)流量,中間2-7秒沒(méi)有流量過(guò)來(lái),7-10秒是平穩(wěn)的流量,可以看到數(shù)據(jù)不是平穩(wěn)的,通過(guò)漏桶可以將數(shù)據(jù)變得平穩(wěn),每秒出去的流量是3Mbps。



它的偽代碼實(shí)現(xiàn)如下,我們定義了一個(gè)漏桶的demo,定義了桶容量、水流出速度、當(dāng)前水量、時(shí)間,通過(guò)水量與容量的差來(lái)看看是否繼續(xù)加水(也就是流量是否還可以繼續(xù)進(jìn)來(lái)),如果小于總?cè)萘?,則請(qǐng)求可以繼續(xù)進(jìn)來(lái),如果大于則請(qǐng)求無(wú)法進(jìn)來(lái)了。



另一個(gè)限流算法是令牌桶算法,它與漏桶算法的區(qū)別在于允許流量一定程度的改變,不像漏桶算法始終是固定的流量。那么什么是令牌桶算法呢?

令牌桶算法就是在桶里面有一定令牌,我們可以往桶里不斷的去添加令牌,請(qǐng)求到來(lái)時(shí)拿到令牌就可以進(jìn)入下一階段去處理了,拿不到令牌的請(qǐng)求就會(huì)處于等待狀態(tài)。



它的偽代碼實(shí)現(xiàn)如下,我們定義了令牌桶的大小,令牌放入的速度,當(dāng)前的令牌量,執(zhí)行算法不斷的去添加令牌,如果大于桶容量則停止增加,反之則繼續(xù)增加令牌,如果當(dāng)前令牌數(shù)小于1,則不發(fā)放令牌,拒絕請(qǐng)求,如果大于1則發(fā)放令牌,處理請(qǐng)求。



講完了兩個(gè)限流算法后,我們看看在業(yè)務(wù)中是如何去實(shí)現(xiàn)限流。在微服務(wù)架構(gòu)下,我們把一個(gè)大的應(yīng)用分為多個(gè)微服務(wù),服務(wù)與服務(wù)之間通過(guò)遠(yuǎn)程調(diào)用進(jìn)行通信,服務(wù)與數(shù)據(jù)庫(kù)之間通過(guò)數(shù)據(jù)庫(kù)連接池進(jìn)行連接,服務(wù)內(nèi)部則通過(guò)接口相互調(diào)用來(lái)實(shí)現(xiàn)功能。因此整個(gè)限流的層次也包含應(yīng)用層級(jí)限制、資源層級(jí)限制、接口層級(jí)限制。

在應(yīng)用層級(jí)的限制,主要是總并發(fā)數(shù)的限制,如果超過(guò)了閾值則不響應(yīng)用戶(hù)請(qǐng)求,比如tomcat自帶的設(shè)置,如MaxConnector設(shè)置最大連接數(shù)、MaxThreads設(shè)置最大線(xiàn)程數(shù)。在資源層級(jí)的限制,可以使用數(shù)據(jù)庫(kù)連接池、線(xiàn)程池等技術(shù),超過(guò)線(xiàn)程池?cái)?shù)則不能連接數(shù)據(jù)庫(kù),無(wú)法響應(yīng)服務(wù)。在接口層級(jí)可以對(duì)核心接口的調(diào)用進(jìn)行限制,單位時(shí)間內(nèi)(如每秒/每分鐘/每小時(shí))最大允許調(diào)用量,超過(guò)之后則調(diào)用失敗。表層的限制策略都是依托于深層的算法,而這算法可以是漏桶或者令牌桶算法。

無(wú)論是漏桶算法還是令牌桶算法,都只是工具,最終要服務(wù)于業(yè)務(wù),通過(guò)原理與偽代碼的結(jié)合,你明白如何做實(shí)現(xiàn)了嘛?趕緊在你的業(yè)務(wù)中碼起來(lái)吧。無(wú)論是直接面對(duì)用戶(hù)的業(yè)務(wù)部門(mén),還是服務(wù)于業(yè)務(wù)的基礎(chǔ)設(shè)施部門(mén),都必須要對(duì)高并發(fā)謹(jǐn)慎起來(lái),做好緩存降級(jí)限流措施。


標(biāo)簽: 高并發(fā)
報(bào)名優(yōu)惠
免費(fèi)試聽(tīng)
課程資料
官方微信
返回頂部
培訓(xùn)課程 熱門(mén)話(huà)題 站內(nèi)鏈接