SpringCloud中 Sentinel 限流的使用

news2024/11/25 4:05:12
  1. 引入依赖

     <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
    
  2. 手动编写限流规则,缺点是不够灵活,如果需要改变限流规则需要修改源码

    	@PostConstruct
        private void initFlowQpsRule() {
            List<FlowRule> rules = new ArrayList<>();
            FlowRule rule = new FlowRule();
            //一定要与 @SentinelResource 里的值一致
            rule.setResource("confirmOrder");
            //定义限流规则,常见的有QPS和线程数
            rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
            //最大QPS为20,如果请求超过了20,也只有20个请求会执行成功,如果没有定义降级的方法其余的请求会抛出 FlowException
            rule.setCount(20);
            rule.setLimitApp("default");
            rules.add(rule);
            FlowRuleManager.loadRules(rules);
    	}
    	//定义一个资源,value值不能少,并指定降级对应的方法
    	@SentinelResource(value = "confirmOrder",blockHandler = "exceptionHandler")
    	public void flowMethod(String abc) {
    	...
    	}
    	// blockHandler函数,原方法调用被限流/降级/系统保护的时候调用,编写的时候要注意降级方法内的参数除了BlockException之外要与资源方法参数一致
        public void exceptionHandler(String abc,BlockException ex) {
           	 //降级逻辑的编写
        }
    
  3. 利用控制台编写限流规则,控制台是额外的Java项目,需要运行起来,优点是不需要修改源码,可以运行时修改限流规则,启动后访问
    localhost:18080即可,需要注意的时,控制台一开始并不会显示限流的资源,需要请求一次限流资源才会显示 ,缺点是限流规则没有持久化,服务重启限流规则就消失了

    spring:
      application:
        name: business
      cloud:
        sentinel:
          transport: #启用sentinel控制台
            port: 8719 #控制台监听的端口,固定的端口
            dashboard: localhost:18080 #控制台项目启动的端口,启动控制台项目可以自己指定
    

    实时监控
    显示的效果
    流控规则,可以定义修改限流规则
    在这里插入图片描述
    簇点链路
    在这里插入图片描述

  4. 使用Nacos实现限流规则持久化

    <!--        实现sentinel限流规则持久化-->
    <dependency>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-datasource-nacos</artifactId>
    </dependency>
    
    spring:
      application:
        name: business
      cloud:
        sentinel:
          datasource:
            flow: # 这个可以随意取
              nacos:
                server-addr: #nacos服务的地址
                namespace: train
                group-id: DEFAULT_GROUP
                data-id: sentinel-flow
                rule-type: flow #限流
            degrade: # 这个可以随意取
              nacos:
                server-addr: #nacos服务的地址
                namespace: train
                group-id: DEFAULT_GROUP
                data-id: sentinel-degrade
                rule-type: degrade #熔断
    

    定义限流规则,里面是一个json数组,所以可以配置多条规则,其实nacos的这个配置相当于没有界面的Sentinel台端,实现的功能是一样的,只不过他定义的规则是持久化的,控制台定义的的规则是推送到我们的项目的,也就是保存在内存当中的,重启就没了,这些参数不知道可以使用控制台的时候 F12去查看对应的名称
    在这里插入图片描述

  5. Sentinel配置详解
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • 资源名:对哪个方法进行限流
    • 针对来源:限流的资源可能被多个服务调用(例如远程调用),用来指定什么服务来调用需要限流,一般都是使用默认
    • 流控效果:
      • 快速失败是指触发限流直接失败返回
      • 排队等待触发限流后等排队等待,可以设置超时时间,假设阀值是10,一下子来了20个请求,但一秒内只能接受10个请求,剩余的请求可以等待下一秒执行,如果等待的时间超过了设置的时间,还是会失败返回的,注意只有选择QPS才会有排队等待功能,适合会有流量突刺的系统,通过排队等待慢慢处理请求
      • Warm Up 进行预热,可以设置预热时长.假设预热时长是两秒,设置的单机阀值是10,那么一开始的阀值就是 10 / 3 = 3,然后会慢慢增加,在两秒后 阀值才会变成10,预热是为了保护系统,如果系统设置了阀值很大,系统刚启动就来了超过阀值的请求,可能会出现很多问题,所以需要预热让系统的阀值慢慢增加,而不是一下子就达到设定的阀值,适合流量一直很大的系统
    • 流控模式
      • 关联:需要配置一个关联资源,只有当关联资源限流了,当前资源开启限流,例如支付资源关联了下单资源,只有当下单资源触发了限流,支付资源才会开启限流,否则无论多大的请求都不会触发限流
      • 链路:需要配置一个入口资源,例如A资源调用了C资源,B资源也调用了C资源,但入口资源是A,所以只有A调用C资源时时才会触发C资源的限流
        spring:
          cloud:
            sentinel:
              web-context-unify: false #流控模式为链路时必须设置为false
        
  6. Sentinel的熔断功能,一般是配合远程调用使用

    熔断规则

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    spring:
      cloud:
        openfeign: #feign.sentinel.enabled改为true后不加会报错
          lazy-attributes-resolution: true
    feign:
      sentinel:
        enabled: true #sentinel默认不监控feign,需要sentinel配置 lazy-attributes-resolution: true不然会报错
    

    注意的是feign接口是不能自己使用注解定义资源的,sentinel开启了监控feign会自动定义feign接口的资源,而且名称是固定的

    • 资源名:需要远程调用服务的接口全路径
    • 熔断策略
      • 慢调用比例:拿上面的参数举例,只有当1000毫秒内请求数超过6时,并且有 30% 的请求响应时间超过201ms,会进行熔断11秒,也就是说在11秒内都不会再远程调用对应的服务了,并且会抛出 DegradeException ,此时可以做相应的降级处理保证服务的可用性
      • 异常比例:拿上面的参数举例,只有当1000毫秒内请求数超过6时,并且有 30% 的请求出现异常,会进行熔断3秒
      • 异常数:拿上面的参数举例,只有当1000毫秒内请求数超过6时,并且出现3次异常,会进行熔断3秒

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/876560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【GitOps系列】如何解决 GitOps 的秘钥存储问题?

文章目录 简介GitOps 密钥管理方案安装 Sealed-Secrets安装 CLI 工具安装 Controller 控制器 示例应用介绍创建 ArgoCD 应用创建加密后的 Secret 对象创建 Image Pull Secret 对象创建 Secret 对象推送到代码仓库验证 Secret 原理解析核心关注点 简介 在实际的业务场景下&…

1.SpringMVC接收请求参数及数据回显:前端url地址栏传递参数通过转发显示在网页

1、SpringMVC 处理前端提交的数据 1.1 提交的域名和处理方法的参数不一致&#xff0c;使用注解解决 1.2 提交的域名和处理方法的参数不一致&#xff0c;使用注解解决 1.3 提交的是一个对象 2、前端url地址栏传递的是一个参数 请求地址url&#xff1a;http://localhost:8080/s…

openGauss学习笔记-39 openGauss 高级数据管理-分区表

文章目录 openGauss学习笔记-39 openGauss 高级数据管理-分区表39.1 范围分区表的分类39.2 创建范围分区39.2.1 创建VALUES LESS THAN范围分区表语法格式39.2.2 创建VALUES LESS THAN范围分区表参数说明39.2.3 创建VALUES LESS THAN范围分区表示例 39.3 询分区表39.3.1 查询分区…

el-table自适应缩放大小

安装依赖 npm install --save vue-draggable-resizable //或 cnpm install --save vue-draggable-resizablemain.js引入依赖 import VueDraggableResizable from vue-draggable-resizable import "vue-draggable-resizable/dist/VueDraggableResizable.css"; Vue.c…

Haproxy+Keepalived高可用部署

环境准备&#xff1a; IPVIPmasterhaproxy192.168.134.170192.168.134.100backuphaproxy192.168.134.172192.168.134.100web1192.168.134.171web2192.168.134.173web3192.168.134.174 1、首先配置啊三台web服务器&#xff0c;并写好测试页面。 web1&#xff08;配置jsp页面&…

Wlan——CAPWAP协议的报文格式与报文封装

目录 CAPWAP报文携带信息 Discovery报文&#xff08;AP先发&#xff09; Join报文&#xff08;AP先发&#xff09; Configuration Status报文&#xff08;AP先发&#xff09; Change State报文&#xff08;AP先发&#xff09; Echo报文&#xff08;AP和AC都可以先发&…

2023 CCF BDCI 数字安全公开赛正式开启报名

2023 CCF BDCI 数字安全公开赛重磅来袭&#xff01; 全新的赛道场景 丰厚的赛事奖励 精彩的周边活动 数字安全守护人的狂欢盛宴 快来报名参加吧 大赛背景 伴随着数智化的持续加深&#xff0c;网络安全、数据安全风险遍布于所有场景之中&#xff0c;包括工业生产、能源、交…

SSH远程连接MacOS catalina并进行终端颜色配置

一、开关SSH服务 在虚拟机上安装了MacOS catalina&#xff0c;想要使用SSH远程进行连接&#xff0c;但是使用“系统偏好设置”/“共享”/“远程登录”开关进行打开&#xff0c;却一直是正在启动“远程登录”&#xff1a; 难道是catalina有BUG&#xff1f;不过还是有方法的&…

2023年许战海咨询《竞争之王CEO年度辅导工程》火热招募中

今天产业迭代速度不断加剧,人类知识更迭周期大大压缩到2年以内,企业遭遇更多挑战:如增长乏力、品牌老化、竞争压力大、竞争方向不明确、产品同质化、利润越来越低、团队执行难等。《竞争之王CEO年度辅导工程》应运而生,旨在手把手辅导企业家及高管团队如何制定战略和落地战略&a…

Wireshark有线网卡抓包报错The capture session could not be initiated on capture device

最近在使用Wireshark进行抓包排错时&#xff0c;选择网卡后提示报错&#xff0c;在此之前从未出现过&#xff0c;报错内容如下&#xff1a; 提示内容是The capture session could not be initiated on capture device&#xff0c;无法在捕获设备上启动捕获会话要求操作是Please…

解密人工智能:线性回归 | 逻辑回归 | SVM

文章目录 1、机器学习算法简介1.1 机器学习算法包含的两个步骤1.2 机器学习算法的分类 2、线性回归算法2.1 线性回归的假设是什么&#xff1f;2.2 如何确定线性回归模型的拟合优度&#xff1f;2.3 如何处理线性回归中的异常值&#xff1f; 3、逻辑回归算法3.1 什么是逻辑函数?…

5.0 Spring Boot核心

1. Spring Boot注解 注解名称 注解说明 SpringBootApplication 用于标注Spring Boot应用为启动类&#xff0c;是一个组合注解&#xff0c;主要组合了SpringBootConfiguration、EnableAutoConfiguration和ComponentScan注解 SpringBootConfiguration 继承自Configuration&a…

以开放促发展 同创永益召开数字韧性生态交流会

8月3日&#xff0c;同创永益数字韧性生态交流会在北京总部举办&#xff0c;30多家合作伙伴、渠道商齐聚一堂&#xff0c;围绕同创永益品牌、产品、行业解决方案进行充分探讨&#xff0c;共话行业前瞻趋势&#xff0c;共绘跨越增长新蓝图。 活动开始前&#xff0c;同创永益渠道管…

C++——函数重载及底层原理

函数重载的定义 函数重载&#xff1a; 是函数的一种特殊情况&#xff0c;C允许在同一作用域重声明几个功能类似的同名函数&#xff0c;这些同名函数的形参列表&#xff08;参数个数或者类型&#xff0c;类型的顺序&#xff09;不同&#xff0c;常用来处理实现功能类似数据结构…

超好用的接口自动化框架,lemon-easytest内测版发布,赶紧用起来~

easytest easytest 是一个接口自动化框架。 功能特点&#xff1a; 支持 http 接口测试 支持 json&#xff0c;html,xml 格式的响应断言 支持数据库断言 支持用例标记筛选 支持用例失败重运行 支持多线程 安装 pip install lemon_easytest 快速使用 不需要写任何代码…

wsl没有响应,wsl启动失败,docker启动失败

wsl的相关问题记录和解决 问题一&#xff1a;cmd命令窗口输入wsl后没有响应&#xff0c;会卡住&#xff0c;类似如图 排查&#xff1a; 输入 wsl -l -v看是否有东西输出&#xff1b;我的电脑没有东西输出&#xff0c;依旧是卡住;有内容请重启试试从开始菜单打开&#xff0c;点…

【Git】大大大问题之syntax error near unexpected token `(‘ 的错误解决办法

话不多说&#xff0c;先上图&#xff1a; 如图&#xff0c;因为在linux环境里&#xff0c;文件路径中含有括号&#xff08;&#xff09;&#xff0c;因此报错&#xff01; 解决办法 等同于 &#xff1a;linux下解决bash: syntax error near unexpected token (’ 的错误&am…

【中危】Apache Airflow Drill Provider < 2.4.3 存在任意文件读取漏洞

漏洞描述 Apache Airflow Drill Provider 是 Apache Airflow 项目中的一个模块&#xff0c;用于提供与 Apache Drill 数据引擎的集成。 2.4.3 之前版本中&#xff0c;由于 drill#create_engine 方法未对用户传入的 url 参数进行过滤&#xff0c;攻击者可构造恶意的查询参数&a…

MYSQL-习题掌握

文章目录 SQL基本操作1 设计表操作1.1 关系表字段1.2 关系表创建1.3 关系表数据1.4 关系表关系 2 SQL操作2.1 SQL 1-102.2 SQL 11-202.3 SQL 21-302.4 SQL 31-402.5 SQL 41-50 SQL基本操作 1 设计表操作 1.1 关系表字段 1 学生表 student s_ids_names_births_sex学生编号学…

第二部分:AOP

一、AOP简介 AOP(Aspect Oriented Programming)面向切面编程&#xff0c;一种编程范式&#xff0c;指导开发者如何组织程序结构。 AOP是OOP&#xff08;面向对象编程&#xff09;的进阶版。 作用&#xff1a;在不改变原始设计的基础上为其进行功能增强。 spring理念&#x…