57、Sentinel流控——QPS直接失败、线程数直接失败、关联、预热、排队等待

QPS直接失败

新增控制流程

image.png

选择QPS,单机阀值可以选择小一点便于测试
流控模式设置直接,流控效果设置快速失败
新增后,访问:http://localhost:8401/testA
快速点击访问,模拟提高并发
image.png

显示Blocked by Sentinel (flow limiting)
这就是QPS直接失败
qps:每秒钟的请求数量,当调用该api的qps达到阀值的时候,进行限流

线程数直接失败

image.png

线程直接失败的配置和QPS直接失败的配置很像,但是同一时间线程数达到阈值后直接失败*

关联

流控模式:
- 直接:api达到限流条件时,直接限流
- 关联:当关联的资源达到阈值时,就限流自己
- 链路:只记录指定链路上的流量(指定资源从欠口资源进来的流量,如果达到阈值,就进行限流)【api级别的针对来源】

image.png

当关联的资源达到阈值时,就限流自己
当与A关联的资源B达到阀值后,就限流A自己
B惹事,A挂了

预热

案例,阀值为10+预热时长设置5秒。
系统初始化的阀值为10/3约等于3,即阀值刚开始为3;然后过了5秒后阀值才慢慢升高恢复到10
默认coldFactor为3,即请求QPS从(threshold /3)开始,经多少预热时长才逐渐升至设定的QPS阈值。

image.png

如:秒杀系统在开启的瞬间,会有很多流量上来,很有可能把系统打死,预热方式就是把为了保护系统,可慢慢的把流量放进来,
慢慢的把阀值增长到设置的阀值.

排队等待

匀速排队,让请求以均匀的速度通过,阀值类型必须设成QPS,否则无效。
设置含义:/testA每秒1次请求,超过的话就排队等待,等待的超时时间为20000毫秒。

image.png

匀速排队( RuleConstant.CONTROL_BEHAVIOR_RATE_INITER)方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。详细文档可以参考流量控制-匀速器模式,具体的例子可以参见PaceFlowDemo。
这种方式主要用于处理间隔性突发的流量,例如消息队列。想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请而不具在笛—孙百接拓的多全的害求

image.png

FlowLimitController.java

@RestController
@Slf4j
public class FlowLimitController
{
    @GetMapping("/testA")
    public String testA() {
        return "------testA";
    }

    @GetMapping("/testB")
    public String testB() {
        log.info(Thread.currentThread().getName()+"\t"+"...testB");
        return "------testB";
    }
}

这样的好处就是无论碰到什么情况都可以让线程排队等待

image.png

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容