Sentinel之热点

77 阅读2分钟
前置条件

依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

配置yml

server:
  port: 10001
spring:
  application:
    name: cloud-consumer-feign
  cloud:
    nacos:
      discovery:
        namespace: public
        server-addr: localhost:8848
    //[0]    
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719
  • [0]处 为配置sentinel,dashboard时sentinel后台管理页面地址,port为sentinel api 端口
热点

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

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

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

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

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

使用热点参数限流功能,必须加入以下依赖:

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-parameter-flow-control</artifactId>
</dependency>
  • 热点配置界面

    image-20220826164233039

  • 参数说明

    参数索引:接口的第几个参数

    统计时间:统计多长时间的数据

    参数类型:指定接口索引参数的类型,目前支持基本类型。

    参数值:接口索引参数的值

    限流阈值:当索引参数的值为指定值是,接口QPS阈值是多少

  • 热点限流演示

    • 热点配置

      image-20220826164243703

    • jmeter配置

      image-20220826164252445

    • 结果

      image-20220826164302452

      可以看到当id为1时,基本5个请求只能成功一个。说明是按照单机阈值来限流的。

    • 修改jmeter配置

      image-20220826164330336

    • 结果

      image-20220826164336227

      可以看到请求全部成功了,说明我们的热点限流配置起效果了。

  • 总结

    • 热点限流粒度区分到了具体参数

    • 热点限流仅支持QPS模式

    • 热点参数例外项参数类型支持七种基本类型

      image-20220826164357347