《分佈式技術原理與算法解析》學習筆記Day26

流量控制

什麼是流量控制?

網絡傳輸中的流量控制就是讓發送方發送數據的速度不要太快,這樣可以讓接收方來得及接收數據,通常使用滑動窗口的方式來實現。

滑動窗口是指在任意時刻,發送方都維持一個連續的允許發送的數據大小,稱爲發送窗口,接收方也會維持一個連續的允許接收的數據大小,稱爲接收窗口,每次發送方給接收方發送數據後,必須收到接收方返回的確認消息,發送窗口才可以向後移動,發送新的數據。

分佈式系統中的流量控制是指控制每個服務器接收的請求數,以保證服務器來得及處理這些請求,儘可能保證用戶請求持續地被處理,而不是讓大量的用戶請求“阻塞”在服務器中,等待被執行。

分佈式系統流量控制策略

一般有兩種流量控制策略:

  1. 漏桶策略
  2. 令牌桶策略

漏桶策略

漏桶策略是指無論用戶請求有多少,無論請求速率有多大,“漏桶”都會接收下來,但是從漏桶出來的請求是固定速率的,保證服務器可以處理的遊刃有餘。當“漏桶”因爲容量限制放不下更多請求時,就會選擇丟棄部分請求,是一種“寬進嚴出”的策略。

漏桶策略的好處是做到了流量整形,即無論流量多大,即使是突發的大流量,輸出依舊是一個穩定的流量。缺點是對於突發流量的情況,因爲服務器處理速度與正常流量的處理速度一致,會丟棄比較多的請求。

漏桶策略適用於間隔性突發流量且流量不用即時處理的場景,這樣可以在流量較小的“空閒期”,處理大流量時流入漏桶的流量。它不適用於流量需要即時處理的場景。

令牌桶策略

令牌桶策略是指有一個容器來盛放令牌,請求只有拿到令牌後,纔會被分發到服務器進行處理。

令牌桶的優點是當有突發大流量時,只要令牌桶中有足夠多的令牌,請求就會被迅速執行。令牌桶容量的設置,可以接近服務器處理的極限,這樣就可以有效利用服務器的資源。

令牌桶策略適用於有突發特性的流量,且流量需要即時處理的場景。

漏桶策略和令牌桶策略的詳細比較如下。

Sentinel流量控制原理

Sentinel的核心是監控應用的併發線程數或者QPS,當達到設置的閾值時,Sentinel纔去一定的策略對流量進行控制,避免應用被瞬時高流量擊垮,保證應用高可靠。

在Sentinel中,有兩種流量控制方式:

  1. 通過併發線程數進行流量控制
  2. 通過QPS進行流量控制

在分佈式系統中,每個請求都會由一個線程去處理,當請求太多系統處理不過來時,線程池可能已經被耗盡,因此當請求過多時,執行請求的併發線程數自然會隨之增加,當超過一定閾值,需要採取策略進行流量控制。

在Sentinel中,採用了直接拒絕的方式,即新來的請求會被直接拒絕。

針對QPS,Sentinel提供了三種不同的流量控制策略:

  1. 直接拒絕,這與併發線程數流量控制採取的方式一直。
  2. 預熱,看上去像一種特殊的令牌桶:放令牌的速率保持一個較低的水平,當流量突增時,放令牌的速率不會一下子提高到最高水平,而是慢慢增加,直到增加到最大速率,適用於具有突發特性的流量,且流量可以即時處理的場景。
  3. 勻速排隊,本質是漏桶策略,嚴格控制系統每秒處理的請求數,當請求數很多時,請求之間的間隔也保持一致。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章