Sentinel流量控制及熔断

Sentinel:哨兵,用于监控接口的流量、熔断、降级等。

相对于Hystrix,Sentinel有界面,不用加那么多注解来实现,实现更加方便。其实两个理念都一样。

使用流程:

1)启动sentinel。下载官网的jar包,使用java -jar去执行即可,默认端口为8080。用户名密码都是sentinel。

2)在项目模块中,引入sentinel模块,将服务注册进nacos和sentinel。

3)将微服务注册进sentinel后即可监控。再访问后就可以在sentinel图形化界面就可以看到访问信息。

Sentinel流量控制及熔断

流控规则

Sentinel流量控制及熔断

上图表示对于/testA这个路径入口,QPS阈值为1,如果超过阈值,则直接失败,返回客户端一个失败原因。

  • 阈值类型

    • QPS:一秒最多多少请求
    • 线程数:不管多少请求进来,只有那么多线程可以处理请求,没有空余线程时则失败,
  • 流控模式

    • 直接:自己这个接口超出阈值,则限制自己这个接口的流控
    • 关联:自己这个接口超出阈值,则限制关联的那个接口的流控。比如支付接口的流量太高,则去限制订单接口的流量。
  • 流控效果

    • 快速失败:抛出异常
    • Warm UP:预热,冷启动。即慢慢的将流量放进来,防止一瞬间的大流量将系统打死
      • Sentinel流量控制及熔断
    • 排队等待:让流量排队去请求。而不是直接失败。使用漏桶算法。

降级

Sentinel流量控制及熔断

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

1)RT策略

Sentinel流量控制及熔断

表示对于/testD请求路径,在QPS>5且每个请求的响应时间大于200ms时进行服务熔断,且时间窗口为1秒,即接下来的1秒都是熔断状态。当不满足条件时又可以提供服务。

2)异常比例

QPS>5且异常比例大于阈值,则进行熔断处理。

3)异常数

一分钟内异常数超过阈值,则熔断。

热点规则

之前的流控规则中,都是对一个路径进行流控。热点规则是指对某一个热点进行流控,哪个路径哪个参数时进行流控,即多了参数。

测试的代码如下:

Sentinel流量控制及熔断

@SentinelResource注解可以指定资源名和降级处理的方法。blockHandler为兜底方法。没有兜底方法时,则超过热点规则时会出现报错信息到前台。

TODO:其他配置

系统规则

对整个系统进行整体限流。不够细粒度化。

@SentinelResource

指定自定义兜底的方法。

注解一般会使用两个参数:

  • value=" " 用于指定资源名,一般与路径相同。这样就可以在配置流控时按照资源名配置,达到流控规则时就会走兜底方法。
  • blockHandler="" 指定兜底方法名。

但是不可能每个接口去写一个兜底方法,而是应该单独在一个类中处理。

Sentinel流量控制及熔断

熔断

当服务器端代码出现异常时,需要做熔断处理。在@SentinelResource注解中,fallback属性指定出现异常执行的方法。blockHandler属性用于sentinel规则的配置兜底方法。

规则持久化

sentinel重启后配置的规则就消失了,所以需要持久化。

官方推荐持久化进nacos。

1)导入sentinel-datasource-nacos包依赖

2)将流控规则配置进nacos。

相关文章:

  • 2022-12-23
  • 2021-05-30
  • 2021-09-25
  • 2021-05-29
  • 2022-01-07
  • 2021-03-10
  • 2021-10-17
猜你喜欢
  • 2021-05-20
  • 2021-02-04
  • 2021-08-07
  • 2021-11-21
  • 2021-10-14
  • 2022-02-02
  • 2022-12-23
相关资源
相似解决方案