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控制台配置了相应的规则我才处理,如果程序内部出现了异常情况,则处理不了。

  如:

  制造程序内部出错

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

生命不止,折腾不息
原文地址:https://www.cnblogs.com/steakliu/p/13771518.html