springcloud alibaba sentinel熔断降级

简介

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
在这里插入图片描述
sentinel相当于hystrix的升级版,加入了web界面,能够实时在线的改变流量策略。

Sentinel 分为两个部分:

  • 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
  • 控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

安装

官方下载架包后运行命令:
java -Dserver.port=8858 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
访问localhost:8858 即可进入控制台界面,账户密码都为sentinel
在这里插入图片描述

sentinel控制台使用

https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel
按照文档配置后,访问localhost:8080可以看到如下画面。如果没有左边的服务名,可以尝试注销账号重新登陆。
在这里插入图片描述

流控规则

在这里插入图片描述
流控模式:

  • 直接:API达到限流条件时,直接限流。
  • 关联:当关联的资源达到阈值时,就限流自己。
  • 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)【API级别的针对来源】。

流控效果:

  • 快速失败:直接失败,抛异常。
  • Warm up:根据Code Factor(冷加载因子,默认3)的值,从阈值/codeFactor,经过预热时长,才达到设置的QPS阈值。
  • 排队等待:匀速排队,让请求以匀速的速度通过,阈值类型必须设置为QPS,否则无效。

熔断(降级)规则

在这里插入图片描述

RT(平均响应时间,秒级):

  • 平均响应时间 超出阈值 且 在时间窗口内通过的请求>=5,两个条件同时满足后触发降级。
  • 窗口期过后关闭断路器。
  • RT最大4900(更大的需要通过-Dcsp.sentinel.statistic.max.rt=XXXX才能生效)。

异常比列(秒级)

  • QPS >= 5且异常比例(秒级统计)超过阈值时,触发降级;时间窗口结束后,关闭降级 。

异常数(分钟级)

  • 异常数(分钟统计)超过阈值时,触发降级;时间窗口结束后,关闭降级。

热点key

何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:
商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制

热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。

下面的代码中参数p1,p2就是热点。deal_testHotKey为被sentinel限流后的兜底方法。

@GetMapping("/testHotKey")@SentinelResource(value = "testHotKey",blockHandler = "deal_testHotKey")public String testHotKey(@RequestParam(value = "p1",required = false) String p1,@RequestParam(value = "p2",required = false) String p2){return "testHotKey";}public String deal_testHotKey(String p1, String p2, BlockException e){return "deal_testHotKey 兜底方法";}

下面设置会统计/testHotKey携带参数0(p1)的次数,如果在统计窗口(1s)内有超过单机阈值(1条)带有参数p1的请求,则会限流。

注意:这里的blockHandler对应的兜底方法只能在sentinel限流的时候才会触发,程序异常并不会走兜底方法。
在这里插入图片描述

参数例外项

  • 普通 - 超过1秒钟一个后,达到阈值1后马上被限流
  • 我们期望p1参数当它是某个特殊值时,它的限流值和平时不一样
  • 特例 - 假如当p1的值等于5时,它的阈值可以达到200

在这里插入图片描述
注意:参数的值应该是基本类型or String

系统规则(了解)

系统保护规则是从应用级别的入口流量进行控制,从单台机器的 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 达到阈值即触发系统保护。

@SentinelResource兜底方法配置

可以另外创建一个类来进行兜底方法的配置:

public class CustomerBlockHandler {public static CommonResult handlerException(BlockException exception){return new CommonResult(4444,"用户自定义全局Exception: ",new Payment(2020L,"serial003"));}public static CommonResult handlerException2(BlockException exception){return new CommonResult(4444,"用户自定义全局Exception: ",new Payment(2020L,"serial003-2"));}
}

controller:通过blockHandlerClass指定类名,blockHandler指定选定的兜底方法。

   @GetMapping("/byResource")@SentinelResource(value = "byResource",blockHandlerClass = CustomerBlockHandler.class,blockHandler = "handlerException")public CommonResult byResource(){return new CommonResult(200,"按资源名称访问限流测试OK",new Payment(2020L,"serial001"));}

整合nacos进行持久化存储

默认情况下,当我们在Sentinel控制台中配置规则时,控制台推送规则方式是通过API将规则推送至客户端并直接更新到内存中。一旦我们重启应用,规则将消失。
在这里插入图片描述

配置

引入依赖

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

修改application.yml:

spring:cloud:sentinel:datasource:ds1:nacos:server-addr: localhost:8848dataId: ${spring.application.name}-sentinelgroupId: DEFAULT_GROUPdata-type: jsonrule-type: flow

在nacos中添加配置:
在这里插入图片描述

[{"resource": "/rateLimit/byUrl","limitApp": "default","grade": 1,"count": 1,"strategy": 0,"controlBehavior": 0,"clusterMode": false}
]

相关参数解释:
resource:资源名称;
limitApp:来源应用;
grade:阈值类型,0表示线程数,1表示QPS;
count:单机阈值;
strategy:流控模式,0表示直接,1表示关联,2表示链路;
controlBehavior:流控效果,0表示快速失败,1表示Warm Up,2表示排队等待;
clusterMode:是否集群。

之后可以发现Sentinel控制台已经有了如下限流规则:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Security 之 用户名/密码认证

用户名/密码 验证用户身份的最常见方式之一是验证用户名和密码。Spring Security提供了全面的支持,用于使用用户名和密码进行身份验证。 您可以使用以下方式配置用户名和密码身份验证: @Configuration @EnableWebSecurity public class SecurityConfig {@Beanpublic Secur…

Excel象限图

Excel象限图 1、背景描述2、象限图&#xff08;散点图&#xff09;3、象限图&#xff08;气泡图&#xff09; 1、背景描述 平常我们在工作中做图表时&#xff0c;使用最多的就是柱状形、折线图、饼图&#xff0c;这些图表主要为了展示趋势、对比和构成&#xff0c;但有时候我们…

LeetCode 48 旋转图像

题目描述 旋转图像 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4…

怎么检查直线模组的故障?

直线模组可谓是自动化设备中不可或缺的一部分&#xff0c;在自动化设备运行过程中&#xff0c;如果发生直线模组报警故障&#xff0c;往往会导致自动化生产线停下来&#xff0c;造成产量的减少&#xff0c;所以检查直线模组的故障很重要&#xff01; 1、检查外观是否有明显的磨…

8.5跳跃游戏(LC55-M)

算法&#xff1a; 其实跳几步无所谓&#xff0c;关键在于可跳的覆盖范围&#xff01; 不一定非要明确一次究竟跳几步&#xff0c;每次取最大的跳跃步数&#xff0c;这个就是可以跳跃的覆盖范围。 这个范围内&#xff0c;别管是怎么跳的&#xff0c;反正一定可以跳过来。 那…

知识笔记(九十五)———Vue中的导航守卫

直白的说&#xff0c;导航守卫就是路由跳转过程中的一些钩子函数&#xff0c;这些函数能让你在跳转过程中操作一些其他的事儿的时机&#xff0c;这就是导航守卫。 比如最常见的登录权限验证&#xff0c;当用户满足条件时&#xff0c;才让其进入导航&#xff0c;否则就取消跳转…

恒创科技:云服务器配置中的vCPU与物理CPU有啥区别?

​  说到云服务器&#xff0c;您可能经常会遇到vCPU这个词&#xff0c;而且它和物理CPU经常被拿来谈论。尽管它们听起来相似&#xff0c;但两者之间存在显著差异。在本文中&#xff0c;我们将详细讨论云vCPU和物理CPU之间的差异。 物理与虚拟 CPU 和 vCPU 之间最显著的区别在…

游戏渲染管道

高级的渲染步骤是由管道&#xff08;软件架构&#xff09;实现&#xff0c;各个阶段会操作输入流中的数据项&#xff0c;并对输出流产生数据。 管道每个阶段独立于其他阶段&#xff0c;所以管道的最大有点在于非常适合并行化。 渲染管道分为3个概要阶段。但在这里多讲几个阶段…

Maven《四》-- 基于Idea进行Maven工程构建

目录 &#x1f436;4.1 构建概念和构建过程 &#x1f436;4.2 命令方式项目构建 1. &#x1f959;编译&#xff1a;mvn compile 2. &#x1f959;清理&#xff1a;mvn clean 3. &#x1f959;打包&#xff1a;mvn package 4. &#x1f959;安装&#xff1a;mvn install …

第二节 K8S 的架构

第二节 K8S 的架构 K8S 架构图如下: 官方文档: https://kubernetes.io/docs/concepts/architecture/ kube-api-server 是集群的核心&#xff0c; 是k8s中最重要的组件&#xff0c; 因为它是实现声明式api的关键, 整个集群的入口,所有请求都要经过它, api接口服务. kubernetes…

制造业管理软件:为何ERP替代不了MES?

一、ERP和MES的功能区别 ERP是一种综合性的企业管理软件&#xff0c;它涵盖了企业的各个方面&#xff0c;包括财务、采购、库存、销售、人力资源等。它的主要功能是将企业内部的各项业务整合为一个整体进行管理&#xff0c;实现信息共享和协同工作。ERP的主要特点是可以对企业…

街头霸王II神经网络AI训练项目

简介&#xff1a; 该项目通过对街头霸王II进行足够的人工或自动训练&#xff0c;最终生成的神经网络可以让对局双方在AI的掌控下自动进行对局。 要求&#xff1a; 一、MAME版本&#xff1a;MAME01850b-64位 二、ROM版本&#xff1a; “街头霸王Ⅱ加速终极格斗日版”(sf2hfj) …