一. 概述
1.1介绍
Sentinel 引入了 Sentinel API Gateway Adapter Common 模块,此模块中包含网关限流的规则和自定义 API 的实体和管理逻辑:
- GatewayFlowRule:网关限流规则,针对 API Gateway 的场景定制的限流规则,可以针对不同 route_id或自定义的 API 分组进行限流,支持针对请求中的参数、Header、来源 IP 等进行定制化的限流。
- ApiDefinition:用户自定义的 API 定义分组,可以看做是一些 URL 匹配的组合。比如我们可以定义一个 API 叫 my_api,请求 path 模式为 /foo/** 和 /baz/** 的都归到 my_api 这个 API 分组下面。限流的时候可以针对这个自定义的 API 分组维度进行限流。
1.2 参数说明
其中网关限流规则 GatewayFlowRule 的字段解释如下:
- resource:资源名称,可以是网关中的 route 名称或者用户自定义的 API 分组名称。
- resourceMode:规则是针对 API Gateway 的 route(RESOURCE_MODE_ROUTE_ID)还是用户在 Sentinel 中定义的 API 分组(RESOURCE_MODE_CUSTOM_API_NAME),默认是 route。
- grade:限流指标维度,同限流规则的 grade 字段
- count:限流阈值
- intervalSec:统计时间窗口,单位是秒,默认是 1 秒
- controlBehavior:流量整形的控制效果,同限流规则的 controlBehavior 字段,目前支持快速失败和匀速排队两种模式,默认是快速失败。
- burst:应对突发请求时额外允许的请求数目。
- maxQueueingTimeoutMs:匀速排队模式下的最长排队时间,单位是毫秒,仅在匀速排队模式下生效。
- paramItem:参数限流配置。若不提供,则代表不针对参数进行限流,该网关规则将会被转换成普通流控规则;否则会转换成热点规则。其中的字段:
- parseStrategy:从请求中提取参数的策略,目前支持提取来源 IP(PARAM_PARSE_STRATEGY_CLIENT_IP)、Host(PARAM_PARSE_STRATEGY_HOST)、任意 Header(PARAM_PARSE_STRATEGY_HEADER)和任意 URL 参数(PARAM_PARSE_STRATEGY_URL_PARAM)四种模式。
- fieldName:若提取策略选择 Header 模式或 URL 参数模式,则需要指定对应的 header 名称或 URL 参数名称。
- pattern 和 matchStrategy:为后续参数匹配特性预留,目前未实现。
相关参数
public final class SentinelGatewayConstants {
public static final int APP_TYPE_GATEWAY = 1;
public static final int RESOURCE_MODE_ROUTE_ID = 0;
public static final int RESOURCE_MODE_CUSTOM_API_NAME = 1;
public static final int PARAM_PARSE_STRATEGY_CLIENT_IP = 0;
public static final int PARAM_PARSE_STRATEGY_HOST = 1;
public static final int PARAM_PARSE_STRATEGY_HEADER = 2;
public static final int PARAM_PARSE_STRATEGY_URL_PARAM = 3;
public static final int PARAM_PARSE_STRATEGY_COOKIE = 4;
public static final int URL_MATCH_STRATEGY_EXACT = 0;
public static final int URL_MATCH_STRATEGY_PREFIX = 1;
public static final int URL_MATCH_STRATEGY_REGEX = 2;
public static final int PARAM_MATCH_STRATEGY_EXACT = 0;
public static final int PARAM_MATCH_STRATEGY_PREFIX = 1;
public static final int PARAM_MATCH_STRATEGY_REGEX = 2;
public static final int PARAM_MATCH_STRATEGY_CONTAINS = 3;
}
以客户端IP作为限流因子
public static final int PARAM_PARSE_STRATEGY_CLIENT_IP = 0;
以客户端HOST作为限流因子
public static final int PARAM_PARSE_STRATEGY_HOST = 1;
以客户端HEADER参数作为限流因子
public static final int PARAM_PARSE_STRATEGY_HEADER = 2;
以客户端请求参数作为限流因子
public static final int PARAM_PARSE_STRATEGY_URL_PARAM = 3;
以客户端请求Cookie作为限流因子
public static final int PARAM_PARSE_STRATEGY_COOKIE = 4;
1.3 网关限流参数组合说明:
限流参数组合1: (按照QPS限流:快速失败)
[{
"resource": "loit-portal-api",
"count": 1,
"intervalSec": 1
"controlBehavior": 0
}]
1、API类型(resourceMode):RoutID("resourceMode": 0)\API分组(1)
2、API名称(resource):RoutID\API分组名称
3、阈值类型(grade: 1):QPS
4、QPS阈值(count):阈值
5、间隔单位秒(intervalSec)
6、流控方式(controlBehavior: 0):快速失败
7、Burst size(burst):0
限流参数组合2: (按照QPS限流:匀速排队)
[{
"resourceMode": 1,
"resource": "loit-portal-api",
"count": 1,
"grade": 1,
"intervalSec": 1,
"controlBehavior": 2,
"maxQueueingTimeoutMs": 100
}]
参数解析
1、API类型(resourceMode):RoutID("resourceMode": 0)\API分组(1)
2、API名称(resource):RoutID\API分组名称
3、阈值类型(grade: 1):QPS
4、QPS阈值(count: 10):阈值
5、间隔单位秒(intervalSec)
6、流控方式(controlBehavior: "2"):匀速排队
7、超时时间(maxQueueingTimeoutMs: 10):毫秒
限流参数组合3: (按照线程数限流)
[{
"resourceMode": 1,
"resource":