全域性流控介紹和實現思路

2021-10-10 07:08:22 字數 2072 閱讀 8228

控制集群範圍內介面每秒鐘的有效請求數,例如有乙個500臺應用的系統集群,現**資料庫集群能夠支援的最大的qps是10000【通過壓測來判斷資料庫達到瓶頸時能夠支援的訪問量】,介面需要訪問資料庫那麼可以判斷出系統的壓力主要在資料庫上,而不在應用上,因此需要對請求進行流量控制防止資料庫壓力過大,這個時候就可以通過全域性流控來保護資料庫。

1、粒度控制到介面

2、閾值位介面總閾值

3、支援雙機房分開控制

4、依賴redis服務

1.保護整體服務請求

2.適用於流量較小的服務

3.需要精確進行tps流控

4.適用於交易線:交易鏈路像加車、提交訂單、支付等操作,而非瀏覽線像首頁、四級頁、搜尋查詢之類的。

1、機器無壓力,主要壓力在庫,可設定全域性流控。

2、適用於對整體tps有要求的流控限制,如某個接單介面只能接入5000tps,如果tps大了會造成下游系統問題,此時就不適用於分布式流控,可採用全域性流控。

1、判斷當前時間秒介面流控狀態,如果已經被流控直接返回,如果未流控做流控判斷和配額扣減處理

2、從本地配額快取中獲取介面當前秒key的配額concurrenthashmap3、如果當前秒key對應的配額物件不存在:從redis獲取當前時間秒對應介面的配額,redis key為inte***ce_code_secondkey, value 為 全域性的配額。

從redis獲取配額的操作為原子操作,如下所示

string sha1 =

loadscript

(timekey,

"local key=keys[1];"

+"local valve=keys[2];"

+"local step=keys[3];"

+"local expire=keys[4];"

+"local remnant;"

+"local exists=redis.call(\"exists\",key);"

+"if(exists==1) then remnant=redis.call(\"decrby\",key,step);"

+"else remnant=redis.call(\"decrby\",key,(step-valve));"

+"redis.call(\"expire\",key,expire);end return remnant;"

);

指令碼中變數介紹 value: 全域性流控的閾值; step: 每次拉取時給應用分配的配額【本次申請的配額】; expire:過期時間; remnant:全域性配額剩餘數量;

​ 先判斷key是否存在,key不存在新建key並扣除本次拉取的配額, key存在則直接扣除本次拉取的配額,返回總的配額餘額。

​ (1)如果總的配額餘額》=0說明配額充足, 說明本次應用申請的配額可以滿足,更新本地配額為申請的配額;

​ (2)如果總的配額餘額 < 0 並且 |總的配額餘額絕對值| < 本次申請的配額, 說明本次申請的配額不夠但是可以滿足部分,更新本地配額為 總的配額餘額 + 本次申請的配額

​ (3)如果總的配額餘額<0 並且 |總的配額餘額絕對值| >= 本次申請的配額, 說明本次申請的配額完全不能夠滿足,不更新本次配額,更新流控狀態為配額不足被流控。

4、如果當前秒key對應的配額物件存在:先判斷流控狀態,如果狀態為被流控直接返回流控。如果狀態為未被流控,先看本地配額是否夠扣,夠扣的話獲取本地配額鎖然後扣減本地配額,扣完後釋放本地配額鎖;如果本地配額不夠扣,從redis拉取配額,拉取的方法跟步驟3中的原子方法一致。

5、異常處理:如果從redis拉取配額的時候發生異常,則更新本地的流控狀態為流控失效,不做後續流控處理,並記錄失效時間點,流控判斷狀態是如果發現狀態為流控失效並且當前時間與流控失效時間間隔沒有超過30s直接繼續執行,否則繼續從redis拉取配額並做流控處理。

全域性流控的思路其實可以拓展到實際業務應用中,例如支援百萬或者千萬級tps的秒殺搶購之類的,秒殺 或者搶購的物件數量就相當於流控介面的閾值。

後續會繼續寫篇文章介紹下分布式流控和實現思路,分布式流控的實現其實比起全域性流控來說更加簡單。

流控技術之DPI介紹

dpi技術,即dpi deep packet inspection 深度包檢測技術是一種基於應用層的流量檢測和控制技術,當ip資料報 tcp或udp資料流通過基於dpi技術的頻寬管理系統時,該系統通過深入讀取ip包載荷的內容來對osi七層協議中的應用層資訊進行重組,從而得到整個應用程式的內容,然後按...

深信服AC流控 操作介紹

深信服 ac上網行為管理裝置 一 認識裝置 前面板主要是網口,console口 usb介面 後面板主要是電源介面,開關按鈕 裝置軟體版本 數字從低到高,表示裝置型號從低端到高階,其中普通ac最高端為ac10000 裝置型號 ac sg 二 如何登入裝置 首次登陸ac sg裝置時 以下兩個埠預設ip為...

解鎖新姿勢 如何用配置中心實現全域性動態流控?

當資源成為瓶頸時,服務框架需要對消費者做限流,啟動流控保護機制。流量控制有多種策略,比較常用的有 針對訪問速率的靜態流控 針對資源占用的動態流控 針對消費者併發連線數的連線控制和針對並行訪問數的併發控制。在實踐中,各種流量控制策略需要綜合使用才能起到較好的效果。在分布式架構中,應用和應用之間的呼叫型...