前言
本文梳理单机流控涉及的相关规则,集群流控另文梳理。
一、阈值类型
属性 | 说明 |
---|---|
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
}
]
作者丨梁勇 来源丨瓜农老梁