Spring Cloud Alibaba Sentinel降级规则:
资源名:监控的IR访问URI
降级策略:
RT:平均响应时间(DEGRADE_GRADE_RT),当每1S内持续进入N个请求,对应时刻的平均响应时间(秒级)均超过阈值(count,以 ms 为单位),在时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动熔断降级(抛出DegradeException),Sentinel 默认统计的 RT 上限是 4900 ms,超出此阈值的都会算作 4900 ms,若需要变更此上限可以通过启动配置项-Dcsp.sentinel.statistic.max.rt=xxx 来配置
异常比例(DEGRADE_GRADE_EXCEPTION_RATIO):是指当资源的每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,资源进入降级状态,在时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,这个方法的调用都会自动地返回,异常比率的阈值范围是 [0.0, 1.0],代表 0% – 100%;
异常数(DEGRADE_GRADE_EXCEPTION_COUNT):指当资源近1分钟的异常数目超过阈值之后会进行熔断降级,由于时间统计窗口是分钟级别,若timeWindow小于 60s,则结束熔断状态后仍可能再进入熔断状态;
测试Sentinel降级规则:
针对/notFound-feign进行服务降级RT为2是触发降级,窗口等待时间5S之后可重新访问:
针对/notFound-feign进行服务降级异常比例阈值为0.5,窗口等待时间5S之后可重新访问:
我们可以手动在该接口下的服务提供者利用代码int a = 10/0;制造一个异常来进行测试:
Spring Cloud Alibaba Sentinel热点规则:
热点即为经常访问的数据,有时候我们希望统计某个热点数据中访问频次最高的TopK的数据,并对其进行热点规则访问限制:
以下面这个接口为例对热点规则做详细了解:http://localhost:8082/app?a=12&b=test
规则如下:针对/app接口 第一个参数阈值为0,达到阈值100则触发热点规则降级等,或者指定第一个参数类型以及它自身的参数值,如果传递的值为12与参数设置值一样并且达到阈值5触发,统计窗口时长5S。
热点规则需要配合@SentinelResource(“app”)注解,否则不生效;参数类型必须是里面的7中类型才行;
/**
* @param a 参数1
* @param b 参数2
* @return
*/
@GetMapping("/app") // 埋点:加入sentinel的监控
@SentinelResource(value = "app", fallback = "fallback", fallbackClass = MyFallbackClass.class)
public String app(@RequestParam(value = "a", required = false) String a,
@RequestParam(value = "b", required = false) String b) {
System.out.println("/app/--> " + a + "--" + b);
return restTemplate.getForObject("http://29-nacos-discovery-provider/test", String.class);
}
public class MyFallbackClass {
/**
* 该方法一定要是static方法
*
* @param a
* @param b
* @return
*/
public static String fallback(String a, String b) {
System.out.println("Fall back--> " + a + "--" + b);
return "Fall back.";
}
}
Spring Cloud Alibaba Sentinel系统规则:
Load(系统自适应仅对Linux机器生效):系统的load1作为启发指标,进行自适应系统保护,当系统load1超过设定的启发值,并且系统当前的并发线程数目超过估算的系统容量时才触发系统保护,系统容量由系统的maxQps * minRt估算得出,设定参考值一般是 CPU cores * 2.5;
RT:当单台机器上所有入口的平均RT达到阈值即触发系统保护,单位是毫秒;
线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护;
入库QPS:当单台机器上所有入口流量的QPS达到阈值即触发系统保护;
CPU使用率:当系统 CPU 使用率超过阈值之后即触发系统保护(取值范围:0.0-1.0)
测试系统保护规则:入口QPS达到5之后触发系统保护
Spring Cloud Alibaba Sentinel授权规则:
对/notFound-feign设置黑名单origin参数值为order黑名单;/app设置白名单origin参数值为user;
@Component
public class MyRequestOriginParser implements RequestOriginParser {
@Override
public String parseOrigin(HttpServletRequest request) {
//获取参数origin 如果觉得放在url后面不安全 可以放在header当中
//request.getHeader()
String origin = request.getParameter("origin");
if (StringUtils.isBlank(origin)) {
throw new IllegalArgumentException("origin参数未指定");
}
return origin;
}
}
Spring Cloud Alibaba Sentinel几种规则就在文章当中介绍完毕,开发当中还需要根据自己的业务来进行调整。欢迎一起交流讨论!!!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/77246.html