【Java高級工程師蛻變之路】069 分佈式服務治理之服務限流

服務限流

什麼是服務限流

限流就是爲了提供穩定的服務,限制使用人數。

限流的目的是通過對併發請求進行限速,或者對一個時間窗口內的請求數量進行限速來保護系統。

一旦達到限制速率可以拒絕服務、排隊或者等待。

image-20220412105549096

多維度進行限流

請求到達服務接口時,可以採用多維度限流策略。

image-20220412110052030

限流算法

  1. 限流算法-計數器(固定窗口)

    計數器限制,每一分鐘或者每一秒鐘內的請求不能超過一定的次數,在下一秒計時器清零重新計算

    image-20220412111040388

    存在的問題

    客戶端在第一分鐘的59秒請求了100次,又在第二分鐘的1秒請求了100次,2秒內,後端要承受200次請求的壓力,形成了流量突刺

  2. 限流算法-計數器(滑動窗口)

    滑動窗口是細分後的計數器。它將每個時間窗口又劃分成若干個時間片段,每過一個時間片段,整個時間窗口就會向右移動一格。

    image-20220412112229172

打滿100次,客戶端就拒絕訪問。

時間窗口劃分的越細,滑動窗口的滾動越平滑,限流效果越精確。

  1. 限流算法-漏桶

    漏桶算法類似一個限制出水速度的水桶,通過一個固定大小的FIFO隊列+定時取隊列元素的方式實現。

    請求進入隊列後,會被勻速取出來處理,類似桶底部的開口勻速出水。當隊列被佔滿後,後來的請求會直接被拒絕,類似水倒得太快溢出來。

    優點是可以削峯填谷,不論請求多大多快,都只會勻速發給後端,不會出現突刺現象,保證下游服務正常運行。

    缺點是桶隊列中的請求會排隊,響應時間拉長。

  2. 限流算法-令牌桶

    令牌桶算法是以恆定的速度往桶裏放置令牌,如果桶裏的令牌滿了就放棄,每進來一個請求去桶裏找令牌,有的話拿走令牌繼續處理,沒有就拒絕請求。

    image-20220412132838290

令牌桶的優點是可以應對突發流量,當桶裏有令牌時可以快速響應也不會產生漏桶隊列中的等待時間。

缺點是相對於漏桶,一定程度上減少了對下游服務的保護。

https://www.cnblogs.com/junzi2099/p/14208640.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章