文章目录

  • 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…