SpringCloud Alibaba学习(八):Sentinel的热点规则

简介: 热点即经常访问的数据,很多时候我们希望统计或者限制某个热点数据中访问频次最高的TopN数据,并对其访问进行限流或者其它操作 。

如果不知道如何配置sentinel或者不知道如何打开文章中的一些网页,可以参考我前面的文章:     SpringCloud Alibaba学习(五):Sentinel的介绍与搭建

一、热点是什么



热点即经常访问的数据,很多时候我们希望统计或者限制某个热点数据中访问频次最高的TopN数据,并对其访问进行限流或者其它操作 。


官网:        

https://github.com/alibaba/Sentinel/wiki/%E7%83%AD%E7%82%B9%E5%8F%82%E6%95%B0%E9%99%90%E6%B5%81


二、配置方法



1、sentinel dashboard中

e13af92502f14930b9c02322eda57dae.png


2、8401的controller中:

               

@SentinelResource注解在下一篇文章中会讲到,这里可以把它理解为@HystrixCommand,参考文章:SpringCloud学习(十四):Hystrix的服务熔断实现


@GetMapping("/testHotKey")
    @SentinelResource(value = "testHotKey", blockHandler = "deal_testHotKey")     //blockHandler指定兜底方法
                                                                                // value可以写任意值,一般和rest路径保持一致
    public String testHotKey(@RequestParam(value = "p1", required = false) String p1,
                             @RequestParam(value = "p2", required = false) String p2){
        return "------testHotKey";
    }
    public String deal_testHotKey(String p1, String p2, BlockException exception){
        return "------deal_testHotKey";
    }


三、测试


       

浏览器访问testHotKey,只要带上参数p1,在一秒内访问两次以上,就会限流。

839bc724365b460b95cc99a2009d0527.png


而将代码中的blockHandler去掉后,在一秒内访问两次以上,会直接报错 。这样将异常显示到了用户界面,不够友好。


四、结论


e788577afefa4bf2981fb1d754738acb.png


限流模式只支持QPS模式,也只有QPS模式下才叫热点。


配置的参数索引是@SentinelResource注解的方法参数索引,0代表第一个参数,1代表第二个参数,以此类推;


单机阀值以及统计窗口时长表示在此窗口时间超过阀值就限流。


上例中,我们将参数索引指定为0,所以当访问路径带上第一个参数p1时,在一秒(统计窗口时长)内访问超过一次(单机阈值)就可能发生限流。


限流时会调用我们配置的blockHandler中的方法,给用户返回一个较为友好的提示,而不是报错的界面。


五、参数例外项



1、是什么

     

在上例中,如果我们访问带上参数p1,则一秒访问超过一次会被限流。那么,假如我们期望当p1参数是某个特殊值时,它的限流值和平时不一样,这时该如何配置呢?


2、配置方法

     

当p1参数为5时,限流阈值为200。

81408ac5dc744e93a0d3872e08188222.png


3、测试

     

如果访问时p1的值不为5,那么一秒内超过一次就会限流;而如果p1=5,则狂点鼠标也不会限流(达不到每秒200次访问,不知道有没有大佬的手能达到)。


六、注意



@SentinelResource    处理的是Sentinel控制台配置的违规情况,有blockHandler方法配置的兜底处理;而像RuntimeException这样的异常(比如int age = 10/0)是java运行时报出的运行时异常,@SentinelResource并不处理。


那么如果报出了这样的异常该怎么处理能够让用户体验更为友好呢?这就是我们后面要说到的内容。


相关文章
Sentinel学习圣经:从入门到精通 Sentinel,最全详解 (40+图文全面总结)
尼恩给大家做一下系统化、体系化的梳理,联合社群小伙伴,来一个Sentinel学习圣经:从入门到精通Sentinel。
|
监控 算法 Java
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
284 0
|
Java 数据安全/隐私保护 Sentinel
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
|
SpringCloudAlibaba 监控 Java
SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)
SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)
|
SQL SpringCloudAlibaba Sentinel
【八】SpringCloud Alibaba之整合Sentinel(实现流量控制3)
【八】SpringCloud Alibaba之整合Sentinel(实现流量控制3)
206 2
|
SpringCloudAlibaba Sentinel 索引
【九】SpringCloud Alibaba之整合Sentinel(实现热点控制)
【九】SpringCloud Alibaba之整合Sentinel(实现热点控制)
221 1
|
Java API Nacos
第十二章 Spring Cloud Alibaba Sentinel
第十二章 Spring Cloud Alibaba Sentinel
1296 0
|
Java Nacos Sentinel
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
2240 0
|
SpringCloudAlibaba 监控 Java
SpringCloud Alibaba Sentinel实现熔断与限流--学习笔记
SpringCloud Alibaba Sentinel实现熔断与限流--学习笔记
272 0
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
299 1