• 海布里王力宏
    2022-02-05
    “第二种流控效果 Warm Up 则实现了“预热模式的流控效果”,这种方式可以平缓拉高系统水位,避免突发流量对当前处于低水位的系统的可用性造成破坏。举个例子,如果我们设置的系统阈值是 QPS=10,预热时间 =5,那么 Sentinel 会在这 5 秒的预热时间内,将限流阈值从 3 缓慢拉高到 10。为什么起始阈值是 3 呢?因为 Sentinel 内部有一个冷加载因子,它的值是 3,在预热模式下,起始阈值的计算公式是单机阈值 / 冷加载因子,也就是 10/3=3。我截了一张图,你可以参考一下,看看 Warm Up 配置项是如何填写的。” 新年快乐,对预热还是不理解,如果设置了预热,是不是意味着QPS达到阈值的时候,会降为1/3的QPS,然后再拉升。还是这个预热只是针对系统的启动阶段?

    作者回复: 同学理解的没错,预热其实就是给系统一段慢慢热身的时间段,不过发生阶段并非是在系统启动的时候,而是在系统长期处于低水位运行下突然接到大并发访问量的时候。

    
    3
  • wake
    2022-01-21
    配置应该是: spring: cloud: sentinel: transport: # sentinel api端口,默认8719 port: 8719 # dashboard地址 dashboard: localhost:8080

    作者回复: 多谢同学提醒,copy的时候删错了一行

    共 2 条评论
    1
  • Dean
    2023-06-09 来自湖北
    老师好,想咨询一下熔断限流的阈值如何确定具体的值,是拍脑袋想的吗?还是有一定的策略去定义

    作者回复: 咱也不藏着掖着了,没错,一开始确实是拍脑袋哈,但会在业务过程中逐渐对这个值进行调整。 打个比方,像阿里双11之类的大项目会有一个“稳定性团队”,专门搞大促全链路压测之类的,在这个过程里,就可以观察到不同流量下系统的表现情况,结合压测报告对每个环节的服务进行熔断限流方案的微调

    
    
  • Believe
    2023-05-18 来自四川
    关联流控规则不得行,也不报错,在直接流控规则生效的前提下,直接修改为关联流控,添加关联资源都不行

    作者回复: 这个就需要分析sentinel的运行日志了,同学把log级别调低,抓一个留控请求跟一下日志。 还有一个更彻底的方法,本地启动sentinel开启debug端口,拉对应版本源码用remote debug方式去跟一个请求,能彻查具体哪个步骤问题的同时,还能了解一下底层逻辑。

    
    
  • 王志成
    2022-11-11 来自北京
    我在coupon-calculation-serv 项目中集成Sentinel 的时候,报了Could not bind properties to 'SentinelProperties' 。 说是 让我Add an implementation, such as Hibernate Validator, to the classpah 为什么 Sentinel 会需要添加 Hibernate 呢,客户端在使用 Sentinel还需要持久化数据吗?

    作者回复: 同学有没有往项目里添加示例代码以外的依赖项呢?这个error也有可能是依赖冲突。建议先用gitee上的原样代码去执行一下,如果可以顺利启动,那么再打印dependency tree,看下是否有依赖项的版本不同或者额外dependency加入到了项目中

    
    
  • Ronnie
    2022-08-29 来自上海
    热点规则配置怎么存储呢,比如用户id=1的限流20,用户id=2的限流30,这些配置不可能一个一个去控制台配置吧

    作者回复: Sentinel的热点规则是入门版,现实场景里更多的挑战来自于不可提前预测的热点,比如重磅微博之类,比较常见的做法是用stream技术,汇总分析链路/网关流量特征,对热点做实时打标之后,运行期创建热点限流规则

    
    
  • next station
    2022-06-22
    姚老师,请教个问题:流控规则--链路流控,无效;也百度了一下,配置spring.cloud.sentinel.web-context-unify=false无效。麻烦老师指导一下 代码如下: ``` // 读取优惠券 @GetMapping("/getTemplate") // @SentinelResource(value = "getTemplate") public CouponTemplateInfo getTemplate(@RequestParam("id") Long id){ log.info("Load template, id={}", id); return couponTemplateService.loadTemplateInfo(id); } @GetMapping("/getTemplate1") // @SentinelResource(value = "getTemplate1") public CouponTemplateInfo getTemplate1(@RequestParam("id") Long id){ log.info("Load template, id={}", id); return couponTemplateService.loadTemplateInfo(id); } 资源 public interface CouponTemplateService { // 通过模板ID查询优惠券模板 @SentinelResource(value = "loadTemplateInfo") CouponTemplateInfo loadTemplateInfo(Long id); } ```
    展开

    作者回复: 同学在页面上配置的链路流控策略也截图看一下,我猜想应该是参数的“入口资源”没有指定对,导致sentinel没有识别到上游流量入口

    
    
  • 勤奋的樂
    2022-05-06
    请问添加流控规则,sentinel控制台直接弹窗显示失败,报错日志如下,是什么原因呢? 2022-05-06 15:37:21.357 ERROR 61049 --- [nio-8081-exec-1] c.a.c.s.d.controller.FlowControllerV1 : Failed to add new flow rule, app=coupon-template-serv, ip=localhost com.alibaba.csp.sentinel.dashboard.client.CommandFailedException: 2022-05-06 15:37:22.724 ERROR 61049 --- [Worker-thread-6] c.a.c.s.dashboard.metric.MetricFetcher : fetch metric http://localhost:8081:8719/metric?startTime=1651822634000&endTime=1651822640000&refetch=false error org.apache.http.client.ClientProtocolException: URI does not specify a valid host name: http://localhost:8081:8719/metric?startTime=1651822634000&endTime=1651822640000&refetch=false at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.determineTarget(CloseableHttpAsyncClient.java:121) [httpasyncclient-4.1.3.jar!/:4.1.3] at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:102) [httpasyncclient-4.1.3.jar!/:4.1.3] at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:92) [httpasyncclient-4.1.3.jar!/:4.1.3] at com.alibaba.csp.sentinel.dashboard.metric.MetricFetcher.fetchOnce(MetricFetcher.java:214) [classes!/:na] at com.alibaba.csp.sentinel.dashboard.metric.MetricFetcher.lambda$doFetchAppMetric$3(MetricFetcher.java:282) [classes!/:na] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_312] at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_312] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_312] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_312] at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_312]
    展开

    作者回复: ClientProtocolException是一个通用错误,在很多项目里都会碰到,通常是在url里没有指定protocol (比如http, https)导致的

    
    
  • Geek_e93c48
    2022-02-21
    姚老师请教个问题,Sentinel限流的排队模式下,会将所有QOS都排队吗?还是只是创建一个固定大小的队列存储固定的QPS,超过部分直接抛弃。

    作者回复: 队列是有超时时间的,可以在控制台设置,其实很像我们用MQ时候设置TTL,如果队列中的请求留存时间超出设置,那么就会被限流掉

    
    
  • 蝴蝶
    2022-01-22
    现在天天加班,没法学实践,我先看完

    作者回复: 马总语录这样说(PUA)道:加班是应该的,不加班也是应该的,只有完不成工作是不应该的

    共 2 条评论
    