摘要:如果一直優先處理高優先級的隊列,等這個隊列的請求處理完了,再處理優先級低一級的請求,那么優先級低的隊列可能要等很久才能處理。參考彈力設計之限流設計陳皓
調用配額
之前一篇文章到通過access key調用API的方式,這種調用方式難免會碰到一個問題,那就是,如果用戶不挺地高頻率調用API,服務器是否會過載,如果過載了,是否會影響內部服務。
有個做法,就是給access key設置調用配額(limit,duration),這個配額指的是在某個時間段內(duration),調用的次數不能超過limit指定的數額。如果超過了,則拒絕服務。這種可以通過緩存來實現,利用緩存的expire時間,并且維持一個計數器,每當調用一次,則計數器減一。
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函數做初始化,后面handle函數對請求做判斷,每掉用一次,就把計數器減一;如果當前計數器里的值為0,則拒絕服務。
使用配額的目的是:對于一些高級客戶,可以提高配額,以提高體驗。如果是內部服務調用,那么這個配額,可以提高些。
請求隊列可以提供不同優先級的隊列,針對不同的請求的優先級,把他們放到不同的隊列里,先處理優先級高的隊列,然后優先級更低的隊列。(可以用redis里的有序隊列來實現?)如果有針對這個隊列的處理服務,這個服務能夠合并請求,那么則可以減輕后端服務的負載。
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"}
如上,如果數據庫里有一個對象student,通過請求ModifyItems可以修改student屬性,請求隊列如requests所示,第一個請求修改了name,第二個請求修改了age,這個時候,可以把這2個請求合并成一個,這個新的請求跟兩個請求最終達到的小姑都是一樣的,所以是可行的。
如果一直優先處理高優先級的隊列,等這個隊列的請求處理完了,再處理優先級低一級的請求,那么優先級低的隊列可能要等很久才能處理。
這個時候,可以根據權重來處理,如果優先級隊列有2個,他們優先級分別是:2和1,數值越高,表示優先級更高,那么根據優先級權重,服務器先處理優先級高的隊列里的2個請求,然后再去處理優先級低隊列里的1個請求,優先級低的隊列則不會被餓死。
參考:《彈力設計之“限流設計”》陳皓
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/61995.html
摘要:實現熔斷降級注解除了可以用來做限流控制之外,還能實現與類似的熔斷降級策略。函數簽名要求返回值類型必須與原函數返回值類型一致方法參數列表需要為空,或者可以額外多一個類型的參數用于接收對應的異常。若未配置和,則被限流降級時會將直接拋出。 在之前的《使用Sentinel實現接口限流》一文中,我們僅依靠引入Spring Cloud Alibaba對Sentinel的整合封裝spring-clo...
摘要:限流算法最簡單粗暴的限流算法就是計數器法了,而比較常用的有漏桶算法和令牌桶算法計數器計數器法是限流算法里最簡單也是最容易實現的一種算法。 運營研發團隊 李樂 高并發系統有三把利器:緩存、降級和限流; 限流的目的是通過對并發訪問/請求進行限速來保護系統,一旦達到限制速率則可以拒絕服務(定向到錯誤頁)、排隊等待(秒殺)、降級(返回兜底數據或默認數據); 高并發系統常見的限流有:限制總并發...
摘要:之前有了解到哥的一部分讀者們沒有充分搞清楚限流和熔斷的關系。后者表示系統在同一時刻能處理的最大請求數量,比如次的并發。后續限流策略需要設定的具體標準數值就是從這些指標中來的。限流閾值不繼續處理請求。 如果這是第二次看到我的文章,歡迎掃描文末二維碼訂閱我喲~本文長度為2869字,建議閱讀8分鐘。 可能你在網上看過不少「限流」相關的文章,但是z哥的這篇可能是最全面,最深入淺出的一篇了(容我...
摘要:計數限流算法無論固定窗口還是滑動窗口核心均是對請求進行計數,區別僅僅在于對于計數時間區間的處理。令牌桶限流實現原理令牌桶限流的實現原理在有詳細說明。因此由此為入口進行分析。目前可返回的實現子類包括及兩種,具體不同下文詳細分析。 限流 限流一詞常用于計算機網絡之中,定義如下: In computer networks, rate limiting is used to control t...
閱讀 3024·2021-09-22 15:52
閱讀 2903·2019-08-30 15:55
閱讀 2700·2019-08-30 15:53
閱讀 2454·2019-08-30 13:21
閱讀 1621·2019-08-30 13:10
閱讀 2481·2019-08-26 12:09
閱讀 2564·2019-08-26 10:33
閱讀 1802·2019-08-23 18:06