• sentinel规则


    目录

    流控规则

    流控模式

     配置流控效果

    降级规则

    慢调比例​编辑

    异常比例

    异常数

    热点规则

    关键注解@SentinelResource

    授权规则

     系统规则


    流控规则

    流量控制,其原理是监控应用流量的QPS(每秒查询率) 或并发线程数等指标,当达到指定的阈值时 对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

    点击簇点链路,我们就可以看到访问过的接口地址,然后点击对应的流控按钮,进入流控规则配 置页面。新增流控规则界面如下:

    资源名:唯一名称,默认是请求路径,可自定义

    针对来源:指定对哪个微服务进行限流,默认指default,意思是不区分来源,全部限制

    阈值类型/单机阈值

    • QPS(每秒请求数量): 当调用该接口的QPS达到阈值的时候,进行限流
    • 线程数:当调用该接口的线程数达到阈值的时候,进行限流 

    流控模式

    • 直接(默认):接口达到限流条件时,开启限流
    • 关联:当关联的资源达到限流条件时,开启限流 [适合做应用让步]
    • 链路:当从某个接口过来的资源达到限流条件时,开启限流;它的功能有点类似于针对来源配置项区别在于:针对来源是针对上级微服务,而链路流控是针对上级接口,也就是说它的粒度更细。

     配置流控效果

    • 快速失败(默认): 直接失败,抛出异常,不做任何额外的处理,是最简单的效果
    • Warm Up:它从开始阈值到最大QPS阈值会有一个缓冲阶段,一开始的阈值是最大QPS阈值的 1/3,然后慢慢增长,直到最大阈值,适用于将突然增大的流量转换为缓步增长的场景。
    • 排队等待:让请求以均匀的速度通过,单机阈值为每秒通过数量,其余的排队等待; 它还会让设 置一个超时时间,当请求超过超时间时间还未处理,则会被丢弃。

    降级规则

    降级规则就是设置当满足什么条件的时候,对服务进行降级。Sentinel提供了三个衡量条件:

    慢调比例

     如上图:请求5次以上,这5次请求平均响应时间超过1毫秒的比例超过0.1,则进入熔断降级状态;超过5s后恢复.

    异常比例

     如上图,请求5次以上时,这5次请求的异常比例超过0.2进入熔断降级状态;熔断3s;

    异常数

    如上图,请求5次以上时,这5次请求的异常数2次,进入熔断降级状态;熔断3s;

    热点规则

    热点参数流控规则是一种更细粒度的流控规则, 它允许将规则具体到参数上。

    参数索引代表第几个参数,从0开始,如下边的索引0代表name

     public String message5(String name, Integer age);
    •  图中定义的规则表示:限制传入下标是0的参数,一秒只能请求一次;
    • 参数例外项可以定义不同类型的参数,不同的参数值给不同的阈值;

    关键注解@SentinelResource

    两个重要参数

    • value:代表资源名称,必须要配置;其他参数非必填
    • blockHandler:blockHandler 对应处理 BlockException 的方法名称,可选项,访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。
    1. @SentinelResource(value = "testHotKey", blockHandler = "handler_HotKey")
    2. public String testHotKey(@RequestParam(value = "hot1",required = false) String hot1,
    3. @RequestParam(value = "hot2",required = false)String hot2,
    4. @RequestParam(value = "hot3",required = false) String hot3){
    5. return "----testHotKey";
    6. }
    7. public String handler_HotKey(String hot1, String hot2, String hot3, BlockException e) {
    8. return "您的手速太快了,请稍后再试!";
    9. }
    参数作用
    value资源名称
    entryTypeentry类型,标记流量的方向,取值IN/OUT,默认是OUT
    blockHandler

    处理BlockException的函数名称,函数要求:

    1. 必须是 public

    2.返回类型 参数与原方法一致

    3. 默认需和原方法在同一个类中。若希望使用其他类的函数,可配置 blockHandlerClass ,并指定blockHandlerClass里面的方法。

    blockHandlerClass存放blockHandler的类,对应的处理函数必须static修饰。
    fallback

    用于在抛出异常的时候提供fallback处理逻辑。fallback函数可以针对所 有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进 行处理。函数要求:

    1. 返回类型与原方法一致

    2. 参数类型需要和原方法相匹配

    3. 默认需和原方法在同一个类中。若希望使用其他类的函数,可配置 fallbackClass ,并指定fallbackClass里面的方法。

    fallbackClass存放fallback的类。对应的处理函数必须static修饰。
    defaultFallback

    用于通用的 fallback 逻辑。默认fallback函数可以针对所有类型的异常进 行处理。若同时配置了 fallback 和 defaultFallback,以fallback为准。函数要求:

    1. 返回类型与原方法一致

    2. 方法参数列表为空,或者有一个 Throwable 类型的参数。

    3. 默认需要和原方法在同一个类中。若希望使用其他类的函数,可配置 fallbackClass ,并指定 fallbackClass 里面的方法。

    exceptionsToIgnore指定排除掉哪些异常。排除的异常不会计入异常统计,也不会进入 fallback逻辑,而是原样抛出。
    exceptionsToTrace需要trace的异常

    授权规则

    很多时候,我们需要根据调用来源来判断该次请求是否允许放行,这时候可以使用 Sentinel 的来源 访问控制的功能。来源访问控制根据资源的请求来源(origin)限制资源是否通过:

    • 若配置白名单,则只有请求来源位于白名单内时才可通过;
    • 若配置黑名单,则请求来源位于黑名单时不通过,其余的请求通过。

     系统规则

     系统保护规则是从应用级别的入口流量进行控制,从单台机器的总体 Load、RT、入口 QPS 、CPU 使用率和线程数五个维度监控应用数据,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。 系统保护规则是应用整体维度的,而不是资源维度的,并且仅对入口流量 (进入应用的流量) 生效。

    • Load(仅对 Linux/Unix-like 机器生效):当系统 load1 超过阈值,且系统当前的并发线程数超过 系统容量时才会触发系统保护。系统容量由系统的 maxQps * minRt 计算得出。设定参考值一般 是 CPU cores * 2.5。
    • RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。
    • 线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。
    • 入口 QPS:当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。
    • CPU使用率:当单台机器上所有入口流量的 CPU使用率达到阈值即触发系统保护
  • 相关阅读:
    畅游青岛旅游系统的设计与实现
    gorm存储json
    【计算机网络】 基于TCP的简单通讯(服务端)
    次世代3D建模的制作流程与制作时间,一个模型就上万,钱真不好拿
    FloodFill算法---DFS
    LearnDash+BuddyBoss:终极在线课程社区组合
    SpringBoot自定义参数解析器HandlerMethodArgumentResolver(解析ip)
    VR社交应用Rec Room再获1.45亿美元融资,用户突破3700万
    pointpillars pytorch的安装运行
    UI案例——登陆系统
  • 原文地址:https://blog.csdn.net/yanjianpeng_2018/article/details/126750279