摘要:如果一直優(yōu)先處理高優(yōu)先級(jí)的隊(duì)列,等這個(gè)隊(duì)列的請(qǐng)求處理完了,再處理優(yōu)先級(jí)低一級(jí)的請(qǐng)求,那么優(yōu)先級(jí)低的隊(duì)列可能要等很久才能處理。參考彈力設(shè)計(jì)之限流設(shè)計(jì)陳皓
調(diào)用配額
之前一篇文章到通過(guò)access key調(diào)用API的方式,這種調(diào)用方式難免會(huì)碰到一個(gè)問(wèn)題,那就是,如果用戶(hù)不挺地高頻率調(diào)用API,服務(wù)器是否會(huì)過(guò)載,如果過(guò)載了,是否會(huì)影響內(nèi)部服務(wù)。
有個(gè)做法,就是給access key設(shè)置調(diào)用配額(limit,duration),這個(gè)配額指的是在某個(gè)時(shí)間段內(nèi)(duration),調(diào)用的次數(shù)不能超過(guò)limit指定的數(shù)額。如果超過(guò)了,則拒絕服務(wù)。這種可以通過(guò)緩存來(lái)實(shí)現(xiàn),利用緩存的expire時(shí)間,并且維持一個(gè)計(jì)數(shù)器,每當(dāng)調(diào)用一次,則計(jì)數(shù)器減一。
def init(access_key, limit, duration): memcache.set(key=access_key, val=limit, expire=duration) def handle(access_key): count = memcache.get(key=access_key) if count == 0: return "DENY" memcache.decr(key=access_key) return "OK"
前面init函數(shù)做初始化,后面handle函數(shù)對(duì)請(qǐng)求做判斷,每掉用一次,就把計(jì)數(shù)器減一;如果當(dāng)前計(jì)數(shù)器里的值為0,則拒絕服務(wù)。
使用配額的目的是:對(duì)于一些高級(jí)客戶(hù),可以提高配額,以提高體驗(yàn)。如果是內(nèi)部服務(wù)調(diào)用,那么這個(gè)配額,可以提高些。
請(qǐng)求隊(duì)列可以提供不同優(yōu)先級(jí)的隊(duì)列,針對(duì)不同的請(qǐng)求的優(yōu)先級(jí),把他們放到不同的隊(duì)列里,先處理優(yōu)先級(jí)高的隊(duì)列,然后優(yōu)先級(jí)更低的隊(duì)列。(可以用redis里的有序隊(duì)列來(lái)實(shí)現(xiàn)?)如果有針對(duì)這個(gè)隊(duì)列的處理服務(wù),這個(gè)服務(wù)能夠合并請(qǐng)求,那么則可以減輕后端服務(wù)的負(fù)載。
student: { "name": "ABC", "age": 30, } requests: [0] {"action": "ModifyItems", "name": "xiao ming"} [1] {"action": "ModifyItems", "age": 26} After handled new request: [0] {"action": "ModifyItems", "age": 26, "name": "xiao ming"}
如上,如果數(shù)據(jù)庫(kù)里有一個(gè)對(duì)象student,通過(guò)請(qǐng)求ModifyItems可以修改student屬性,請(qǐng)求隊(duì)列如requests所示,第一個(gè)請(qǐng)求修改了name,第二個(gè)請(qǐng)求修改了age,這個(gè)時(shí)候,可以把這2個(gè)請(qǐng)求合并成一個(gè),這個(gè)新的請(qǐng)求跟兩個(gè)請(qǐng)求最終達(dá)到的小姑都是一樣的,所以是可行的。
如果一直優(yōu)先處理高優(yōu)先級(jí)的隊(duì)列,等這個(gè)隊(duì)列的請(qǐng)求處理完了,再處理優(yōu)先級(jí)低一級(jí)的請(qǐng)求,那么優(yōu)先級(jí)低的隊(duì)列可能要等很久才能處理。
這個(gè)時(shí)候,可以根據(jù)權(quán)重來(lái)處理,如果優(yōu)先級(jí)隊(duì)列有2個(gè),他們優(yōu)先級(jí)分別是:2和1,數(shù)值越高,表示優(yōu)先級(jí)更高,那么根據(jù)優(yōu)先級(jí)權(quán)重,服務(wù)器先處理優(yōu)先級(jí)高的隊(duì)列里的2個(gè)請(qǐng)求,然后再去處理優(yōu)先級(jí)低隊(duì)列里的1個(gè)請(qǐng)求,優(yōu)先級(jí)低的隊(duì)列則不會(huì)被餓死。
參考:《彈力設(shè)計(jì)之“限流設(shè)計(jì)”》陳皓
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/61995.html
摘要:實(shí)現(xiàn)熔斷降級(jí)注解除了可以用來(lái)做限流控制之外,還能實(shí)現(xiàn)與類(lèi)似的熔斷降級(jí)策略。函數(shù)簽名要求返回值類(lèi)型必須與原函數(shù)返回值類(lèi)型一致方法參數(shù)列表需要為空,或者可以額外多一個(gè)類(lèi)型的參數(shù)用于接收對(duì)應(yīng)的異常。若未配置和,則被限流降級(jí)時(shí)會(huì)將直接拋出。 在之前的《使用Sentinel實(shí)現(xiàn)接口限流》一文中,我們僅依靠引入Spring Cloud Alibaba對(duì)Sentinel的整合封裝spring-clo...
摘要:限流算法最簡(jiǎn)單粗暴的限流算法就是計(jì)數(shù)器法了,而比較常用的有漏桶算法和令牌桶算法計(jì)數(shù)器計(jì)數(shù)器法是限流算法里最簡(jiǎn)單也是最容易實(shí)現(xiàn)的一種算法。 運(yùn)營(yíng)研發(fā)團(tuán)隊(duì) 李樂(lè) 高并發(fā)系統(tǒng)有三把利器:緩存、降級(jí)和限流; 限流的目的是通過(guò)對(duì)并發(fā)訪(fǎng)問(wèn)/請(qǐng)求進(jìn)行限速來(lái)保護(hù)系統(tǒng),一旦達(dá)到限制速率則可以拒絕服務(wù)(定向到錯(cuò)誤頁(yè))、排隊(duì)等待(秒殺)、降級(jí)(返回兜底數(shù)據(jù)或默認(rèn)數(shù)據(jù)); 高并發(fā)系統(tǒng)常見(jiàn)的限流有:限制總并發(fā)...
摘要:下面是幾種常見(jiàn)的限流技術(shù)一限流算法常用的限流算法有令牌桶,漏桶令牌桶令牌桶算法是網(wǎng)絡(luò)流量整形和速率限制中最常使用的一種算法。 就秒殺接口來(lái)說(shuō),當(dāng)訪(fǎng)問(wèn)頻率或者并發(fā)請(qǐng)求超過(guò)其承受范圍的時(shí)候,這時(shí)候我們就要考慮限流來(lái)保證接口的可用性,以防止非預(yù)期的請(qǐng)求對(duì)系統(tǒng)壓力過(guò)大而引起的系統(tǒng)癱瘓。通常的策略就是拒絕多余的訪(fǎng)問(wèn),或者讓多余的訪(fǎng)問(wèn)排隊(duì)等待服務(wù)。下面是幾種常見(jiàn)的限流技術(shù) 一、限流算法常用的限流算...
摘要:之前有了解到哥的一部分讀者們沒(méi)有充分搞清楚限流和熔斷的關(guān)系。后者表示系統(tǒng)在同一時(shí)刻能處理的最大請(qǐng)求數(shù)量,比如次的并發(fā)。后續(xù)限流策略需要設(shè)定的具體標(biāo)準(zhǔn)數(shù)值就是從這些指標(biāo)中來(lái)的。限流閾值不繼續(xù)處理請(qǐng)求。 如果這是第二次看到我的文章,歡迎掃描文末二維碼訂閱我喲~本文長(zhǎng)度為2869字,建議閱讀8分鐘。 可能你在網(wǎng)上看過(guò)不少「限流」相關(guān)的文章,但是z哥的這篇可能是最全面,最深入淺出的一篇了(容我...
摘要:計(jì)數(shù)限流算法無(wú)論固定窗口還是滑動(dòng)窗口核心均是對(duì)請(qǐng)求進(jìn)行計(jì)數(shù),區(qū)別僅僅在于對(duì)于計(jì)數(shù)時(shí)間區(qū)間的處理。令牌桶限流實(shí)現(xiàn)原理令牌桶限流的實(shí)現(xiàn)原理在有詳細(xì)說(shuō)明。因此由此為入口進(jìn)行分析。目前可返回的實(shí)現(xiàn)子類(lèi)包括及兩種,具體不同下文詳細(xì)分析。 限流 限流一詞常用于計(jì)算機(jī)網(wǎng)絡(luò)之中,定義如下: In computer networks, rate limiting is used to control t...
閱讀 3197·2021-09-22 15:52
閱讀 2965·2019-08-30 15:55
閱讀 2761·2019-08-30 15:53
閱讀 2511·2019-08-30 13:21
閱讀 1699·2019-08-30 13:10
閱讀 2546·2019-08-26 12:09
閱讀 2633·2019-08-26 10:33
閱讀 1882·2019-08-23 18:06