精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Sentinel 流控規則詳解

開發 架構
Sentinel 提供一個輕量級的開源控制臺,它提供機器發現以及健康情況管理、監控(單機和集群),規則管理和推送的功能。這里,我們將會詳細講述如何通過簡單的步驟就可以使用這些功能。

[[399712]]

本文轉載自微信公眾號「運維開發故事」,作者老鄭。轉載本文請聯系運維開發故事公眾號。

在前面兩篇文章給大家介紹了 Sentinel 的功能和基本使用。現在我們繼續來學習 Sentinel 控制臺的基本使用,以及一些規則配置的說明。讓大家能夠在工作中使用 Sentinel 得心應手 (大部分理論和描述來源于官方文檔和網絡)。

在正文開始之前,我先說一下我的基本環境信息

  • jdk 1.8
  • sentinel 1.8.0
  • spring-boot 2.3.5.RELEASE
  • spring-cloud Hoxton.SR8
  • spring-cloud-alibaba 2.2.5.RELEASE

控制臺簡介

Sentinel 提供一個輕量級的開源控制臺,它提供機器發現以及健康情況管理、監控(單機和集群),規則管理和推送的功能。這里,我們將會詳細講述如何通過簡單的步驟就可以使用這些功能。

Sentinel 控制臺包含如下功能:

  • 查看機器列表以及健康情況:收集 Sentinel 客戶端發送的心跳包,用于判斷機器是否在線。
  • 監控 (單機和集群聚合):通過 Sentinel 客戶端暴露的監控 API,定期拉取并且聚合應用監控信息,最終可以實現秒級的實時監控。
  • 規則管理和推送:統一管理推送規則。
  • 鑒權:生產環境中鑒權非常重要。這里每個開發者需要根據自己的實際情況進行定制。

注意:Sentinel 控制臺目前僅支持單機部署。Sentinel 控制臺項目提供 Sentinel 功能全集示例,不作為開箱即用的生產環境控制臺,若希望在生產環境使用需要自行定制和改造。

Alibaba 提供了企業版本的 Sentinel 我們可以在 aliyun.com 上面購買 AHAS Sentinel

查看機器列表以及健康情況

如果我們正確的接入 Sentinel 之后我們可以在 Sentinel 控制臺的 機器列表 菜單中來查看我們服務節點的健康情況

如果 Sentinel 接入不成功,可以查閱 Sentinel 官方文檔或者 FAQ 來對應排查

服務監控

1. 實時監控

同時,同一個服務下的所有機器的簇點信息會被匯總,并且秒級地展示在"實時監控"下。

注意: 實時監控僅存儲 5 分鐘以內的數據,如果需要持久化,需要通過調用實時監控接口來定制。

注意:請確保 Sentinel 控制臺所在的機器時間與自己應用的機器時間保持一致,否則會導致拉不到實時的監控數據。

2. 簇點鏈路

簇點鏈路(單機調用鏈路)頁面實時的去拉取指定客戶端資源的運行情況。它一共提供兩種展示模式:一種用樹狀結構展示資源的調用鏈路,另外一種則不區分調用鏈路展示資源的實時情況。

注意: 簇點鏈路監控是內存態的信息,它僅展示啟動后調用過的資源。

注意:請確保 Sentinel 控制臺所在的機器時間與自己應用的機器時間保持一致,否則會導致拉不到實時的監控數據。

3 流控規則

流量控制(flow control),其原理是監控應用流量的 QPS 或并發線程數等指標,當達到指定的閾值時對流量進行控制,以避免被瞬時的流量高峰沖垮,從而保障應用的高可用性。

FlowSlot 會根據預設的規則,結合 NodeSelectorSlot、ClusterBuilderSlot、StatisticSlot 統計出來的實時信息進行流量控制。

限流的直接表現是在執行 Entry nodeA = SphU.entry(resourceName) 的時候拋出 FlowException 異常。FlowException 是 BlockException 的子類,您可以捕捉 BlockException 來自定義被限流之后的處理邏輯。

Sentinel 在觸發規則保護時,返回的異常頁面是一樣的。不好區分是因為哪種規則導致的異常。所以需要自定義異常返回信息,明確是觸發了哪種類型的規則。

  1. @Component 
  2. public class SentinelBlockHandler implements BlockExceptionHandler { 
  3.     @Override 
  4.     public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, 
  5.                        BlockException e) throws Exception { 
  6.         CommonResult<Void> result = new CommonResult<>(); 
  7.         if (e instanceof FlowException) { 
  8.             result = CommonResult.error(101, "接口限流了"); 
  9.         } else if (e instanceof DegradeException) { 
  10.             result = CommonResult.error(102, "服務降級了"); 
  11.         } else if (e instanceof ParamFlowException) { 
  12.             result = CommonResult.error(103, "熱點參數限流了"); 
  13.         } else if (e instanceof SystemBlockException) { 
  14.             result = CommonResult.error(104, "系統規則(負載/...不滿足要求)"); 
  15.         } else if (e instanceof AuthorityException) { 
  16.             result = CommonResult.error(105, "授權規則不通過"); 
  17.         } 
  18.         // http狀態碼 
  19.         httpServletResponse.setStatus(500); 
  20.         httpServletResponse.setCharacterEncoding("utf-8"); 
  21.         httpServletResponse.setHeader("Content-Type""application/json;charset=utf-8"); 
  22.         httpServletResponse.setContentType("application/json;charset=utf-8"); 
  23.         // spring mvc自帶的json操作工具,叫jackson 
  24.         new ObjectMapper().writeValue(httpServletResponse.getWriter(), result); 
  25.     } 

效果如下:

  1. ➜ curl http://127.0.0.1:8088/getStockDetail 
  2. {"code":1,"message":"this is a success message","data":{"id":1,"code":"STOCK==>1000"}}%                                                       ➜ curl http://127.0.0.1:8088/getStockDetail 
  3. {"code":1,"message":"this is a success message","data":{"id":1,"code":"STOCK==>1000"}}%                                                        ➜ curl http://127.0.0.1:8088/getStockDetail 
  4. {"code":101,"message":"接口限流了","data":null}% 

閾值類型

線程數

并發數控制用于保護業務線程池不被慢調用耗盡。例如,當應用所依賴的下游應用由于某種原因導致服務不穩定、響應延遲增加,對于調用者來說,意味著吞吐量下降和更多的線程數占用,極端情況下甚至導致線程池耗盡。為應對太多線程占用的情況,業內有使用隔離的方案,比如通過不同業務邏輯使用不同線程池來隔離業務自身之間的資源爭搶(線程池隔離)。這種隔離方案雖然隔離性比較好,但是代價就是線程數目太多,線程上下文切換的 overhead 比較大,特別是對低延時的調用有比較大的影響。Sentinel 并發控制不負責創建和管理線程池,而是簡單統計當前請求上下文的線程數目(正在執行的調用數目),如果超出閾值,新的請求會被立即拒絕,效果類似于信號量隔離。并發數控制通常在調用端進行配置。

可以通過線程池模擬客戶端調用, 也可以通過 Jmeter 模擬,觸發流控的結果如下:

  1. ➜  ~ curl http://127.0.0.1:8088/getStockDetail 
  2. {"code":101,"message":"接口限流了","data":null}% 

流控模式

調用關系包括調用方、被調用方;一個方法又可能會調用其它方法,形成一個調用鏈路的層次關系。

直接

當資源觸發流控規則過后直接,拋出異常信息

  1. ➜  ~ curl http://127.0.0.1:8088/getStockDetail 
  2. {"code":101,"message":"接口限流了","data":null}% 

關聯

當兩個資源之間具有資源爭搶或者依賴關系的時候,這兩個資源便具有了關聯。比如對數據庫同一個字段的讀操作和寫操作存在爭搶,讀的速度過高會影響寫的速度,寫的速度過高會影響讀的速度。如果放任讀寫操作爭搶資源,則爭搶本身帶來的開銷會降低整體的吞吐量。可使用關聯限流來避免具有關聯關系的資源之間過度的爭搶,舉例來說,read_db 和 write_db 這兩個資源分別代表數據庫讀寫,我們可以給 read_db 設置限流規則來達到寫優先的目的:設置 strategy 為 RuleConstant.STRATEGY_RELATE 同時設置 refResource 為 write_db。這樣當寫庫操作過于頻繁時,讀數據的請求會被限流。

如果配置流控規則為關聯模式,那么當 /hello 接口超過閾值過后,就會對 /getStockDetail 接口觸發流控規則。

鏈路

NodeSelectorSlot 中記錄了資源之間的調用鏈路,這些資源通過調用關系,相互之間構成一棵調用樹。這棵樹的根節點是一個名字為 machine-root 的虛擬節點,調用鏈的入口都是這個虛節點的子節點。

一棵典型的調用樹如下圖所示:

  1. machine-root 
  2.                    /       \ 
  3.                   /         \ 
  4.             Entrance1     Entrance2 
  5.                /             \ 
  6.               /               \ 
  7.      DefaultNode(nodeA)   DefaultNode(nodeA) 

上圖中來自入口 Entrance1 和 Entrance2 的請求都調用到了資源 NodeA,Sentinel 允許只根據某個入口的統計信息對資源限流。比如我們可以設置 strategy 為 RuleConstant.STRATEGY_CHAIN,同時設置 refResource 為 Entrance1 來表示只有從入口 Entrance1 的調用才會記錄到 NodeA 的限流統計當中,而不關心經 Entrance2 到來的調用。

調用鏈的入口(上下文)是通過 API 方法 ContextUtil.enter(contextName) 定義的,其中 contextName 即對應調用鏈路入口名稱。詳情可以參考 ContextUtil 文檔。]

測試會發現 鏈路 不會生效

從1.6.3版本開始,Sentinel Web filter默認收斂所有URL的入口context,因此鏈路限流不生效。1.7.0版本開始(對應SCA 2.1.1.RELEASE),我們在CommonFilter引入了WEB_CONTEXT_UNIFY這個init parameter,用于控制是否收斂context。將其配置為false即可根據不同的URL進行鏈路限流。參考:https://github.com/alibaba/sentinel/issues/1213

解決方案:

1.7.0 版本開始(對應Spring Cloud Alibaba的2.1.1.RELEASE) 需要新增依賴

  1. @Configuration 
  2. public class FilterContextConfig { 
  3.     @Bean 
  4.     public FilterRegistrationBean sentinelFilterRegistration() { 
  5.         FilterRegistrationBean registration = new FilterRegistrationBean(); 
  6.         registration.setFilter(new CommonFilter()); 
  7.         registration.addUrlPatterns("/*"); 
  8.          
  9.         // 入口資源關閉聚合 
  10.         registration.addInitParameter(CommonFilter.WEB_CONTEXT_UNIFY, "false"); 
  11.         registration.setName("sentinelFilter"); 
  12.         registration.setOrder(1); 
  13.         return registration; 
  14.     } 

然后我們再嘗試觸發流控規則, 對 /getStockDetail 進行訪問,這里返回了FlowException

默認情況會返回

如果我們使用 OpenFeign 不添加 fallbackFactory 就會返回500 , 如果我們添加了就可以避免這個問題。

  1. // Controller 
  2. @Autowired 
  3. private StockFeign stockFeign; 
  4. @GetMapping("/getStockDetail"
  5. public CommonResult<StockModel> getStockDetail() { 
  6.   CommonResult<StockModel> result = stockFeign.getStockDetail(); 
  7.   if (result.getCode() != 1) { 
  8.     return CommonResult.error(null, result.getCode(), result.getMessage()); 
  9.   } 
  10.   return result; 
  11. // FeignClient 
  12. @FeignClient(name = "stock-service"
  13.         //, fallbackFactory = StockFeignFallbackFactory.class) 
  14. public interface StockFeign { 
  15.     @GetMapping("/getStockDetail"
  16.     CommonResult<StockModel> getStockDetail(); 

Sentinel 部分源碼:

所以,我們在設置鏈路流控規則的時候一定要設置 fallbackFactory。不然無法處理 FlowExecption 異常信息,造成系統出錯。對于個人而言,Sentinel 的鏈路規則比不是特別的好用,無特殊要求,不建議使用,或者選擇Sentinel 的收費版本 AHAS

流控效果

當 QPS、線程數超過某個閾值的時候,則采取措施進行流量控制。流量控制的效果包括以下幾種:直接拒絕、Warm Up、勻速排隊。

直接拒絕

直接拒絕(RuleConstant.CONTROL_BEHAVIOR_DEFAULT)方式是默認的流量控制方式,當QPS超過任意規則的閾值后,新的請求就會被立即拒絕,拒絕方式為拋出FlowException。 這種方式適用于對系統處理能力確切已知的情況下,比如通過壓測確定了系統的準確水位時。

Warm up

Warm Up(RuleConstant.CONTROL_BEHAVIOR_WARM_UP)方式,即預熱/冷啟動方式。當系統長期處于低水位的情況下,當流量突然增加時,直接把系統拉升到高水位可能瞬間把系統壓垮。通過"冷啟動",讓通過的流量緩慢增加,在一定時間內逐漸增加到閾值上限,給冷系統一個預熱的時間,避免冷系統被壓垮。

通常冷啟動的過程系統允許通過的 QPS 曲線如下圖所示:

默認 coldFactor 為 3,即請求 QPS 從 threshold / 3 開始,經預熱時長逐漸升至設定的 QPS 閾值。

規則設置如下圖所示:

通過 Jmeter 請求過后,可以看到如下效果,完成流控

勻速排隊

勻速排隊(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)方式會嚴格控制請求通過的間隔時間,也即是讓請求以均勻的速度通過,對應的是漏桶算法。

這種方式主要用于處理間隔性突發的流量,例如消息隊列。想象一下這樣的場景,在某一秒有大量的請求到來,而接下來的幾秒則處于空閑狀態,我們希望系統能夠在接下來的空閑期間逐漸處理這些請求,而不是在第一秒直接拒絕多余的請求。

注意:勻速排隊模式暫時不支持 QPS > 1000 的場景。

規則設置如下圖所示:

然后我們通過 jmeter 請求過后可以看到如下效果:

4. 降級規則

流量控制以外,對調用鏈路中不穩定的資源進行熔斷降級也是保障高可用的重要措施之一。一個服務常常會調用別的模塊,可能是另外的一個遠程服務、數據庫,或者第三方 API 等。例如,支付的時候,可能需要遠程調用銀聯提供的 API;查詢某個商品的價格,可能需要進行數據庫查詢。然而,這個被依賴服務的穩定性是不能保證的。如果依賴的服務出現了不穩定的情況,請求的響應時間變長,那么調用服務的方法的響應時間也會變長,線程會產生堆積,最終可能耗盡業務自身的線程池,服務本身也變得不可用。

熔斷降級策略

Sentinel 提供以下幾種熔斷策略:

  • 慢調用比例 (SLOW_REQUEST_RATIO):選擇以慢調用比例作為閾值,需要設置允許的慢調用 RT(即最大的響應時間),請求的響應時間大于該值則統計為慢調用。當單位統計時長(statIntervalMs)內請求數目大于設置的最小請求數目,并且慢調用的比例大于閾值,則接下來的熔斷時長內請求會自動被熔斷。經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求響應時間小于設置的慢調用 RT 則結束熔斷,若大于設置的慢調用 RT 則會再次被熔斷。

我們可以在控制臺配置:

jmeter 模擬請求

異常比例 (ERROR_RATIO):當單位統計時長(statIntervalMs)內請求數目大于設置的最小請求數目,并且異常的比例大于閾值,則接下來的熔斷時長內請求會自動被熔斷。經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求成功完成(沒有錯誤)則結束熔斷,否則會再次被熔斷。異常比率的閾值范圍是 [0.0, 1.0],代表 0% - 100%。

我們可以在控制臺配置:

  • 異常數 (ERROR_COUNT):當單位統計時長內的異常數目超過閾值之后會自動進行熔斷。經過熔斷時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求成功完成(沒有錯誤)則結束熔斷,否則會再次被熔斷。

我們可以在控制臺配置:

熔斷降級說明

熔斷降級規則(DegradeRule)包含下面幾個重要的屬性:

 

Field

說明

默認值

resource

資源名,即規則的作用對象

 

grade

熔斷策略,支持慢調用比例/異常比例/異常數策略

慢調用比例

count

慢調用比例模式下為慢調用臨界 RT(超出該值計為慢調用);異常比例/異常數模式下為對應的閾值

 

timeWindow

熔斷時長,單位為 s

 

minRequestAmount

熔斷觸發的最小請求數,請求數小于該值時即使異常比率超出閾值也不會熔斷(1.7.0 引入)

5

statIntervalMs

統計時長(單位為 ms),如 60*1000 代表分鐘級(1.8.0 引入)

1000 ms

slowRatioThreshold

慢調用比例閾值,僅慢調用比例模式有效(1.8.0 引入)

5. 熱點規則

何為熱點?熱點即經常訪問的數據。很多時候我們希望統計某個熱點數據中訪問頻次最高的 Top K 數據,并對其訪問進行限制。比如:

  • 商品 ID 為參數,統計一段時間內最常購買的商品 ID 并進行限制
  • 用戶 ID 為參數,針對一段時間內頻繁訪問的用戶 ID 進行限制

熱點參數限流會統計傳入參數中的熱點參數,并根據配置的限流閾值與模式,對包含熱點參數的資源調用進行限流。熱點參數限流可以看做是一種特殊的流量控制,僅對包含熱點參數的資源調用生效。

Sentinel 利用 LRU 策略統計最近最常訪問的熱點參數,結合令牌桶算法來進行參數級別的流控。熱點參數限流支持集群模式。

熱點規則配置需要注意:

1. 首先資源必須是通過 @SentinelResource 申明

2. 參數類型必須是基礎數據類型, 否則配置無效

熱點規則配置如下圖所示:

注意:資源名稱要和 @SentinelResource 中的資源名稱對應才能生效

控制器類的代碼如下所示:

  1. @SentinelResource(value = "ResOrderGet"
  2.                   fallback = "fallback"
  3.                   fallbackClass = SentinelExceptionHandler.class, 
  4.                   blockHandler = "blockHandler"
  5.                   blockHandlerClass = SentinelExceptionHandler.class 
  6.                  ) 
  7. @GetMapping("/order/get/{id}"
  8. public CommonResult<StockModel> getStockDetails(@PathVariable Integer id) { 
  9.   StockModel stockModel = new StockModel(); 
  10.   stockModel.setCode("STOCK==>1000"); 
  11.   stockModel.setId(id); 
  12.   return CommonResult.success(stockModel); 
  13. // 異常處理類 
  14. public class SentinelResourceExceptionHandler { 
  15.     //限流熔斷業務邏輯 
  16.     public static CommonResult<StockModel> blockHandler(@PathVariable Integer id) { 
  17.         return CommonResult.error(null, -100, "系統錯誤 (限流熔斷業務邏輯)"); 
  18.     } 
  19.     //異常降級業務邏輯 
  20.     public static CommonResult<StockModel> fallback(@PathVariable Integer id) { 
  21.         return CommonResult.error(null, -100, "系統錯誤 (異常降級業務邏輯)"); 
  22.     } 

返回異常信息:

6 授權規則

很多時候,我們需要根據調用來源來判斷該次請求是否允許放行,這時候可以使用 Sentinel 的來源訪問控制(黑白名單控制)的功能。來源訪問控制根據資源的請求來源(origin)限制資源是否通過,若配置白名單則只有請求來源位于白名單內時才可通過;若配置黑名單則請求來源位于黑名單時不通過,其余的請求通過。

調用方信息通過 ContextUtil.enter(resourceName, origin) 方法中的 origin 參數傳入。

Sentinel提供了 RequestOriginParser 接口來處理訪問來源,Sentinel保護的資源如果被訪問,就會調用 RequestOriginParser解析訪問來源。

  1. // 注意導包 
  2. import com.alibaba.csp.sentinel.adapter.servlet.callback.RequestOriginParser; 
  3. import javax.servlet.http.HttpServletRequest; 
  4. public class SentinelRequestOriginParser implements RequestOriginParser { 
  5.     @Override 
  6.     public String parseOrigin(HttpServletRequest request) { 
  7.         return request.getParameter("origin"); 
  8.     } 

修改 Config 配置信息

  1. @Configuration 
  2. public class FilterContextConfig { 
  3.     @Bean 
  4.     public FilterRegistrationBean sentinelFilterRegistration() { 
  5.         FilterRegistrationBean registration = new FilterRegistrationBean(); 
  6.         registration.setFilter(new CommonFilter()); 
  7.         registration.addUrlPatterns("/*"); 
  8.         // 入口資源關閉聚合 
  9.         registration.addInitParameter(CommonFilter.WEB_CONTEXT_UNIFY, "false"); 
  10.         registration.setName("sentinelFilter"); 
  11.         registration.setOrder(1); 
  12.         // CommonFilter 的 BlockException 自定義處理邏輯 
  13.         WebCallbackManager.setUrlBlockHandler(new SentinelFlowHandler()); 
  14.         //解決授權規則不生效的問題 
  15.         //com.alibaba.csp.sentinel.adapter.servlet.callback.RequestOriginParser 
  16.         WebCallbackManager.setRequestOriginParser(new SentinelRequestOriginParser()); 
  17.         return registration; 
  18.     } 

規則配置

執行請求

正常通過

異常不通過

7 系統規則

系統保護規則是從應用級別的入口流量進行控制,從單臺機器的 load、CPU 使用率、平均 RT、入口 QPS 和并發線程數等幾個維度監控應用指標,讓系統盡可能跑在最大吞吐量的同時保證系統整體的穩定性。

系統保護規則是應用整體維度的,而不是資源維度的,并且僅對入口流量生效。入口流量指的是進入應用的流量(EntryType.IN),比如 Web 服務或 Dubbo 服務端接收的請求,都屬于入口流量。

系統規則支持以下的模式:

  • Load 自適應(僅對 Linux/Unix-like 機器生效):系統的 load1 作為啟發指標,進行自適應系統保護。當系統 load1 超過設定的啟發值,且系統當前的并發線程數超過估算的系統容量時才會觸發系統保護(BBR 階段)。系統容量由系統的 maxQps * minRt 估算得出。設定參考值一般是 CPU cores * 2.5。
  • CPU usage(1.5.0+ 版本):當系統 CPU 使用率超過閾值即觸發系統保護(取值范圍 0.0-1.0),比較靈敏。
  • 平均 RT:當單臺機器上所有入口流量的平均 RT 達到閾值即觸發系統保護,單位是毫秒。
  • 并發線程數:當單臺機器上所有入口流量的并發線程數達到閾值即觸發系統保護。
  • 入口 QPS:當單臺機器上所有入口流量的 QPS 達到閾值即觸發系統保護。

原理

如下圖所示

我們把系統處理請求的過程想象為一個水管,到來的請求是往這個水管灌水,當系統處理順暢的時候,請求不需要排隊,直接從水管中穿過,這個請求的RT是最短的;反之,當請求堆積的時候,那么處理請求的時間則會變為:排隊時間 + 最短處理時間。

  • 推論一: 如果我們能夠保證水管里的水量,能夠讓水順暢的流動,則不會增加排隊的請求;也就是說,這個時候的系統負載不會進一步惡化。

我們用 T 來表示(水管內部的水量),用RT來表示請求的處理時間,用P來表示進來的請求數,那么一個請求從進入水管道到從水管出來,這個水管會存在 P * RT 個請求。換一句話來說,當 T ≈ QPS * Avg(RT) 的時候,我們可以認為系統的處理能力和允許進入的請求個數達到了平衡,系統的負載不會進一步惡化。

接下來的問題是,水管的水位是可以達到了一個平衡點,但是這個平衡點只能保證水管的水位不再繼續增高,但是還面臨一個問題,就是在達到平衡點之前,這個水管里已經堆積了多少水。如果之前水管的水已經在一個量級了,那么這個時候系統允許通過的水量可能只能緩慢通過,RT會大,之前堆積在水管里的水會滯留;反之,如果之前的水管水位偏低,那么又會浪費了系統的處理能力。

  • 推論二: 當保持入口的流量是水管出來的流量的最大的值的時候,可以最大利用水管的處理能力。

然而,和 TCP BBR 的不一樣的地方在于,還需要用一個系統負載的值(load1)來激發這套機制啟動。

注:這種系統自適應算法對于低 load 的請求,它的效果是一個“兜底”的角色。對于不是應用本身造成的 load 高的情況(如其它進程導致的不穩定的情況),效果不明顯。

配置頁面

觸發流控規則

8 集群流控

為什么要使用集群流控呢?假設我們希望給某個用戶限制調用某個 API 的總 QPS 為 50,但機器數可能很多(比如有 100 臺)。這時候我們很自然地就想到,找一個 server 來專門來統計總的調用量,其它的實例都與這臺 server 通信來判斷是否可以調用。這就是最基礎的集群流控的方式。

另外集群流控還可以解決流量不均勻導致總體限流效果不佳的問題。假設集群中有 10 臺機器,我們給每臺機器設置單機限流閾值為 10 QPS,理想情況下整個集群的限流閾值就為 100 QPS。不過實際情況下流量到每臺機器可能會不均勻,會導致總量沒有到的情況下某些機器就開始限流。因此僅靠單機維度去限制的話會無法精確地限制總體流量。而集群流控可以精確地控制整個集群的調用總量,結合單機限流兜底,可以更好地發揮流量控制的效果。

集群流控中共有兩種身份:

  • Token Client:集群流控客戶端,用于向所屬 Token Server 通信請求 token。集群限流服務端會返回給客戶端結果,決定是否限流。
  • Token Server:即集群流控服務端,處理來自 Token Client 的請求,根據配置的集群規則判斷是否應該發放 token(是否允許通過)。

規則推送

Sentinel 控制臺同時提供簡單的規則管理以及推送的功能。規則推送分為 3 種模式,包括 "原始模式"、"Pull 模式" 和"Push 模式"。

這里先簡單的介紹"原始模式"。

規則管理

您可以在控制臺通過接入端暴露的 HTTP API 來查詢規則。

規則推送

目前控制臺的規則推送也是通過 規則查詢更改 HTTP API 來更改規則。這也意味著這些規則僅在內存態生效,應用重啟之后,該規則會丟失。

注:若通過控制臺推送規則時出現 invalid type 或 empty type 的錯誤,請確保 transport 模塊版本與 core 模塊版本保持一致;若控制臺版本 >= 1.7.1,請將接入端的相關依賴也升級至 1.7.1 及以上版本。

以上是原始模式。當了解了原始模式之后,我們非常鼓勵您通過 動態規則 并結合各種外部存儲來定制自己的規則源。我們推薦通過動態配置源的控制臺來進行規則寫入和推送,而不是通過 Sentinel 客戶端直接寫入到動態配置源中。在生產環境中,我們推薦 push 模式,具體可以參考:在生產環境使用 Sentinel。

注:若要使用集群流控功能,則必須對接動態規則源,否則無法正常使用。您也可以接入 AHAS Sentinel 快速接入全自動托管、高可用的集群流控能力。

Sentinel 同時還提供應用維度規則推送的示例頁面(流控規則頁面,前端路由為 /v2/flow),用戶改造控制臺對接配置中心后可直接通過 v2 頁面推送規則至配置中心。Sentinel 抽取了通用接口用于向遠程配置中心推送規則以及拉取規則:

DynamicRuleProvider: 拉取規則(應用維度)

DynamicRulePublisher: 推送規則(應用維度)

用戶只需實現 DynamicRuleProvider 和 DynamicRulePublisher 接口,并在 v2 的 controller 中通過 @Qualifier 注解替換相應的 bean 即可實現應用維度推送。我們提供了 Nacos 和 Apollo 的示例,改造詳情可參考 應用維度規則推送示例。

鑒權

從 Sentinel 1.5.0 開始,控制臺提供通用的鑒權接口 AuthService,用戶可根據需求自行實現。

從 Sentinel 1.6.0 起,Sentinel 控制臺引入基本的登錄功能,默認用戶名和密碼都是 sentinel。該鑒權能力非常基礎,生產環境使用建議根據安全需要自行改造。

用戶可以通過如下參數進行配置:

  • -Dsentinel.dashboard.auth.username=sentinel 用于指定控制臺的登錄用戶名為 sentinel;
  • -Dsentinel.dashboard.auth.password=123456 用于指定控制臺的登錄密碼為 123456;如果省略這兩個參數,默認用戶和密碼均為 sentinel;
  • -Dserver.servlet.session.timeout=7200 用于指定 Spring Boot 服務端 session 的過期時間,如 7200 表示 7200 秒;60m 表示 60 分鐘,默認為 30 分鐘;

同樣也可以直接在 Spring properties 文件中進行配置。

注意:部署多臺控制臺時,session 默認不會在各實例之間共享,這一塊需要自行改造。

參考文檔

 

https://github.com/alibaba/Sentinel/wiki/控制臺

 

責任編輯:武曉燕 來源: 運維開發故事
相關推薦

2022-05-25 08:42:32

sentinel流控規則

2021-05-24 08:09:21

SentinelRedis 流控原理

2021-05-14 07:45:07

Sentinel 接口限流

2021-05-25 08:01:55

SentinelRedis 流控算法

2025-02-03 00:55:00

Sentinel分布式系統

2021-05-20 08:01:15

Nacos 存儲Sentinel

2012-05-08 13:18:42

流控引擎流控

2021-05-21 08:30:26

Sentinel GateWay 微服務

2022-05-29 21:38:11

限流熔斷流量

2024-04-28 18:24:05

2011-03-23 10:13:09

高校流控設備網康科技

2010-11-11 14:05:17

SQL Server排

2023-06-15 09:45:14

智能技術

2022-04-22 08:48:51

AQE流控架構

2013-04-25 14:44:28

飛魚星無線路由器Wi-Fi

2021-03-23 15:50:53

微服務架構互聯網

2009-12-04 16:20:49

2013-01-28 14:56:07

飛魚星無線路由器WLAN

2025-07-14 00:00:00

點贊
收藏

51CTO技術棧公眾號

亚洲免费观看在线观看| 久久激五月天综合精品| 日韩精品视频在线| 999在线免费视频| 日本中文字幕视频在线| 国产成人福利片| 日本一区二区在线播放| 日韩三级在线观看视频| 台湾色综合娱乐中文网| 在线播放亚洲一区| 黄色网页免费在线观看| 免费黄网站在线播放| 不卡av电影在线播放| 国产免费久久av| 欧美三日本三级少妇99| 亚洲成人免费| 亚洲图片制服诱惑| 无码人妻一区二区三区免费n鬼沢| 美女一区网站| 亚洲国产精品一区二区久久恐怖片| 神马影院一区二区| 免费观看黄色av| 久久精品久久精品| 欧美一级高清免费| 欧美片一区二区| 日韩激情图片| 亚洲欧洲日韩国产| 亚洲中文字幕无码一区| а天堂中文最新一区二区三区| 丰满岳妇乱一区二区三区| 超碰10000| 日本在线视频观看| 国产午夜亚洲精品羞羞网站| 精品一区久久久| 丁香六月天婷婷| 国产高清精品网站| 91精品免费视频| 中文字幕一区二区人妻| 视频一区视频二区中文字幕| 午夜精品久久久久久久99热| 精品肉丝脚一区二区三区| 91精品啪在线观看国产18| 中文字幕欧美日韩| 少妇一级黄色片| 欧美日韩在线播放视频| 亚洲片在线资源| 久久精品国产亚洲av麻豆| 黄色成人美女网站| 亚洲成人在线视频播放| 国产在线不卡av| 国产一区在线电影| 亚洲国产99精品国自产| 丰满岳乱妇一区二区| 国产精品视屏| 日韩精品一二三四区| 精品夜夜澡人妻无码av | 国产一区喷水| 视频三区在线观看| 91美女片黄在线观看| 久久99欧美| 精品资源在线看| 欧美国产精品劲爆| 中文精品一区二区三区| 麻豆传媒视频在线观看免费| 亚洲少妇中出一区| 日本精品福利视频| www.youjizz.com在线| 亚洲aaa精品| 亚洲熟妇av一区二区三区| 日韩av大片站长工具| 欧美视频在线一区二区三区 | 成人午夜精品一区二区三区| 国产免费一区| 黄网在线免费| 综合久久一区二区三区| 17c丨国产丨精品视频| av中文字幕在线观看第一页| 欧美性生交xxxxxdddd| 午夜激情在线观看视频| 精品久久国产一区| 亚洲成人黄色在线| 国产亚洲精品熟女国产成人| 国产精品久久久久无码av| 久久6精品影院| 日本特级黄色片| 久久se精品一区二区| 成人在线免费网站| 国产专区在线播放| 亚洲精品国久久99热| 午夜肉伦伦影院| 亚洲午夜国产成人| 亚洲精品美女免费| 国产精品69久久久久孕妇欧美| 欧美精品观看| 国产成人精品在线| 空姐吹箫视频大全| 国产精品五月天| 成人午夜视频在线观看免费| 日本肉肉一区| 亚洲第一免费网站| 国产麻豆a毛片| 国产精品资源| 成人欧美一区二区三区在线湿哒哒 | 高清国产在线一区| 国家队第一季免费高清在线观看| 亚洲精品免费播放| 国产天堂在线播放| 菁菁伊人国产精品| 久久久国产精品一区| 男人日女人网站| 国产成都精品91一区二区三| 日韩欧美第二区在线观看| 免费污视频在线观看| 欧美视频第二页| 屁屁影院国产第一页| 亚洲视频电影在线| 国产精品jvid在线观看蜜臀| 日本免费一区视频| 一区二区三区在线视频观看 | 国产成人精品亚洲777人妖| 欧美日韩一区二区三区在线观看免| 中文在线免费| 欧美精品丝袜久久久中文字幕| 大地资源二中文在线影视观看| 综合激情婷婷| 成人妇女淫片aaaa视频| 国产精品一区在线看| 午夜不卡在线视频| 久久av一区二区三| 亚洲一区二区| 成人免费淫片视频软件| 免费在线观看黄色| 欧美老人xxxx18| 长河落日免费高清观看| 日韩精品一级二级 | jizz日韩| 日本高清成人免费播放| 精品少妇一区二区三区免费观| 99日韩精品| 国产在线欧美日韩| www.超碰在线| 亚洲精品大尺度| 日本系列第一页| 成人福利在线看| 人妻激情另类乱人伦人妻| 久久伊人影院| 久精品免费视频| 欧美视频在线观看一区二区三区| 亚洲一区二区三区四区五区黄 | 欧美高跟鞋交xxxxxhd| 国产三区在线播放| 一区二区三区欧美| 不许穿内裤随时挨c调教h苏绵| 亚洲综合色网| 99理论电影网| 密臀av在线播放| 亚洲人成亚洲人成在线观看| 无码人妻黑人中文字幕| 中文字幕乱码一区二区免费| 国产精品嫩草影院8vv8| 欧美另类视频| 久久精品成人一区二区三区蜜臀 | 色婷婷av久久久久久久| 国产一区二区三区精品在线| 美女在线一区二区| 国产高清免费在线| 这里视频有精品| 97在线日本国产| 精品欧美不卡一区二区在线观看| 在线亚洲人成电影网站色www| 国产精品久久免费观看| 国产毛片精品国产一区二区三区| 国产在线xxxx| 色老板在线视频一区二区| 国产精品久久久久久av福利软件| 老司机在线看片网av| 精品成人免费观看| 在线永久看片免费的视频| 日韩一区中文字幕| av黄色一级片| 蜜臀va亚洲va欧美va天堂| 粉嫩av一区二区三区天美传媒| 国内精品国产成人国产三级粉色| 国产成人精品综合| 欧美日韩色网| 伊人青青综合网站| 亚洲欧美激情在线观看| 在线视频你懂得一区| 免费一级黄色大片| 久久久www免费人成精品| 日本特黄在线观看| 久久亚洲风情| 久久99中文字幕| 日韩一区欧美| 精品一区二区三区国产| 精品视频一区二区三区| 国产成人91久久精品| 丁香花电影在线观看完整版| 一区二区三区回区在观看免费视频| 99精品视频免费看| 色狠狠综合天天综合综合| 精品欧美一区二区久久久久| 久久久久久一级片| 精品人妻一区二区免费| 美女精品自拍一二三四| 精品国产一区三区| 正在播放日韩欧美一页| 天堂精品一区二区三区| 欧美人成在线观看ccc36| 亚洲aa在线观看| 粉嫩一区二区三区| 68精品国产免费久久久久久婷婷| 高潮毛片在线观看| 伊人亚洲福利一区二区三区| 天堂在线视频免费观看| 日韩视频一区二区在线观看| 中文字幕在线一| 色婷婷av一区二区三区gif| 日韩成人免费观看| 亚洲宅男天堂在线观看无病毒| 国产福利在线导航| 国产丝袜美腿一区二区三区| 网站免费在线观看| 成人午夜激情影院| 国产a级片视频| 国产福利一区二区三区视频 | 少妇一级淫片日本| 欧美视频第一页| 久久精品性爱视频| 一区二区不卡在线播放| 国精品无码一区二区三区| 欧美国产日韩亚洲一区| 免费看污片网站| 久久影院视频免费| 亚洲欧美色图视频| 99久久精品国产精品久久| 亚洲一二三四五| 国产99久久精品| 在线观看一区二区三区四区| 国产毛片精品国产一区二区三区| 在线a免费观看| 国产精品综合久久| 一个人看的视频www| 国产精品亚洲午夜一区二区三区| 久久久九九九热| 国产精品自在在线| 性高潮免费视频| 成人午夜视频网站| 亚洲中文字幕一区| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 久久高清无码视频| 亚洲成人一区二区在线观看| 久久午夜免费视频| 日韩欧中文字幕| 中文字幕福利视频| 欧美久久久影院| 国产极品999| 亚洲大胆人体在线| 手机福利小视频在线播放| 亚洲一二三在线| 视频一区二区三区不卡| 欧美xxxx14xxxxx性爽| 羞羞视频在线免费国产| 性欧美在线看片a免费观看| 成人午夜视屏| 国产在线观看精品| 99久久免费精品国产72精品九九| 精品国产福利| 超碰成人久久| 日韩精品手机在线观看| 99综合精品| 国产精品久久久毛片| 国产精品亚洲视频| 日本黄色网址大全| 亚洲欧美怡红院| 欧美成人aaaaⅴ片在线看| 色婷婷精品大在线视频| 国产麻豆免费视频| 日韩av在线免费| 暖暖日本在线观看| 午夜精品久久久久久久久久久久久| 成人欧美magnet| 91亚洲精品久久久| 亚洲第一福利专区| 男同互操gay射视频在线看| 9国产精品视频| 日本超碰在线观看| www.在线成人| 日韩亚洲欧美中文字幕| 精品成人av一区| 亚洲天天综合网| 日韩成人在线播放| 国产在线二区| 热久久免费视频精品| 日韩最新av| 视频三区二区一区| 亚洲人体大胆视频| 日本中文字幕影院| 久久综合成人精品亚洲另类欧美| 亚洲一级生活片| 色老汉av一区二区三区| 亚洲国产精品久久人人爱潘金莲 | 日韩精品在线免费| 午夜成年人在线免费视频| 国产精品极品在线| 久久大胆人体视频| 青青在线免费视频| 美女视频黄免费的久久 | 亚洲三级小视频| 无码任你躁久久久久久久| 日韩精品一区二区三区swag | aaa一级黄色片| 久久久久久久久岛国免费| 久草视频精品在线| 欧美一级夜夜爽| 日本在线观看www| 国产成人97精品免费看片| 亚洲妇女av| 欧美 日韩 国产在线观看| 国产91丝袜在线观看| 男人与禽猛交狂配| 欧美日韩黄色一区二区| 久久久资源网| 日韩免费av一区二区| 欧美成人午夜77777| 日韩精品一区在线视频| 国产成人自拍网| 国产精品 欧美激情| 欧美人狂配大交3d怪物一区| 超碰免费在线| 国产精品福利在线观看| 九九久久成人| 北条麻妃av高潮尖叫在线观看| 91在线观看污| 在线观看免费国产视频| 亚洲精品久久久久久久久久久| 91黄色在线| 亚洲在线www| 你懂的亚洲视频| 午夜免费福利网站| 一区二区三区视频在线看| 精品国产一级片| 欧美肥婆姓交大片| 给我免费播放日韩视频| 国产日本在线播放| 99国产精品一区| 国产成人愉拍精品久久| 精品亚洲一区二区三区在线播放 | 色就是色欧美| 免费成人美女在线观看.| 美女av免费看| 日韩一区二区在线观看视频播放| 日本在线视频网址| 国产尤物91| 日韩二区在线观看| 国产3级在线观看| 91精品国产福利在线观看| 秋霞在线视频| 蜜桃狠狠色伊人亚洲综合网站| 久久福利毛片| 亚洲不卡的av| 欧美大胆一级视频| 末成年女av片一区二区下载| 青青草国产精品| 久久超碰97人人做人人爱| 不卡的免费av| 亚洲视频网站在线观看| 伊人亚洲精品| 人妻少妇精品久久| 欧美国产精品一区二区| 国产福利第一页| 欧美最猛性xxxx| 天天影视综合| 岛国精品资源网站| 欧美丝袜丝交足nylons图片| 主播国产精品| 秋霞久久久久久一区二区| 狠狠色狠狠色合久久伊人| 日本天堂网在线观看| 一区二区三区视频免费| 亚洲1区在线| 国内外免费激情视频| 亚洲美女淫视频| 手机福利在线| 亚洲自拍偷拍网址| 老鸭窝91久久精品色噜噜导演| 国产乱子轮xxx农村| 亚洲国产精品视频在线观看| 99久久婷婷国产综合精品首页 | 亚洲欧美在线网| 丁香婷婷综合激情五月色| 在线观看视频中文字幕| 久久久久久久久久久av| 区一区二视频| 精品人妻一区二区免费视频| 欧美精品自拍偷拍| www.成人影院| 日本免费成人网| 国产精品免费久久| 可以在线观看的黄色|