演算法學習 限流演算法

2021-10-23 19:40:27 字數 1075 閱讀 5855

限流演算法,即使用演算法對流量進行限制,通俗的說就是防止伺服器無法承受巨大的訪問流量或惡意訪問流量而採取的一種手段

限流的場景可以分為

熱點產品熱點話題流量的暴增。這種情況造成的流量暴增都是在極短時間內,巨大的伺服器壓力容易導致服務宕機

惡意的爬蟲刷單。這種情況的流量都是週期性的或持續性的保持在高位,使伺服器始終處於高負荷狀態下執行

限流的應用環境可以分為

單機限流的實現

介紹計數器演算法是使用計數器在週期內累加訪問次數,當達到設定的限流值時,觸發限流策略。下乙個週期開始時,進行清零,重新計數

舉例假如限流 qps 為 100,演算法的實現思路就是從第乙個請求進來開始計時,在接下去的 1s 內,每來乙個請求,就把計數加 1,如果累加的數字達到了 100,那麼後續的請求就會被全部拒絕。等到 1s 結束後,把計數恢復成 0,重新開始計數缺點

實現介紹

漏桶演算法是維護乙個類似佇列的漏桶,桶上邊流量可以隨便流入,桶下邊有個出口,流量需要按照桶下方出口定量執行請求

舉例假如限流 qps 為 100,桶的 qps 為 10000(即為伺服器的最大承壓),演算法的實現思路就是外部可以一直往桶裡流入流量,桶下方的口控制著流量始終以 100 的勻速流出。此外當流入的流量超過 10000 時直接拒絕請求缺點

實現介紹

令牌桶算同樣維護乙個桶,用來存放固定數量的令牌。桶上方以一定的速率往桶中放令牌。每次請求呼叫需要先獲取令牌,只有拿到令牌,才有機會繼續執行,否則選擇等待可用的令牌或直接拒絕

舉例假如限流 qps 為 100,那麼桶在初始化完成後就已經有 100 個令牌了。等服務啟動完成後對外提供服務時,可以抵擋瞬時的 100 個請求。然後開始以一定的速度往桶裡放令牌,同時也會判斷桶中還有多少令牌

實現演算法

確定引數

時間複雜度

限制突發流量

平滑限流

分布式實現難度

計數器法

計數週期和週期內最大訪問數

低o(1)否否

低漏桶演算法

漏桶流出速度和漏桶容量

高o(1)是是

高令牌桶演算法

令牌產生速度和令牌桶容量

高o(1)是是

限流和限流演算法

目錄 一 什麼是限流 二 為什麼需要限流 三 那些場景需要用到限流 3.1 對外服務 3.2 對內服務 四 限流演算法 4.1 計數器演算法 4.2 漏桶演算法 4.3 令牌桶演算法 限流其實是指當系統資源不夠,不足以應對大量請求,即系統資源與訪問量出現矛盾的時候,我們為了保證有限的資源能夠正常服務...

演算法學習 Union Find演算法

union find演算法有它的實際用途。多用於動態連通的應用場景。union find演算法是 給出兩個節點,判斷它們是否連通,如果連通,是不需要給出具體的路徑的 舉兩個例子作為主要表現 1 在網路連線中,當發現沒有連線的兩個節點,可以把他們連線起來,一旦節點都連線起來,又能把多餘的線拆除,這時候...

演算法學習 KM演算法

km演算法 用於求二分圖的最佳完美匹配 即權值最大的完美匹配 如果你也是個剛來學習km演算法的人 大概的用途肯定還是知道的吧 還是直接說重點吧 首先 理解km演算法前 必須有以下3個概念 1.可行頂標 對於乙個賦值二分圖g x,y,e,w x,y 代表二分圖的兩邊頂點標號 e代表邊 w代表邊的權值 ...