ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 一、何为热点参数限流 何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如: * 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制 * 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制 热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。 ![](https://img.kancloud.cn/be/e7/bee7cf1f3a77011a0675d6e86b7791ef_902x274.png) Sentinel 利用 LRU 策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。 > 举一个大家都知道的例子:娱乐圈的顶流**鹿晗**在新浪微博宣布和关晓彤恋爱,新浪微博几乎瘫痪!如果新浪微博当时有“热点参数限流”的流控机制,这个问题就很好解决,针对“鹿晗”和“关晓彤”配置热点参数限流,就可以解决某个参数流量激增导致的问题,不影响整体业务的运行! ## 二、热点参数接口 我们的代码内有这样一个接口,我们以它为例为大家讲解热点参数限流。这个接口是一个用户所属组织的树形结构查询接口。 ![](https://img.kancloud.cn/43/c6/43c6c815050afaa9e97636847b2f8714_1484x292.png) * username:必填参数,用户名称 * orgNameLike:选填参数,组织名称关键字,用于模糊查询 * orgStatus:选填参数,组织的禁用状态。 ![](https://img.kancloud.cn/84/6e/846e10be7a9e5910446b69f2424c562b_1920x1030.png) ## 三、配置热点参数限流基础规则 * **限流模式**只有QPS模式(这才叫热点)。 * **参数索引**代表@SentinelResource注解的方法参数,0代表第一个参数,1代表第二个参数。 * **单机阀值以及统计窗口时长**表示在此窗口时间超过阀值就限流。 ![](https://img.kancloud.cn/5a/52/5a52ef020be3f12f4ae5097f5be20873_799x252.png) 上面的配置的含义是:针对“/sysodg/tree”资源的第二个参数orgNameLike(参数索引从0开始),1秒钟(统计窗口时长)访问超过1次(单机阈值)就进行限流。 ### 3.1.快速点击测试(携带orgNameLike参数) ~~~ http://127.0.0.1:8401/sysorg/tree?username=admin&orgNameLike=上海 ~~~ 当我们的请求携带了索引下标为1的参数orgNameLike,快算点击postman,超过一秒一次,得到下面的结果: ![](https://img.kancloud.cn/20/a8/20a8d765752e8b736e2a34c4b993b382_320x105.png) ### 3.2.快速点击测试(不携带orgNameLike参数) ~~~ http://127.0.0.1:8401/sysorg/tree?username=admin ~~~ 当我们的请求不携带了索引下标为1的热点参数orgNameLike,快算点击postman,超过一秒一次。不论怎么点击都返回正确的组织机构结果。 ## 四、配置参数例外项目 如果只是上面的基础配置,还达不到针对特定参数值进行限流的作用。为了达到针对参数特定值进行限流的作用,sentinel的热点参数功能提供了例外项目。 ![](https://img.kancloud.cn/4c/e5/4ce57d40a38a1a8d4196610b87dd132e_795x541.png) 注意看参数例外项的配置,上图配置的含义就是 * 针对“/sysodg/tree”资源的第二个参数orgNameLike(参数索引从0开始),1秒钟(统计窗口时长)访问超过1次(单机阈值)就进行限流。 * 但是当参数orgNameLike的值为北京的时候,限流单机阈值是5。 > 就好像所有人在微博的热度限流为每秒1000次,鹿晗流量大给他分配每秒10000流量。这就是极限了,不能再大了!再大系统就扛不住了!就是这个意思!