Sentinel流控规则-关联,链路,预热,排队等待

431 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

1 Sentinel流控规则-关联

当关联的资源达到阈值时,就限流自己

设置有逻辑关系的两个模块,当其中一个达到阈值之后,限流另一个。换到程序里面来说比如一个电商系统中,支付系统达到阈值,就限流下订单系统。

image.png

设置如下:

image.png

2 Sentinel流控规则-链路

链路流控模式指的是,当从某个接口过来的资源达到限流条件时,开启限流,它的功能有点类似于针对来源配置项,区别在于:针对来源是针对上级微服务,而链路流控是针对上级接口,也就是说它的粒度更细。

比如在一个微服务中,两个接口都调用了同一个Service中的方法,并且该方法用SentinelResource(用于定义资源)注解标注了,然后对该注解标注的资源(方法)进行配置,则可以选择链路模式。

比如这里的testA和testB都调用了common方法,当common方法加注解SentinelResource时。

public class TestService {
    // 定义限流资源
    @SentinelResource("common")
    public String common(){
        return "common";
    }
}

此时若是给common方法配置 image.png

image.png

则当common的方法调用超过阈值的时候,则testB方法的访问会被限流。但testA不受影响。

3 Sentinel流控效果-预热

Warm Up方式,即预热/冷启动方式。该方式主要用于系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮的情况。

预热公式:阈值/coldFactor(默认值为3),经过预热时间后才会达到阈值。

image.png

一般在秒杀中常用,防止突然而来的大流量冲垮系统。

4 Sentinel流控效果-排队等待

匀速排队方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。

以固定的间隔时间让请求通过。当请求到来的时候,如果当前请求距离上个通过的请求通过的时间间隔不小于预设值,则让当前请求通过。否则,计算当前请求的预期通过时间,如果该请求的预期通过时间小于规则预设的 timeout 时间,则该请求会等待直到预设时间到来通过(排队等待处理);若预期的通过时间超出最大排队时长,则直接拒接这个请求。

Sentinel 匀速排队等待策略是漏桶算法结合虚拟队列等待机制实现的。

注意:匀速排队模式暂时不支持 QPS > 1000 的场景。

image.png