ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Sentinel降级规则整理

2021-05-16 14:04:22  阅读:483  来源: 互联网

标签:降级 调用 请求 阈值 熔断 规则 Sentinel 异常


熔断降级

  • 对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一;
  • 对不稳定的弱依赖服务调用进行熔断降级,暂时切断不稳定调用,避免局部不稳定因素导致整体的雪崩;
  • 熔断降级作为保护自身的手段,通常在客户端(调用端)进行配置;

  换个通俗的说法,如下

  降级:保证主服务,停止其他不是主要的服务;

  熔断:当服务调用第二/三方服务出现不可用或超时等情况,为防止系统线程池占满而出现雪崩,暂时对服务停止调用;

 

Sentinel降级规则

  官方文档:[https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7]

  • Sentinel 熔断策略
    • 慢调用比例 (SLOW_REQUEST_RATIO):选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断;

      

 

    • 异常比例 (ERROR_RATIO):当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%;

      

 

 

      • 比例阈值:异常数对于最小请求数的占有比例;
      • 熔断时长:超过时间后会尝试恢复;
      • 最小请求数:熔断触发的最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断;

 

    • 异常数 (ERROR_COUNT):当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断;

      

      • 异常数:统计的异常数;
      • 熔断时长:超过时间后会尝试恢复;
      • 最小请求数:熔断触发的最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断;

 

  注:注意异常降级仅针对业务异常,对 Sentinel 限流降级本身的异常(BlockException)不生效;  

 

服务熔断的三种状态

  • 熔断关闭(Closed)

    • 服务没有故障时,熔断器所处的状态,对调用方的调用不做任何限制;
  • 熔断开启(Open)

    • 后续对该服务接口的调用不再经过网络,直接执行本地的fallback方法;
  • 半熔断(Half-Open)

    • 所谓半熔断就是尝试恢复服务调用,允许有限的流量调用该服务,并监控调用成功率;

 

  如下图:

  

    • 熔断恢复:
      • 经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态)尝试恢复服务调用,允许有限的流量调用该服务,并监控调用成功率;

      • 如果成功率达到预期,则说明服务已恢复,进入熔断关闭状态;如果成功率仍旧很低,则重新进入熔断状态;

 

Sentinel自定义异常降级处理

  Spring Cloud Alibaba从2.1.0版本到2.2.0版本升级后,Sentinel里面依赖进行了改动,且不向下兼容;

  

 

  参考:[https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E#%E7%BB%84%E4%BB%B6%E7%89%88%E6%9C%AC%E5%85%B3%E7%B3%BB

 

  旧版:实现UrlBlockHandler并重写blocked方法;

  新版:实现BlockExceptionHandler并重写handle方法;

 

  Sentinel中的异常总类:

Sentinel 限流降级本身的异常
BlockException

限流异常
FlowException

降级异常
DegradeException

参数限流异常
ParamFlowException

系统负载异常
SystemBlockException 

授权异常
AuthorityException

  

  

 

 

 

Feign整合Sentinel

feign:
  sentinel:
    enabled: true

 

标签:降级,调用,请求,阈值,熔断,规则,Sentinel,异常
来源: https://www.cnblogs.com/coder-zyc/p/14770697.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有