美文网首页
Sentinel流控规则

Sentinel流控规则

作者: 裂开的汤圆 | 来源:发表于2023-02-09 18:42 被阅读0次

    Sentinel流量控制官方文档

    https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6

    Sentinel流量控制

    可以在Sentinel控制台-簇点链路-针对不同的接口编写不同的流量控制规则

    image.png

    名词解释

    资源名: 唯一名称,默认请求路径

    针对来源: Sentine可以针对调用者进行限流,填写微服务名,默认default(不区分来源)

    阈值类型/单机阈值:

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

    是否集群: 不需要集群

    流控模式:

    • 直接:api达到限流条件时,直接限流
    • 关联:当关联的资源达到阈值时,就限流自己
    • 链路: 只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流,api级别的针对来源)

    流控效果:

    • 快速失败:直接失败,抛出异常
    • Warm Up: 根据codeFactor(冷加载因子,默认3)的值,从阈值除以codeFactor,经过预热时长,才达到设置的QPS阈值
    • 排队等候: 让无法立即处理的请求进行排队等候,阈值类型必须设置为QPS,否则无效

    阈值类型

    这里我编写一个接口/testA,并接入了Sentinel的监控。

    QPS:每秒请求数

    image.png

    当接口/testA,QPS超过每秒钟1个请求数时,会直接返回失败

    image.png

    线程数:指服务端开启的线程的数量而不是接口的请求数量,这里手动刷新操作不好测试效果,借助了Jmeter


    image.png

    当服务端超过一个线程时,会直接返回失败。
    并发十个请求线程,只有两个成功返回正确消息,其余八个都被Sentinel限流

    image.png

    流控模式

    直接:当api达到限流条件时,直接限流,这个比较好理解

    关联:当与A关联的资源B达到了阈值后,就限流A,这里我编写了两个测试接口,testA与testB。

    image.png

    当testB接口QPS超过1时,限流testA接口。

    流控效果

    快速失败:当达到阈值时,直接返回Blocked by Sentinel(flow limiting)

    image.png

    Warm Up(预热): 即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。

    image.png

    排队等候: 当超过阈值时,让请求进行匀速排队。阈值类型必须设置为QPS,否则无效。

    适用场景:主要用于处理间隔性突发的流量,例如消息队列。想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是在第一秒直接拒绝多余的请求。

    image.png image.png

    使用@SentinelResource配置流控规则

    controller

        /**
         * 使用@SentinelResource标签开启热点参数限流功能
         * @SentinelResource(value)对应Sentinel控制台-流控规则-资源名
         * @SentinelResource(blockHandeler)指定流控规则生效后的处理函数
         */
        @GetMapping("byResource")
        @SentinelResource(value = "byResource", blockHandler = "handleException")
        public String byResource(){
            return "----------------- 按资源名称设置流控规则 -------------------";
        }
    
        public String handleException(BlockException exception){
            return "-------------------- 流控规则生效后执行的函数 ------------------";
    
        }
    

    Sentinel控制台

    image.png

    使用@SentinelResource标签的好处在于能够自定义流控规则生效后返回的消息。

    相关文章

      网友评论

          本文标题:Sentinel流控规则

          本文链接:https://www.haomeiwen.com/subject/prdpvktx.html