Sentinel 限流学习

241 阅读3分钟

书接上文springboot 和 sentinel 搭建,我们再来介绍一下 sentinel 中的流控规则

当启动项目后,请求了某一个接口后,就可以在簇点链路中找到对应的接口资源

image.png

对于Sentinel来说比较重要的概念就是资源,我们既可以通过注解的方式指定资源

image.png

也可以不指定,Sentinel默认会将整个簇点中的内容当作资源

在每个资源后面可以指定它的流控规则这就是限流规则,主要内容如下:

image.png

解释其中的字段含义:

  1. 资源名

  2. 针对来源

  3. 阈值类型:QPS指每秒的请求量,并发线程数指同一时间并发可以有多少个线程请求

  4. 单机阈值:单机可以承受最高阈值 QPS 和单机阈值加起来就是指 1s 内单机最高承受多少次请求,如果超过了这个阈值,就会出现失败

  5. 流控模式:

  • 直接:对于某个资源来说,不论是从哪里来的请求,都会被计算在内,例如下面的 UserGetGuideQryExe资源,既可以从/pet/user/get 请求进来,也可以从/pet/user/getGuide请求进来,两个链路所产生的线程数或者 QPS都会被计算

image.png

  • 关联:关联是指该资源和其他资源进行关联,当其他资源请求达到阈值时,本资源就会被限流。这种模式一般出现在读写接口、B/C 端接口,例如,当读请求压力很大的时候,我们希望写请求降级只处理读请求。

image.png

  • 链路:上面的直接模式是不论什么路径请求对于一个资源来说都会被计算,而链路则是指定某个链路的请求才会被计算在内和被降级。

image.png

  1. 流控效果:
  • 快速失败:超过阈值直接报错
  • warm up:冷启动的形式,例如我们规定 QPS 不超过 10,那么冷启动最开始会限制 QPS不超过 2(不一定) 然后逐步将阈值增加到 10,这个预热时间可以指定
  • 排队等待:只超过阈值的请求会被放到一个队列中进行等待,我们可以指定每个请求等待的超时时间(例如指定 500ms),例如我们 QPS 是 10,那么就是每 100ms 处理一个请求,那么同一秒内第 11 个请求来的时候,就会把它放到一个队列中,等待超时时间500ms,如果超过了该时间那么会被拒绝,这种场景一般适用于瞬时大流量,而我们又不想把流量完全拒绝掉可以放到后面慢慢处理的情况。

特殊的限流: 热点参数限流

有时候,我们需要对指定参数的请求进行限流,比如说通过商品 id 查询,只限流某些热点商品,就可以使用热点参数限流。

image.png

在控制台的热点规则里面可以添加指定资源的热点参数限流,指定参数索引,并且指定参数类型 例如像下面这样的,就是第一个参数是 1 的时候阈值是 10,参数是 2 的时候阈值是 20。

image.png