十九、SpringCloud Alibaba Sentinel实现熔断和限流 (二 流控+降级+热点key)

四、流控规则

 

1、介绍模式

在sentinel控制台哪儿配置?

2、流控模式

1)直接快速失败

①、配置及说明

/testA请求每秒请求数(QPS)超过单机域值1,直接快速失败然后响应给客户端

②、测试

缺点:直接返回报错信息,是否可以由自己编写限流处理方法

2)关联模式

①、关联模式是什么?

当关联的资源达到阈值时,就限流自己

可以理解为:当支付模块挂了时,需要对订单模块进行限流

②、配置

当 /testB QPS达到域值 ,testA请求就不能使用

③、测试

postman 20个线程每0.3秒访问一次testB,然后查看testA的请求结果

3、流控效果

1)直接 -> 快速失败 (默认的流控效果)

2)预热

①、说明

阈值除以coldFactor(默认值是3),经过多少预热时长后才会达到阈值

②、配置

③、应用场景

秒杀系统开开启的瞬间,会有很多流量上来,很有可能会将系统打死,预热的方式就是慢慢的将阈值

增长到设置的阈值

3)排队等待

①、排队等待是什么?

②、排队等待的设置

设置 testA每秒一次请求,超过的话就排队等待,等待的超时时间为20000毫秒

五、降级规则

1、官网

https://github.com/alibaba/Sentinel/wiki

2、基本介绍

Sentinel熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或者异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其他的资源而导致级联错误

当资源被降级后,在接下来的降级时间窗口期之内,对该资源的调用都会自动熔断(默认行为是抛出 DegradeException)

【注意 2020年的cloud ,现在是由HALF OPEN状态的】Sentinel断路器是没有半开状态的

参考Hystrix

半开的状态系统自动去检测是否有请求异常

没有异常就关闭断路器恢复使用

3、降级策略实战

1)RT

①、是什么?

②、配置测试

2)异常比例 (暂时未写,以后补上)

3)异常数(暂时未写,以后补上)

六、热点key限流

1、是什么?

对热点参数进行限流(例如促销商品的主键)

2、官网

https://github.com/alibaba/Sentinel/wiki/%E7%83%AD%E7%82%B9%E5%8F%82%E6%95%B0%E9%99%90%E6%B5%81

3、@SentinelResource注解

为服务降级申明兜底方法

4、controller中声明兜底方法

@GetMapping("/testHotKey")
@SentinelResource(value = "testHotKey",blockHandler = "del_testHotKey")
public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
             @RequestParam(value = "p2",required = false) String p2){

    return "testHotKey";
}

public String del_testHotKey(String p1, String p2, BlockedException exception){
    return "========del_testHotKey,o(╥﹏╥)o";
}

5、在sentinel中添加热点限流配置

根据代码:

@SentinelResource(value = "testHotKey",blockHandler = "del_testHotKey")

在Sentinel控制台中添加配置

方法testHotKey里第一个参数,只要QPS超过每秒1次,马上进行降级处理

6、测试

7、参数例外项

普通的时候:超过1秒钟一个后,达到阈值后马上被限流

我们期待当p1参数是某个特殊值时,它的限流和平时不一样

配置如下

意思是:当p1的参数为1,每秒200次请求才会达到阈值

七、系统规则(总的配置 不常用)

https://github.com/alibaba/Sentinel/wiki/%E7%B3%BB%E7%BB%9F%E8%87%AA%E9%80%82%E5%BA%94%E9%99%90%E6%B5%81

配置全局QPS

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Alibaba Sentinel是一个基于Java的开源框架,提供了熔断降级限流、系统负载保护等功能,可以帮助开发者实现微服务架构中的高可用性和稳定性。下面是一个使用Spring Cloud Alibaba Sentinel实现熔断限流的项目介绍。 1. 创建Spring Boot项目 首先,需要创建一个Spring Boot项目,并添加Spring Cloud Alibaba Sentinel的依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>2.2.3.RELEASE</version> </dependency> ``` 2. 配置Sentinel Dashboard Sentinel Dashboard是Sentinel的可视化管理平台,可以通过它来查看应用程序的运行状况、配置规则等。需要在项目中添加Sentinel Dashboard的依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel-datasource-nacos</artifactId> <version>2.2.3.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-sentinel-dashboard</artifactId> <version>2.1.1.RELEASE</version> </dependency> ``` 同时,在application.properties文件中添加以下配置: ```properties # Sentinel Dashboard配置 spring.cloud.sentinel.transport.dashboard=localhost:8080 # Nacos配置 spring.cloud.nacos.discovery.server-addr=localhost:8848 spring.cloud.nacos.discovery.namespace= spring.cloud.nacos.discovery.username= spring.cloud.nacos.discovery.password= ``` 启动项目后,访问http://localhost:8080即可进入Sentinel Dashboard界面。 3. 实现熔断限流 在项目中可以通过注解方式实现熔断限流功能。例如,在Controller类中添加以下代码: ```java @RestController public class HelloController { @GetMapping("/hello") @SentinelResource(value = "hello", fallback = "fallback") public String hello(@RequestParam(required = false) String name) { if(StringUtils.isEmpty(name)) { throw new IllegalArgumentException("name is empty"); } return "Hello, " + name; } public String fallback(String name) { return "fallback " + name; } } ``` @SentinelResource注解指定了资源名称为hello,同时指定了fallback方法用于处理熔断降级。可以通过Sentinel Dashboard配置熔断规则和制规则。 以上就是使用Spring Cloud Alibaba Sentinel实现熔断限流的项目介绍。使用Sentinel可以帮助我们更好地保障应用程序的稳定性和可用性,避免因为异常情况导致系统崩溃。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值