流量控制规则说明

2020-11-19 11:34:34 浏览数 (1)

前言

本文梳理单机流控涉及的相关规则,集群流控另文梳理。

一、阈值类型

属性

说明

QPS

通过比较时间窗口的QPS与设置的阈值,进行流控的一种类型

线程数

通过比较时间窗口的线程数与设置的阈值,进行流控的一种类型

三、流控模式

流控模式,即针对什么样的资源依赖关系进行流控,具体类型如下:

属性

说明

直接

含义:针对调用来源的限流调用来源:由ContextUtil.enter(resourceName, origin)方法中的origin设置 针对来源:由字段limitApp设置,取值如下:default:表示不区分调用者,流量统计来自context.getOriginNode。{some_origin_name}:表示针对特定的调用者,流量统计来自于node.getClusterNode。other:表示针对除 {some_origin_name} 以外的其余调用方的流量进行流量控context.getOriginNode。

关联

含义:针对两个依赖或者竞争的资源的限流

链路

含义:针对调用入口的限流 入口资源通过ContextUtil.enter(name)来设置

四、流控效果

流控效果即对发生流控后结果的处理,类型如下表:

属性

说明

快速失败

发生流控时抛出FlowException

Warm Up

预热模式,又为冷启动,指避免流量突然进来将系统压垮,使流量缓慢增加的一种模式。预热时长:用户自定义设置

排队等待

即匀速器,使用漏桶算法使得请求匀速通过。超时时间:由用户自定义设置

五、参数说明

流量规则由FlowRule设置,集群模式相关配置在集群流控规则中说明,字段含义如下:

属性

说明

resource

资源名称

limitApp

限制的调用来源

grade

阈值类型,默认0(0:线程数,1:QPS)

count

阈值,用户设置

strategy

流控模式,默认0。0:直接 1:关联 2:链路

refResource

当strategy为关联时,设置关联的资源

controlBehavior

流控效果,默认0。0:快速失败 1:预热模式 2:排队等待 3:预热 排队等待

warmUpPeriodSec

当controlBehavior=1时,预热时长,单位秒,默认10

maxQueueingTimeMs

当controlBehavior=2时,超时时间,单位毫秒,默认500毫秒

clusterMode

是否为集群模式,默认false

六、规则示例

代码语言:javascript复制
[
    {
        "clusterConfig": {
            "fallbackToLocalWhenFail": true,
            "flowId": 81,
            "sampleCount": 10,
            "strategy": 0,
            "thresholdType": 1,
            "windowIntervalMs": 1000
        },
        "clusterMode": true,
        "controlBehavior": 0,
        "count": 3000,
        "grade": 1,
        "limitApp": "default",
        "maxQueueingTimeMs": 500,
        "resource": "flowDemo04",
        "strategy": 0,
        "warmUpPeriodSec": 10
    },
    {
        "clusterConfig": {
            "fallbackToLocalWhenFail": true,
            "flowId": 82,
            "sampleCount": 10,
            "strategy": 0,
            "thresholdType": 0,
            "windowIntervalMs": 1000
        },
        "clusterMode": true,
        "controlBehavior": 0,
        "count": 10000,
        "grade": 1,
        "limitApp": "default",
        "maxQueueingTimeMs": 500,
        "resource": "flowDemo03",
        "strategy": 0,
        "warmUpPeriodSec": 10
    },
    {
        "clusterConfig": {
            "fallbackToLocalWhenFail": true,
            "sampleCount": 10,
            "strategy": 0,
            "thresholdType": 0,
            "windowIntervalMs": 1000
        },
        "clusterMode": false,
        "controlBehavior": 1,
        "count": 1000,
        "grade": 1,
        "limitApp": "default",
        "maxQueueingTimeMs": 500,
        "resource": "flowDemo06",
        "strategy": 0,
        "warmUpPeriodSec": 5
    },
    {
        "clusterConfig": {
            "fallbackToLocalWhenFail": true,
            "sampleCount": 10,
            "strategy": 0,
            "thresholdType": 0,
            "windowIntervalMs": 1000
        },
        "clusterMode": false,
        "controlBehavior": 0,
        "count": 500,
        "grade": 1,
        "limitApp": "default",
        "maxQueueingTimeMs": 500,
        "refResource": "flowDemo4",
        "resource": "flowDemo05",
        "strategy": 1,
        "warmUpPeriodSec": 10
    },
    {
        "clusterConfig": {
            "fallbackToLocalWhenFail": true,
            "sampleCount": 10,
            "strategy": 0,
            "thresholdType": 0,
            "windowIntervalMs": 1000
        },
        "clusterMode": false,
        "controlBehavior": 0,
        "count": 5000,
        "grade": 0,
        "limitApp": "default",
        "maxQueueingTimeMs": 500,
        "resource": "flowDemo02",
        "strategy": 0,
        "warmUpPeriodSec": 10
    },
    {
        "clusterConfig": {
            "fallbackToLocalWhenFail": true,
            "sampleCount": 10,
            "strategy": 0,
            "thresholdType": 0,
            "windowIntervalMs": 1000
        },
        "clusterMode": false,
        "controlBehavior": 0,
        "count": 5000,
        "grade": 1,
        "limitApp": "default",
        "maxQueueingTimeMs": 500,
        "resource": "flowDemo01",
        "strategy": 0,
        "warmUpPeriodSec": 10
    },
    {
        "clusterConfig": {
            "fallbackToLocalWhenFail": true,
            "sampleCount": 10,
            "strategy": 0,
            "thresholdType": 0,
            "windowIntervalMs": 1000
        },
        "clusterMode": false,
        "controlBehavior": 2,
        "count": 3300,
        "grade": 1,
        "limitApp": "default",
        "maxQueueingTimeMs": 100,
        "resource": "flowDemo07",
        "strategy": 0,
        "warmUpPeriodSec": 10
    }
]

作者丨梁勇 来源丨瓜农老梁

0 人点赞