前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >流量控制规则说明

流量控制规则说明

作者头像
瓜农老梁
发布2020-11-19 11:34:34
7940
发布2020-11-19 11:34:34
举报
文章被收录于专栏:瓜农老梁

前言

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

一、阈值类型

属性

说明

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
    }
]

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 瓜农老梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档