流量控制
什么是流量控制?
網路傳輸中的流量控制就是讓發送方發送資料的速度不要太快,這樣可以讓接收方來得及接收資料,通常使用滑動視窗的方式來實作,
滑動視窗是指在任意時刻,發送方都維持一個連續的允許發送的資料大小,稱為發送視窗,接收方也會維持一個連續的允許接收的資料大小,稱為接收視窗,每次發送方給接收方發送資料后,必須收到接收方回傳的確認訊息,發送視窗才可以向后移動,發送新的資料,
分布式系統中的流量控制是指控制每個服務器接收的請求數,以保證服務器來得及處理這些請求,盡可能保證用戶請求持續地被處理,而不是讓大量的用戶請求“阻塞”在服務器中,等待被執行,
分布式系統流量控制策略
一般有兩種流量控制策略:
- 漏桶策略
- 令牌桶策略
漏桶策略
漏桶策略是指無論用戶請求有多少,無論請求速率有多大,“漏桶”都會接收下來,但是從漏桶出來的請求是固定速率的,保證服務器可以處理的游刃有余,當“漏桶”因為容量限制放不下更多請求時,就會選擇丟棄部分請求,是一種“寬進嚴出”的策略,
漏桶策略的好處是做到了流量整形,即無論流量多大,即使是突發的大流量,輸出依舊是一個穩定的流量,缺點是對于突發流量的情況,因為服務器處理速度與正常流量的處理速度一致,會丟棄比較多的請求,
漏桶策略適用于間隔性突發流量且流量不用即時處理的場景,這樣可以在流量較小的“空閑期”,處理大流量時流入漏桶的流量,它不適用于流量需要即時處理的場景,
令牌桶策略
令牌桶策略是指有一個容器來盛放令牌,請求只有拿到令牌后,才會被分發到服務器進行處理,
令牌桶的優點是當有突發大流量時,只要令牌桶中有足夠多的令牌,請求就會被迅速執行,令牌桶容量的設定,可以接近服務器處理的極限,這樣就可以有效利用服務器的資源,
令牌桶策略適用于有突發特性的流量,且流量需要即時處理的場景,
漏桶策略和令牌桶策略的詳細比較如下,

Sentinel流量控制原理
Sentinel的核心是監控應用的并發執行緒數或者QPS,當達到設定的閾值時,Sentinel才去一定的策略對流量進行控制,避免應用被瞬時高流量擊垮,保證應用高可靠,
在Sentinel中,有兩種流量控制方式:
- 通過并發執行緒數進行流量控制
- 通過QPS進行流量控制
在分布式系統中,每個請求都會由一個執行緒去處理,當請求太多系統處理不過來時,執行緒池可能已經被耗盡,因此當請求過多時,執行請求的并發執行緒數自然會隨之增加,當超過一定閾值,需要采取策略進行流量控制,
在Sentinel中,采用了直接拒絕的方式,即新來的請求會被直接拒絕,
針對QPS,Sentinel提供了三種不同的流量控制策略:
- 直接拒絕,這與并發執行緒數流量控制采取的方式一直,
- 預熱,看上去像一種特殊的令牌桶:放令牌的速率保持一個較低的水平,當流量突增時,放令牌的速率不會一下子提高到最高水平,而是慢慢增加,直到增加到最大速率,適用于具有突發特性的流量,且流量可以即時處理的場景,
- 勻速排隊,本質是漏桶策略,嚴格控制系統每秒處理的請求數,當請求數很多時,請求之間的間隔也保持一致,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545389.html
標籤:其他
