前置条件
依赖
<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>
-
热点配置界面
-
参数说明
参数索引:接口的第几个参数
统计时间:统计多长时间的数据
参数类型:指定接口索引参数的类型,目前支持基本类型。
参数值:接口索引参数的值
限流阈值:当索引参数的值为指定值是,接口QPS阈值是多少
-
热点限流演示
-
热点配置
-
jmeter配置
-
结果
可以看到当id为1时,基本5个请求只能成功一个。说明是按照单机阈值来限流的。
-
修改jmeter配置
-
结果
可以看到请求全部成功了,说明我们的热点限流配置起效果了。
-
-
总结
-
热点限流粒度区分到了具体参数
-
热点限流仅支持QPS模式
-
热点参数例外项参数类型支持七种基本类型
-