• SpringCloud Alibaba系列(三) Sentinel热点参数限流


    愿你生命中有够多的云翳,造就一个美好的黄昏 

     

    欢迎关注公众号【渣男小四】,一个喜欢技术更喜欢艺术的青年



    一.介绍

      热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:

        商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制

        用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制

        热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。

      Sentinel 利用 LRU 策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。

    二.简单使用

      例子:我们需要对携带参数为h1的请求进行限流,带有h1参数的是热点商品,不过过于频繁的访问。

      代码

        商品查询接口

      查询过于频繁进行限流的兜底方法,兜底方法需要在上面query接口用blockHandler指定,如果query接口没有用blockHandler指定,则会返回异常界面,对于前端来说不友好

      配置热点key

       资源名为@SentinelResource(value = "query")中value值参数索引从0开始,如果第一个参数是h1,则遵守响应的热点规则,单机阈值为1,代表一秒钟只能处理一个请求,否则进行限流

      测试

      1.一秒钟只发送一次请求

      2.一秒钟多次请求

      参数例外项

       上面我们只要带了h1参数,不管h1的值是什么,违反了热点规则,都将会限流,但是有些情况我们希望参数的值为某个值时,限流规则不同,也就是说如果h1的值如果为big,我们希望他的QPS能够达到200。

      

      配置参数例外项

      配置过后,如果h1的值为big,则QPS就能达到200

      注意:@SentinelResource只处理Sentinel控制台所配置的异常,而不处理程序的内部错误情况,也就是说在Sentinel控制台配置了相应的规则我才处理,如果程序内部出现了异常情况,则处理不了。

      如:

      制造程序内部出错

      结果:无法走热点规则,而是直接报错。

    生命不止,折腾不息
  • 相关阅读:
    selenium 难定位元素、时间插件
    列表生成式
    三元表达式
    监控日志
    非空即真
    深拷贝浅拷贝
    元组
    list字典嵌套
    2021
    布尔类型
  • 原文地址:https://www.cnblogs.com/steakliu/p/13771518.html
Copyright © 2020-2023  润新知