帶你了解什么是限流 限流是什么意思

電流限制是什么意思(向你展示什么是電流限制)
我之前讀書的時候沒接觸過高并發/大流量這種東西,所以當然沒接觸過限流 ??垂卷椖康臅r候發現用了費率限制器,可以了解一下 。
一、限流基礎知識介紹為什么要限制電流?相信不用我多說 。
比如周末去餐廳吃飯,但是人太多了,只能在前臺取個號,號到我這里才能進餐廳 。酒店沒有限流怎么辦?飯到了,大家都沖進去,酒店處理不了這么多人,很容易出事 。酒店工作人員崩潰處理不了)
回到代碼世界,情況也是如此 。服務器可以處理的請求數量是有限的 。如果請求的數量非常大,我們需要限制電流(要么讓請求等待,要么丟棄它們) 。
在代碼領域,有兩種常見的限流算法:
令牌桶算法
漏桶
1.1什么是漏桶?
舉個例子,現在我有一個水桶,綠色的是我能裝水的容量 。如果我往桶里倒的水比我能裝的多,桶就會溢出來(限流):

目前我們能知道的是:
水桶的容量是固定的(圖中綠色的) 。
如果超過桶的容量,就會溢出(要么等著,要么扔掉) 。
【帶你了解什么是限流 限流是什么意思】好了,現在讓我們在水桶上挖一個洞,這樣水就可以從洞里流出來了:

水桶上的孔的大小是固定的,所以水從孔中流出的速度也是固定的 。
所以綜上所述,算法只需要兩個參數:
腹部容積
漏水率
漏桶有兩種實現方式:
不允許突然流動:如果流入速率大于流出速率,直接丟棄多余的水 。舉個例子,我的水桶容量可以裝100L,但是我的水桶流出速率是10 L/s,此時,如果現在有100L/s的水進來,我就只讓10 L的水進桶,其余的都受到限制 。(請求的速度是有限的)
允許的突發流量情況:我的水桶能裝100L 。如果我的水桶現在是空,那100L的水都可以進我的水桶了 。我會以10L/s的速度把水流出去,如果還有100L的水進來,那就只能限制了 。
經過以上分析,我們知道:
漏桶可以平滑網絡上的突發流量(因為漏水率是固定的) 。
1.2什么是令牌桶算法?
現在我又多了一桶 。這個桶不是用來裝水的,而是用來裝代幣的:

代幣會以一定的速度扔進桶里 。例如,我在一秒鐘內向桶里扔10個代幣:

    推薦閱讀