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

2021-08-14 21:16:37 字數 1134 閱讀 3230

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

在分布式架構中,應用和應用之間的呼叫型別分為以下兩種,流控方式也略有不同。

同步rpc類呼叫,比如restful,dubbo,hsf等都屬於該類。對於該類同步呼叫,通常限流方式為兩種:針對服務提供者的併發全域性流控,或針對服務消費者的併發區域性流控。兩種的控制手段類似,都是通過限**務端或客服端併發呼叫數來進行限制。

非同步mq類呼叫,典型如rocketmq, kafka,等。對於該類非同步呼叫,通常限流方式是在訂閱端限流。限流方式為兩種:針對訊息訂閱者的併發流控,或針對訊息訂閱者的消費延時流控。

針對訊息訂閱者的消費延時流控基本原理是,在每次客戶端消費時,可以增加乙個延時來控制消費速度,這樣理論消費併發最快速度為:

maxrate = 1 / consuminterval * concurrentthreadnumber

比如如果訊息併發消費執行緒為20,延時為100ms,則理論上可以將併發消費控制在200以下。具體公式如下:我有幾張阿里雲幸運券分享給你,用券購買或者公升級阿里雲相應產品會有特惠驚喜哦!把想要買的產品的幸運券都領走吧!快下手,馬上就要搶光了。

200 = 1 / 0.1 * 20

相比併發執行緒數流控,消費延時流控優點在於實現相對簡單,對mq類客戶端包依賴較少,不需要客戶端提供控制併發執行緒數的動態調整介面。

以上各種流量控制方法,在分布式架構下,如果要做到全域性動態控制,乙個簡單的技術方法是依賴配置中心,即通過配置中心來進行流控引數的下發。

下面章節詳細介紹如何基於配置中心來實現非同步訊息消費的全域性動態流控。使用的例子為阿里雲上的 mq (訊息佇列)和 acm (應用配置管理)兩款產品。

注:之所以用mq為示例是因為在本文撰寫之時,正好mq consumer client sdk並不支援動態調整現成併發數,因此通過基於acm來動態調整消費延遲的方法正好可以解決mq消費流控動態的問題。

基本原理如下。其中,管理員或應用程式通過acm控制台發布消費延時配置(rcv_interval_time),所有mq消費程式訂閱該配置。理論上,該配置從發布到下發所有客戶端,可以在1秒內完成(取決於網路延時)。

Linux 解鎖檔案操作新姿勢

作為乙個程式後台開發人員,往往會檢視程式執行的日誌來分析當前程式執行的情況及異常問題排查。那必不可少的是如何高效的操作日誌檔案 本人之前常用的命令一般為tail cat vi 或vim 要獲取錯誤日誌從何開始時可能要遍歷整個日誌檔案,使用cat缺省會快速翻到最後一行,若使用vi則把檔案都載入到記憶體...

解鎖自定義分享功能新姿勢

第三方工具包往往會收集一些使用者資料,還有一些網路請求 第三方也會制定自己的規則,有時候功能不能滿足產品的特殊需求 直接使用官方分享 的話,過於鬆散,使用不方便,不易維護 既然第三方的工具類使用方便,官方 鬆散。其實第三方的工具包也是封裝的官方分享的 那我們不妨自己也封裝乙個符合自己專案,乙個更加輕...

oracle 如何用pl sql解鎖

oracle中檢視表是否被鎖 檢視表是否被鎖 select rule a.sid,b.owner,object name,object type from v lock a,all objects b where type tm and a.id1 b.object id 這樣可以把它殺掉 sele...