精华内容
下载资源
问答
  • sentinel热点参数限流

    2021-01-01 12:11:03
    官方地址:https://github.com/alibaba/Sentinel/wiki/热点参数限流 前言 何为热点?热点即经常访问的数据。...那Sentinel是怎么进行热点参数限流的呢? 热点参数 我们先对代码进行一些改造,在控制器...

    官方地址:https://github.com/alibaba/Sentinel/wiki/热点参数限流

     

    前言

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

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

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

    那Sentinel是怎么进行热点参数限流的呢?

    热点参数

     

     

    我们先对代码进行一些改造,在控制器增加个方法

    我们增加了testHot方法,并在此方法上面增加了注解@SentinelResource;对于 @SentinelResource 注解方式定义的资源,若注解作用的方法上有参数,Sentinel 会将它们作为参数传入 SphU.entry(res, args)。

    比如上面的方法里面 a 和 b 会分别作为第一个和第二个参数传入 Sentinel API,从而可以用于热点规则判断。

    请求接口

    http://localhost/test-hot?a=1&b=2

    在Sentinel控制台簇点链路里面多了个hot资源名

    热点规则

     

     

    我们来设置一下hot的热点规则

    image

    限流模式只有QPS模式(这才叫热点)。

    参数索引代表@SentinelResource注解的方法参数,0代表第一个参数,1代表第二个参数。

    单机阀值以及统计窗口时长表示在此窗口时间超过阀值就限流。

     

     

     

    上图的含义就是第一个参数有值的话,1秒的QPS为1,超过就限流

    上面请求/test-hot是带上了第一个参数a,触发了热点限流

    上面请求/test-hot带上了第二个参数b,没有第一个参数a,不触发热点限流

    特定参数

    上文中我们配置了针对参数索引的热点限流,有时候我们需要对参数的值做一些特殊的规格;如:上文表示了请求地址如果有参数a,就触发热点限流QPS为1。

    但有业务需要参数a=5时,QPS要放大(即业务需要a=5时,阀值调大点,如:100);应用的场景某些秒杀商品,分配给他们大点的QPS。那怎么设置?

     

     

    Sentinel控制台要在热点规则那边,点击编辑按钮

    参数例外项:上图配置的含义就是hot资源名配置了第一个参数进行热点限流,阀值为1;但第一参数值为5时,限流阀值变为100。

    注意参数的类型要跟方法中的参数一致

    测试验证了参数值为5时,阀值变大了。

    适用场景

    热点参数其实说白了就是特殊的流控,流控设置是针对整个请求的;但是热点参数他可以设置到具体哪个参数,甚至参数针对的值,这样更灵活的进行流控管理。

    一般应用在某些特殊资源的特殊处理,如:某些商品流量大,其他商品流量很正常,就可以利用热点参数限流的方案。

    注意点

    热点参数的注意点,参数必须是基本类型或者String

    也就是方法体上面的参数必须为基本类型或String

    总结

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

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



    作者:享学课堂
    链接:https://www.jianshu.com/p/e35cf20ddfda
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • 热点参数限流 何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如: 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制 用户 ID...

    热点参数限流

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

    • 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
    • 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制
      热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
      根据上述的解释,我们知道热点参数限流的主要目的是根据请求资源进行更加细粒化的限流。

    实例分析

    在这里插入图片描述
    热点参数分为两部分设计

    • 热点规则
    • 参数例外项
      从名字中不难理解这些参数的意思。
      对应的代码如下:
        @GetMapping("/testHotKey")
        @SentinelResource(value = "testHotKey",blockHandler = "deal_testHotKey")
        public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
                                 @RequestParam(value = "p2", required = false) String p2) {
            return "-------testHotKey";
        }
    
        public String deal_testHotKey(String p1, String p2,
                                 BlockException exception){
            return "----deal_testHotKey,o(╥﹏╥)o";
    
        }
    

    设置完成中,在进行测试的会发现,参数1 p1会被限流,参数2不会被限流,需要注意的是参数例外性只支持8大基本数据类型。

    展开全文
  • Sentinel热点参数限流 何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如: 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行...

    Sentinel热点参数限流

    在这里插入图片描述

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

    • 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
    • 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制

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

    示例

    //热点限流
        @GetMapping("/testHotKey")
        @SentinelResource(value = "testHotKey", blockHandler = "deal_testHotKey")
        public String testHotKey(@RequestParam(value = "p1", required = false) String p1,
                                 @RequestParam(value = "p2", required = false) String p2) {
            return "*****testHotKey";
        }
        
        public String deal_testHotKey (String p1, String p2, BlockException exception) {
            return "****deal_testHotKey";
        } 
    

    配置:索引为第0个的参数(p1)阈值为1
    在这里插入图片描述

    • 携带p1参数快速多次访问:
      在这里插入图片描述
      超过1秒一次的限制,触发blockHandler方法。

    • 携带p2参数快速访问多次:
      在这里插入图片描述
      一切正常。

    • 同时携带p1和p2参数快速访问:
      在这里插入图片描述
      触发blockHandler方法。

    参数例外项

    在这里插入图片描述

    上述案例在访问超过1秒1个后马上被限流。但是,我们希望p1参数当它时某个特殊值时,它的限流值和平时不一样。

    比如:当p1=5时,它的阈值可以达到200;其它值仍然为1

    在这里插入图片描述

    • 携带p1=5快速多次访问:正常
      在这里插入图片描述

    • 携带p1=3快速多次访问:触发blockHandler方法
      在这里插入图片描述

    注意:

    • @SentinelResource处理的是Sentinel控制台配置的违规情况,有blockHandler方法配置的兜底处理;
    • 如果逻辑代码中出现其它RuntimeException,@SentinelResource是不管的。
    展开全文
  • 热点参数限流并非在 Sentinel 的 core 模块中实现的,而是在扩展模块中实现的。主要是根据同一资源不同的参数进行限流。 之前的限流策略都是针对资源维度的,热点参数限流则将维度细化到资源的某个参数上。 热点...

    热点参数限流并非在 Sentinel 的 core 模块中实现的,而是在扩展模块中实现的。主要是根据同一资源不同的参数进行限流。

    之前的限流策略都是针对资源维度的,热点参数限流则将维度细化到资源的某个参数上。

    热点参数限流统计指标及获取指标的方式与FlowSlot等不同,使用ParamMapBucket来统计数据,使用HotParameterLeapArray来实现滑动窗口。

    初始化规则

    public static void initParamFlowRule(){
        List<ParamFlowRule> rules = new ArrayList<>();
        ParamFlowRule rule = new ParamFlowRule();
        //阈值类型:只支持QPS
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        //阈值
        rule.setCount(1);
        //资源名
        rule.setResource("test");
        rule.setParamIdx(0);//指配热点参数的下标
        //统计窗口时间长度
        rule.setDurationInSec(10);
    
        List<ParamFlowItem> items = new ArrayList<>();
        ParamFlowItem item = new ParamFlowItem();
        item.setClassType(String.class.getTypeName());
        item.setCount(2);
        item.setObject("123456");//需要统计的值
    
        ParamFlowItem item1 = new ParamFlowItem();
        item1.setClassType(int.class.getName());
        item1.setCount(3);
        item1.setObject("12");
    
        items.add(item);
        items.add(item1);
        rule.setParamFlowItemList(items);
        rules.add(rule);
        ParamFlowRuleManager.loadRules(rules);
    }
    

    常规参数的阀值为1,针对热点参数的阀值为2或3.

    热点参数限流的坑

    热点参数限流使用 ParameterMetric 与 ParameterMetricStorage,对性能有了一定的优化,但对性能的影响和对内存的占用与参数的取值有多少种可能成正比,限流参数的取值可能性越多,占用的内存就越大,对性能的影响也就越大,在使用热点参数限流功能时,一定要考虑参数的取值。

    例如,根据商品 ID 限流,如果有十万个商品下单,那么 CacheMap 将会存在十万个 key-value,并且不会被移除,随着进程运行的时长而增长。如果限流阈值类型选择为 THREAD 则不会存在这个问题,因为在 ParamFlowStatisticExitCallback 方法会调用 ParameterMetric#decreaseThreadCount 方法扣减参数值占用的线程数,当线程数为零时,会将当前参数值对应的 key-value 从 CacheMap 中移除。

    当参数的取值范围很广时,使用热点参数限流一定要谨慎,避免map中存在的对象过多,导致OOM

    参考: https://blog.csdn.net/ooyhao/article/details/102746118

    展开全文
  • 官网地址:https://github.com/alibaba/Sentinel/wiki/热点参数限流 ... 何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制...热点参数限流会统计传入
  • 一、简介 ...热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
  • 热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。 Sentinel 利用
  • 热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如: 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行...热点参数限流可以看做是一种特殊的...
  • 转载自热点参数限流 Overview 何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如: 商品 ID 为参数,统计一段时间内最常购买的商品 ID ...
  • 热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。 热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。 Sentinel 利用 LRU...
  • Sentinel规则之热点参数限流规则

    千次阅读 2019-10-25 16:53:07
    Sentinel规则之热点参数限流规则 文档: https://github.com/alibaba/Sentinel/wiki/%E7%83%AD%E7%82%B9%E5%8F%82%E6%95%B0%E9%99%90%E6%B5%81 概述 何为热点?热点即经常访问的数据。很多时候我们希望统计某个...
  • 享学课堂特邀作者:老顾 转载请声明出处!...那Sentinel是怎么进行热点参数限流的呢? 热点参数 我们先对代码进行一些改造,在控制器增加个方法 我们增加了testHot方法,并在此方法上面增加了注解@SentinelReso.
  • 本篇博客主要是对Sentinel 热点参数限流进行实战练习,通过编写博客除了提高自己的技术掌握情况,主要是能帮助需要帮助的人。
  • 热点参数限流二. 热点规则配置2.1 8401项目新增方法2.2 Sentinel配置热点规则2.3 测试2.4 热点规则高级配置三. 系统规则3.1 参数列表四. SentinelResource配置4.1 8401项目新增依赖4.2 新增Controller ...
  • 热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。 Sentinel 利用 LRU ...
  • 热点参数限流案例4.热点限流-参数例外项5.总结 1.引言 何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如: 商品ID为参数,统计一段时间内...
  • Sentinel 是阿里中间件团队开源的,面向分布式...作为一个重要的里程碑版本,Sentinel 0.2.0 释放了多项产品新特性,如 异步调用支持、热点参数限流 等,并包括了大量的体验优化与 bug 修复。下面我们来看一下 Sen...
  • 文章目录1、何为热点2、基本使用13、基本使用2 1、何为热点 热点就是经常访问的数据,我们通常...@SentinelResource注解的作用是对热点数据进行限流,一般是某个参数的访问量违背了控制台设置的阈值,开始对其进行.
  • 二、热点参数限流介绍与配置 热点参数限流为,当一个接口中其中一个查询参数使用较高的情况下,可以针对该参数对该接口进行限流,比如查询人员列表时,人名的查询条件筛选的调用比较高,则可以对包含人名筛选的请求...
  • 比如: 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制 热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含...
  • 文章目录一。介绍1.是什么?2.基本使用二。实现过程1.代码2.基础配置3.... 一。...何为热点热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问...商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,385
精华内容 7,354
关键字:

热点参数限流