一般併發系統有對應處理請求的最大能力,這裏稱最大qps,也需要有閾值設置,如果超過最大qps,則可能導致系統不穩定,產生雪崩效應,甚至連鎖反應。
限流可以認爲服務降級的一種,限流就是限制系統的輸入和輸出流量已達到保護系統的目的。一般來說系統的吞吐量是可以被測算的,爲了保證系統的穩定運行,一旦達到的需要限制的閾值,就需要限制流量並採取一些措施以完成限制流量的目的。比如:部分拒絕處理。
令牌桶算法
令牌桶算法的原理是系統會以一個恆定的速度往桶裏放入令牌,而如果請求需要被處理,則需要先從桶裏獲取一個令牌,當桶裏沒有令牌可取時,則拒絕服務。 當桶滿時,新添加的令牌被丟棄。
令牌桶是一個存放固定容量令牌(token)的桶,按照固定速率往桶裏添加令牌。令牌桶算法基本可以用下面的幾個概念來描述:
- 令牌將按照固定的速率被放入令牌桶中。比如每秒放10個。
- 桶中最多存放b個令牌,當桶滿時,新添加的令牌被丟棄。
- 當1個請求到達,如果桶中還有令牌,將從桶中刪除1個令牌,接着請求會被處理。
- 如果桶中的令牌不足1個,則不會給該請求分發令牌,該請求會被直接返回,日誌記錄該請求超閾值。