• Sentinel的另外三种流控模式(附代码详细介绍)


    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将详细介绍Sentinel的其他三种流控模式,后续文章将详细介绍Sentinel的其他知识。
    如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
    小威在此先感谢各位大佬啦~~🤞🤞
    在这里插入图片描述

    🏠个人主页:小威要向诸佬学习呀
    🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
    目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

    💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

    在这里插入图片描述

    以下正文开始

    在这里插入图片描述

    预热模式

    Sentinel的warm up模式是一种流量控制模式,它可以在系统刚启动的时候,通过预热的方式逐步放开限流的限制,让系统逐步达到稳定状态,避免系统启动时因为限流过于严格而导致的性能问题。

    具体来说,Sentinel的warm up模式会在系统启动时,先限制一定的流量,然后逐步放开限制,直到系统达到一个稳定的状态。在逐步放开限制的过程中,Sentinel会根据系统的实际情况,动态调整限制的值,以确保系统的稳定性和性能

    在实际应用中,可以通过以下代码来使用Sentinel的warm up模式:

    public class WarmUpDemo {
        public static void main(String[] args) {
            // 创建一个规则实例
            FlowRule rule = new FlowRule();
            rule.setResource("test");
            rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
            rule.setCount(10);
            rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_WARM_UP);
            rule.setWarmUpPeriodSec(10);
            rule.setMaxQueueingTimeMs(500);
    
            // 加载规则
            List<FlowRule> rules = new ArrayList<>();
            rules.add(rule);
            FlowRuleManager.loadRules(rules);
    
            // 定义资源
            Entry entry = null;
            try {
                entry = SphU.entry("test");
                // 执行业务逻辑
                // ...
            } catch (BlockException e) {
                // 处理限流
                // ...
            } finally {
                if (entry != null) {
                    entry.exit();
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    在上述代码中,我们创建了一个FlowRule实例,将其控制行为设置为CONTROL_BEHAVIOR_WARM_UP,表示使用Sentinel的warm up模式。同时,我们还设置了warmUpPeriodSec参数,表示预热的时间为10秒。在执行业务逻辑时,我们使用SphU.entry方法来获取资源的Entry实例,并在try-catch-finally语句块中处理限流和资源释放的逻辑。

    需要注意的是,使用Sentinel的warm up模式需要根据实际情况调整预热时间和限制的值,以确保系统的稳定性和性能

    在这里插入图片描述

    排队等待模式

    Sentinel的排队等待模式是一种流量控制模式,它可以在流量超出阈值时,将请求放入队列中进行等待,直到系统处理完之前的请求后再进行处理。这种模式可以避免系统因瞬间流量过大而崩溃的情况。

    在Sentinel中,排队等待模式需要配置一个等待队列的大小,当流量超过阈值时,请求就会被放入等待队列中。同时,还需要配置一个等待时间,如果请求在等待队列中等待的时间超过了设定的等待时间,那么请求将会被直接拒绝

    下面是一个使用Sentinel的排队等待模式的代码示例:

    @SentinelResource(value = "test", blockHandler = "handleBlock")
    public String test() {
        // 方法实现
    }
    
    public String handleBlock(BlockException ex) {
        // 处理被拒绝的请求
        return "请求被拒绝,请稍后再试";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在上面的代码中,@SentinelResource注解用于标识该方法需要进行流量控制。blockHandler参数指定了当请求被拒绝时的处理方法。如果使用排队等待模式,那么可以在@SentinelResource注解中添加waitQueuemaxQueueingTimeMs参数来配置等待队列的大小和等待时间:

    @SentinelResource(value = "test", blockHandler = "handleBlock", waitQueue = true, maxQueueingTimeMs = 5000)
    public String test() {
        // 方法实现
    }
    
    • 1
    • 2
    • 3
    • 4

    在上面的代码中,waitQueue参数设置为true表示开启排队等待模式,maxQueueingTimeMs参数设置为5000表示等待时间为5秒。这样,当请求被拒绝时,它就会被放入等待队列中等待处理。如果等待时间超过了5秒,请求将会被直接拒绝。

    热点规则

    Sentinel的热点规则是一种特殊的限流规则,用于对系统中的热点资源进行限流。热点资源是指在系统中访问频率较高或者访问量较大的资源,例如某个接口、某个方法等。如果这些热点资源没有得到有效的限流控制,就容易导致系统崩溃或者性能下降

    Sentinel的热点规则可以通过以下几个方面来进行限流控制:

    1. 参数限流:根据指定的参数进行限流,例如根据某个接口的请求参数进行限流。

    2. URL限流:根据URL进行限流,例如对某个接口的请求URL进行限流。

    3. IP限流:根据IP地址进行限流,例如对某个IP地址的请求进行限流。

    4. 关联流控:根据某个关联的资源进行限流,例如对某个接口的关联接口进行限流。

    Sentinel的热点规则可以通过以下几个参数进行配置:

    1. resource:热点资源的名称,可以是接口名称、方法名称、URL等。

    2. count:限流阈值,表示在一个时间窗口内允许通过的请求次数。

    3. paramIndex:参数索引,表示要进行参数限流的参数在请求中的索引位置。

    4. grade:限流模式,可以是QPS模式或线程数模式。

    5. durationSeconds:时间窗口大小,表示限流的时间窗口大小,单位为秒。

    6. controlBehavior:流控模式,可以是快速失败模式、排队等待模式等。

    7. burstCount:预热时的突发流量,表示在预热阶段允许通过的最大请求次数。

    总的来说,Sentinel的热点规则可以根据业务需求进行灵活配置,有效地对系统中的热点资源进行限流控制,保证系统的稳定性和性能。

    好了,本篇文章就先分享到这里了,后续将会继续介绍sentinel详细的其他方面的知识,感谢大佬认真读完支持咯~
    在这里插入图片描述

    文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
    希望能和诸佬们一起努力,今后我们顶峰相见🍻
    再次感谢各位小伙伴儿们的支持🤞

    在这里插入图片描述

  • 相关阅读:
    【项目部署】网页无法打开,xxx.xxx.xxx.xxx目前无法处理此请求
    以数助实攻坚产业协作 蚂蚁集团数字科技业务亮相云栖大会
    动量轮动与光大RSRS指标在backtrader的实现
    RocketMQ这样做,压测后性能提高30%
    浅谈百思捷国产MES(MOM)产品感悟
    云计算实验(HCL模拟器)
    springboot+rocketmq(5):实现批量消息
    BadTokenException: Unable to add window -- token null is not valid
    eNSP - 基本命令解析
    35+女生离开互联网大厂后变得更有钱更自由了
  • 原文地址:https://blog.csdn.net/qq_53847859/article/details/130566989