springcloud中流控和熔断

接下去简单介绍下如何利用sentinel的dashboard进行流控和熔断。

一、流控(服务提供方设置)

1、在簇点链路找到对应资源名,点击流控,选择QPS或者线程数,单位是 秒 ,设置单机阈值

流控:QPS:每秒访问数;线程数:也就是时间段内只有对应的线程数处理,超过的线程请求会等待

2、流控模式:直接、关联、链路

①直接:只针对当前资源进行流控,默认模式。

②关联:关联资源的请求超出阈值,那么会对当前资源请求有影响,比如查询和插入两个动作进行流量控制,大促的时候,保证插入成功(下单),查询稍微慢一点

 下图所示,当请求/order/add接口的时候,如果1秒请求超过2次,那么就会对/order/flowThread进行限流,请求该接口提示该接口被限流

③链路:选择链路,需要填写入口资源,对入口资源进行控制,比如某个渠道的请求进行限制访问。demo如下

@SentinelResource不止可以作用于controller接口,还能作用于serviceImpl里面的方法

需要在配置文件中配置

spring:
  cloud:
    sentinel:
      web-context-unify: false

sentinel流控配置如下

简单理解就是:/order/yyy和/order/xxx接口都是getOrder流控的接口,但前者如果每秒超过2次请求就会被流控,而后者就不会,即同一个链路,有些请求会被控制,有些请求不会

代码编码如下:

controller

复制代码
    @GetMapping("/xxx")
    public String xxx(){
        String msg = orderService.getOrder();
        return "xxx订单 " + msg;
    }

    @GetMapping("/yyy")
    public String yyy(){
        String msg = orderService.getOrder();
        return "yyy订单 " + msg;
    }
复制代码

serviceImpl

复制代码
    @Override
    @SentinelResource(value = "getOrder",blockHandler = "orderBlockHandler")
    public String getOrder() {
        return "order service";
    }

    public String orderBlockHandler(BlockException e){
        return "被流控";
    }
复制代码

请求后如下:

 

 

3、流控效果:快速失败、warm up 、排队等待

快速失败:超出的请求直接就拒绝处理,提示被流控

warm up(激增流量):预热,即请求来时,是个慢慢增加请求处理数的过程。有个冷加载因子,默认是3,即默认是3个流量被处理,其余会拒绝,后来处理的请求慢慢的就是数量增多

排队等待(脉冲流量):超出阈值的请求,会等待设置的超时时间,一旦系统将现有请求处理完成,就会去处理等待的请求,有效的利用系统处理脉冲流量的时间间隙

 

二、熔断(服务消费端进行设置)

熔断策略:慢比例(默认)、异常比例、异常数

 慢比例:如上图所示,当请求数超过5次,有5*0.4=2个的请求响应时间超过1000ms,就会触发熔断,熔断时长为3s,在这3s熔断期间不会有请求通过(关闭),而过完3s后,会进入一个半开状态,即会放一个请求过去,如果这一个请求还是超过1000ms的慢调用,那会再次进入熔断。

异常比例:如上图所示,当请求次数超过10,其中10*0.2=2个出现异常,那么就会触发熔断,熔断时长5s。超过熔断5s后访问第一次请求就出现异常,那就再次进入到熔断状态。

异常数:如上图所示,当请求次数超过10个的时候,出现4个异常,就会触发熔断,熔断时长5s。超过熔断5s后访问第一次请求就出现异常,那就再次进入到熔断状态。

这流控和熔断都是防止系统出现级联故障,导致系统崩溃的处理,让系统更加健壮

 

以上内容纯学习使用!

 

posted @   多多指教~  阅读(182)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示