Sentinel原理之規則管理

文章目錄

  • 1. 基礎知識
  • 2. 數據源使用
    • 2.1 RedisDatasource
    • 2.2 ZookeeperDatasource

1. 基礎知識

流量控制規則(FlowRule)

  • 閾值類型grade
    • 0(并發線程數):限制同時處理請求的線程
    • 1(QPS):限制每秒請求數
  • 閾值count:單機閾值,如QPS=100,并發線程數=10
  • 流控模式strategy
    • 0(直接模式):達到閾值即限流,默認
    • 1(關聯模式):關聯資源超閾值時限流本資源,如支付接口超限,限制下單接口
    • 2(鏈路模式):僅統計指定入口的流量
  • 流控效果controlBehavior
    • 0(快速失敗):超閾值直接拒絕,默認
    • 1(預熱啟動):在規定的時間內從下限逐步提升到上限(如3s從3QPS升至10QPS),冷啟動因子默認為3,即閾值是100QPS,初始QPS為30
    • 2(勻速排隊):請求按固定間隔通過(漏桶算法),需要設置超時時間
    • 3(預熱勻速排隊):預熱階段多出的請求勻速排隊,進入正常階段繼續使用勻速排隊處理請求
  • 規則管理類:以resource資源名稱為key,流量控制規則為value管理在FlowRuleManager
  • 實際流量控制邏輯:加載規則時會根據controlBehavior屬性創建對應的流量控制器,指標從節點中獲取,在流量控制器中進行規則判斷
    • 默認流控DefaultController:處理線程流控及QPS快速失敗流控
    • 預熱啟動WarmUpController:處理QPS的預熱啟動流控
    • 勻速排隊RateLimiterController:處理QPS的勻速排隊流控
    • 預熱勻速排WarmUpRateLimiterController:處理QPS的預熱勻速排隊流控

熔斷降級規則(DegradeRule)

  • 熔斷策略grade
    • 0(慢調用比例):在統計窗口內調用時間大于判定時間,且在窗口內比例大于慢調用閾值則熔斷
    • 1(異常比例):在統計窗口內拋異常的數量占比大于總請求數則熔斷
    • 2(異常數):在統計窗口內拋異常的數大于閾值則熔斷
  • 熔斷閾值count:分別對應慢調用時間閾值、異常比例閾值、異常數量閾值
  • 熔斷時間timeWindow:熔斷持續時間(秒),超時后進入半開狀態試探
  • 最小請求數minRequestAmount:在統計窗口內觸發熔斷的最小請求數
  • 統計窗口statIntervalMs:統計窗口時間,單位毫秒
  • 慢調用比例閾值slowRatioThreshold:僅慢調用模式生效,0.0~1.0
  • 規則管理類:以resource資源名稱為key,熔斷降級規則為value管理在DegradeRuleManager
  • 實際熔斷降級邏輯:加載規則時會根據grade屬性創建對應的斷路器(CircuitBreaker),在斷路器中記錄指標和判斷規則
    • 響應時間斷路器ResponseTimeCircuitBreaker:grade=0,記錄超時請求數和總請求數進行判斷
    • 異常斷路器ExceptionCircuitBreaker:grade=1或2,記錄失敗次數和總請次數進行判斷

Sentinel規則可以從Nacos、Apollo、Zookeeper、Consul、Redis或讀取文件獲取,基本涵蓋了國內常的幾個持久化數據框架

sentinel的數據源配置時可自定義key名稱,value為對應的數據源配置,如下:

spring:cloud:sentinel:customDb1:zk:server-addr: localhost:xxxxpath: xxxxxxxx/xxxxrule-type: flowfixDb2:redis:host: localhostport: 6379password: xxxxxxrule-type: degrade

配置單個數據源只能獲取一種類型的規則,如要獲取flow和degrade規則,則數據源需要配置兩次,分別指定ruleType類型獲取

數據源常用的ruleType有:

  • flow:流量控制,對應FlowRule
  • degrade:熔斷限流,對應DegradeRule
  • param-flow:熱點參數流量控制,對應ParamFlowRule
  • system:系統指標控制,對應SystemRule

當從數據源拉取數據后,需要將數據源的數據格式轉化為對應的規則格式,官方默認的格式要求是json,額外支持xml格式,由數據源的dataType屬性控制

若需要自定義數據格式,并轉換為對應的規則類型,有兩種方式:

  1. 僅指定dataType
    • 前置條件:如轉換properties文件
      • dataType=properties
      • 實現sentinel的Converter接口
      • 實現類需要注冊beanName到spring容器中
    • 名稱規則:beanName=sentinel-{dataType}-{ruleType}-converter
    • 名稱示例sentinel-properties-flow-converter代表支持使用dataType=properties的Converter實現類
    • 官方支持的dataType
      • json:sentinel-json-flow-converter、sentinel-json-degrade-converter等
      • xml:sentinel-xml-flow-converter、sentinel-xml-degrade-converter等
  2. 自定義dataType
    • 前置條件
      • dataType=custom
      • 配置converterClass
      • 實現sentinel的Converter接口
      • 實現類需要注冊beanName到spring容器中
    • 名稱規則:beanName=sentinel-{converterClass}
    • 實現效果:從指定數據源拉取到數據后使用converterClass對應實現類轉換數據為規則列表

2. 數據源使用

Nacos、Apollo和Consul要求程序必須使用這三個分布式數據框架,適用性較低。Redis和Zookeeper大部分中間件都會依賴,因此這兩種方式更具有普遍實用價值

2.1 RedisDatasource

使用redis需要配置下面幾個關鍵屬性:

  • host:地址
  • port:端口
  • password:連接密碼
  • ruleKey:初始化時拉取規則的key
  • channel:使用Pub/Sub機制訂閱的channel,要求發布者往該channel發布消息

配置完redis數據源后會注冊RedisDataSourceFactoryBean到spring容器中,在工廠bean中初始化RedisDataSource

初始化數據源時使用ruleKey從redis拉取對應的鍵值,再使用對應的converter轉化數據格式給對應的規則管理類加載使用

后續規則更新時,不僅要求規則更新系統修改ruleKey對應的鍵值,還需要系統使用redis的Pub/Sub機制往channel發送最新規則值,這樣依賴系統才會使用最新規則數據

Pub/Sub機制擁有諸多缺陷,因此在Sentinel沒有把通知機制修改為Stream前,不太推薦使用RedisDatasource來作為中間件存儲規則

2.2 ZookeeperDatasource

使用zookeeper只需要配置兩個關鍵屬性:

  • serverAddr:完整的連接地址端口
  • path:對應的獲取/監聽數據節點路徑

配置path相當于直接指定了完整的zk節點,除了這種外還有另一種配置方式:使用groupId和dataId代替path。其等效于path=/{groupId}/{dataId},若配置了groupId和dataId,則優先使用該方式

配置完zk數據源后會注冊ZookeeperDataSourceFactoryBean到spring容器中,在工廠中初始化ZookeeperDataSource

初始化數據源時會使用Curator連接zk,使用NodeCache監聽對應路徑的數據節點,當數據節點發生變化時則觸發更新

連接zk成功后將會使用NodeCache獲取監聽節點數據

當獲得數據節點數據后,會使用converter轉換為對應規則,最后再把規則給對應規則管理器加載使用

若項目沒有使用Nacos、Apollo,相對Redis,更推薦使用zk來作為中間件發布規則數據

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93480.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93480.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93480.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

系統時鐘配置

STM32F103C8T6的系統時鐘配置成72MHZ1. 什么是 STM32 系統時鐘系統時鐘(System Clock)是整個 MCU(微控制器)運行的“節拍信號”,所有 CPU 指令執行、外設操作、定時器計時、總線數據傳輸等,都依賴這個時鐘頻…

Al大模型-本地私有化部署大模型-大模型微調

魔塔社區 魔塔社區平臺介紹 https://www.modelscope.cn/models/Qwen/Qwen2.5-0.5B-Instruct 申請免費的試用機器 如果自己沒有機器 ,從這里申請機器 。 下載大模型 pip install modelscope 下載到當前目錄 mkdir -p /root/autodl-tmp/demo/Qwen/Qwen2.5-0.5B-Ins…

國內著名AI搜索優化專家孟慶濤發表《AI搜索內容可信度評估綜合指南》

近日,國內著名AI搜索優化專家、中國GEO生成式引擎優化領域的開拓者與實踐專家孟慶濤正式發布《AI搜索內容可信度評估綜合指南》,針對當前AI生成內容(AIGC)在搜索場景中可信度參差不齊的痛點,首次提出覆蓋"技術-內…

ruoyi-flowable系統防xss攻擊配置(使用富文本的方式)

背景。開發小程序過程中。用戶使用富文本的方式比較多。但在傳輸后發現如上傳到系統中的圖片鏈接地址被清空了。問題:想要使用富文本。還需要開啟xss過濾。有什么好的解決方案嗎?解決方案(我比較傾向的):通過對富文本內…

【opencv-Python學習筆記(2): 圖像表示;圖像通道分割;圖像通道合并;圖像屬性】

目標:1.學會圖像的通道分割與合并2.學會圖像的的常規操作##一些概念:二值圖像:只包含黑色和白色兩種顏色的圖像,1為白色,0為黑色灰度圖像:計算機會將灰度處理為256個灰度級,用區間[0,255]來表示…

Qt——常用Widget(控件)

常用控件 Widget 需要說明,此處說明的控件都繼承于QWiget,因此之前所說的控件屬性,和相關API,在這里的控件都適用 文章目錄常用控件 Widget按鈕類控件QPushButtonQRadioButtonQCheckBox顯示類控件QLabel初識事件LCD NumberProgre…

Cursor/VSCode/VS2017 搭建Cocos2d-x環境,并進行正常的調試和運行(簡單明了)

作者:求一個demo 版權聲明:著作權歸作者所有,商業轉載請聯系作者獲得授權,非商業轉載請注明出處 內容通俗易懂,沒有廢話 廢話不多說,我們直接開始------>>>>>> !&#xff…

從 LLM 到自主 Agent:OpenCSG 打造開源 AgenticOps 生態

從 LLM 到自主 Agent:OpenCSG 打造開源 AgenticOps 生態在產業拐點上,交付可持續、可落地的智能體未來在生成式 AI 的時代洪流中,大語言模型(LLM)已成為行業標配,但如何突破“會說不會做”的局限&#xff0…

黑馬程序員mysql課程中在Linux系統中安裝mysql出現問題

問題描述在安裝linux的最后一步的指令的時候報錯警告:mysql-community-server-8.0.26-1.el7.x86_64.rpm: 頭V3 DSA/SHA256 Signature, 密鑰 ID 5072e1f5: NOKEY 錯誤:依賴檢測失敗:net-tools 被 mysql-community-server-8.0.26-1.el7.x86_64 …

「iOS」————APP啟動優化

iOS學習APP的啟動流程啟動流程缺頁錯誤主要階段pre-main階段main階段啟動優化pre-mainmain階段啟動優化總結流程總結APP的啟動流程 啟動 首先我們來了解啟動的概念: 廣義上的啟動是點擊圖標到首頁數據加載完畢狹義上的啟動是點擊圖標到啟動圖完全消失的第一幀 啟…

知名車企門戶漏洞或致攻擊者遠程解鎖汽車并竊取數據

漏洞概況一家大型汽車制造商的在線系統存在安全漏洞,可能導致客戶數據泄露,并允許攻擊者遠程訪問車輛。該漏洞由安全研究員Eaton Zveare發現,他已于2025年2月向涉事車企報告并促使漏洞修復。Zveare雖未公開車企名稱,但透露這是在美…

Elasticsearch JS 自定義 ConnectionPool / Connection / Serializer、敏感信息脫敏與 v8 平滑遷移

0. 什么時候該用“高階配置”? 復雜網絡/路由需求:自定義“健康節點”判定、權重路由、多租戶隔離。替換 HTTP 棧:接入企業內網網關、打通自研代理/審計、細化超時/連接細節。序列化治理:為超大 JSON、Bulk、查詢串做定制編碼/壓縮…

希爾排序專欄

在排序算法的大家庭中,希爾排序(Shell Sort)以其獨特的 "分組插入" 思想占據著重要地位。它是對插入排序的創造性改進,通過引入 "增量分組" 策略,大幅提升了排序效率。本文將帶你深入理解希爾排序…

Android 歐盟網絡安全EN18031 要求對應的基本表格填寫

Android 歐盟網絡安全EN18031 要求對應的基本表格填寫 文章目錄Android 歐盟網絡安全EN18031 要求對應的基本表格填寫一、背景二、18031認證預填表格三、其他1、Android EN 18031 要求對應的基本表格小結2、EN 18031的要求表格內容填寫3、一定要做三方認證?4、歐盟網…

《Attention-driven GUI Grounding》論文精讀筆記

論文鏈接:[2412.10840] Attention-driven GUI Grounding: Leveraging Pretrained Multimodal Large Language Models without Fine-Tuning 摘要 近年來,多模態大型語言模型(Multimodal Large Language Models,MLLMs)的…

PIDGenRc函數中lpstrRpc的由來和InitializePidVariables函數的關系

第一部分:./base/ntsetup/syssetup/setupp.h:404:#define MAX_PID30_RPC 5BOOL InitializePidVariables() {//// Get the Pid from HKEY_LOCAL_MACHINE\SYSTEM\Setup\Pid//Error RegOpenKeyEx( HKEY_LOCAL_MACHINE,((MiniSetup || OobeSetup) ? szFinalPidKeyNa…

Nginx學習筆記(七)——Nginx負載均衡

?? Nginx學習筆記(七)——Nginx負載均衡 📌 一、負載均衡核心概念 架構定位: #mermaid-svg-00aCvwmJ40DHNd66 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-00aC…

MQ積壓如何處理

處理消息隊列(MQ)積壓是一個需要系統化分析的運維挑戰。下面我將結合常見原因,分步驟說明處理方案,并區分應急措施和根本解決方案:?一、快速診斷積壓原因(核心!)???監控告警分析…

Unity與OpenGL中的材質系統詳解

引言 在現代3D圖形開發中,材質是定義物體外觀的核心元素。Unity引擎提供了強大且直觀的材質系統,使得開發者能夠輕松實現復雜的視覺效果。然而,對于熟悉OpenGL的開發者來說,理解Unity材質系統的工作原理以及如何在OpenGL中實現類…

k8s安裝DragonflyDB取代redis

數據庫類型線程模型吞吐量 (QPS)延遲 (μs)內存效率適用場景兼容性Memcached純內存鍵值存儲多線程100K - 500K10 - 100高緩存、會話存儲無原生密碼認證DragonflyDB多協議內存數據庫多線程1M50 - 200中高高吞吐緩存、Redis 替代兼容 RedisKeyDBRedis 多線程分支多線程500K - 1M5…