Sentinel | 热点规则 | 系统规则

热点

  • 热点就是经常访问的数据;
  • 比如商品接口的 QPS 限定的是 100,有一天要秒杀,带着秒杀商品 id 的请求的 QPS 限制在 50,这样还能有 50 的 QPS 用来访问其他的商品;
  • 这就提出了一个去求,要能根据请求的参数来做限流,比如请求带的参数是热点参数,就对这个请求应用特殊的限流规则;对携带非热点参数的请求,走另一个限流规则;

Sentinel 实现根据参数指定不同的限流规则(热点规则)

将商品查看接口看做成一个 @SentinelResource

@GetMapping("/{id}")
@SentinelResource(value = "getOrder")
public OrderInfo getInfo(@PathVariable Long id, @AuthenticationPrincipal String username) {
    log.info("user name " + username);
    log.info("orderId is " + id);

    OrderInfo info = new OrderInfo();
    info.setId(id);
    info.setProductId(id * 5);

    return info;
}

在 sentinel-dashboard 中添加热点规则

  • 资源名(getOrder):@SentinelResource(value = "getOrder") 中的 value 值;
  • 参数索引(0):针对第 0 个参数;
  • 参数类型(long):索引位置是 0 的参数的类型是 long;
  • 参数值(1):如果其值是 1;
  • 限流阈值(1):允许的 QPS 就是 1;
  • 单机阈值(10):不是 1 的情况下,允许的 QPS 就是 10;
  • 统计时间窗口(1):统计的时间单位,一般都是 1s;

配完了之后,对于被 @SentinelResource(value = "getOrder") 标注的接口,如果参数 id 带的值是 1,那么允许它的 QPS 就是 1;对于 id 值是其他的值的请求,允许其 QPS 就是 10;

系统规则

  • 系统规则和热点规则不一样,热点规则是针对方法设定的,系统规则是针对一个应用设定的;

系统规则的 5 中预置类型

  • LOAD:只有在 Linux 系统的机器上才会生效,可以根据当前操作系统的负载,来决定是否触发保护(把请求拒绝掉);
  • RT:这个应用上,所有请求的平均响应时间,如果超过某个值,就停止新的请求;
  • 线程数:这个应用上,所有的请求消耗的线程数加起来,如果超过某个值,就停止新的请求;
  • 入口 QPS:这个应用上,所有接口的 QPS 加起来,如果超过某个值,就停止新的请求;
  • CPU 使用率:CPU 的使用率,如果超过一个百分比,就停止新的请求;

发生系统规则中配置的情况的时候,会把整个应用都断掉,所有的接口对不能对外提供服务了,这个设计很少用,因为粒度太大了,用 Sentinel 一般都是做细粒度的维护,如果设置了系统规则,可能自己都不知道怎么回事,系统就用不了了;



作者:乌鲁木齐001号程序员
链接:https://www.jianshu.com/p/051d3fda8a35
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值