跳到主要内容

aidy.v2.plugin.upstream_rate_limit

Messages & Enums

message HeaderBucket

按请求 Header 划分限流桶。

message HeaderBucket {
// Header 名称,例如 `X-Tenant-ID`。
string name = 1;
}

message HeaderCondition

基于请求 Header 的匹配条件。

message HeaderCondition {
// Header 名称。
string name = 1;
// 等于指定值。
string equals = 11;
// 以前缀命中。
string starts_with = 12;
// 包含指定值。
string contains = 13;
// 通过正则匹配。
string regex = 14;
// 要求该 Header 存在,必须设置为 true。
bool exists = 15;
}

message RateLimitBucket

用于生成限流 key 的维度。

message RateLimitBucket {
// 按请求 Header 划分限流桶。
HeaderBucket header = 1;
// 按客户端 IP 划分限流桶。
SourceAddrBucket source_addr = 2;
}

message RateLimitCondition

只有在条件满足时才执行限流检查。

message RateLimitCondition {
// 基于请求 Header 的匹配条件。
HeaderCondition header = 1;
// 基于客户端 IP 的匹配条件。
SourceAddrCondition source_addr = 2;
}

message RateLimitQuota

限流配额。

message RateLimitQuota {
// 可消耗的总额度。
int64 limit = 1;
// 滑动窗口时间,例如 1s、1m、1h、24h。
google.protobuf.Duration window = 2;
// 计量单位。
RateLimitUnit unit = 3;
}

enum RateLimitUnit

配额使用的计量单位。

enum RateLimitUnit {
// 未显式指定。
RATE_LIMIT_UNIT_UNSPECIFIED = 0;
// 按 token 数计量。
RATE_LIMIT_UNIT_TOKENS = 1;
// 按字符数计量。
RATE_LIMIT_UNIT_CHARACTERS = 2;
}

message SourceAddrBucket

按客户端 IP 划分限流桶。

message SourceAddrBucket {
// no fields
}

message SourceAddrCondition

基于客户端 IP 的匹配条件。

message SourceAddrCondition {
// 等于指定 IP。
string equals = 1;
// 以前缀命中,例如 `192.168.1.`。
string starts_with = 2;
// 通过 CIDR 网段匹配,例如 `192.168.0.0/16`。
string cidr = 3;
// 要求当前请求存在可解析的客户端 IP,必须设置为 true。
bool exists = 4;
}

message UpstreamRateLimitPluginConfig

route 级上游限流配置。

message UpstreamRateLimitPluginConfig {
// 规则列表;为空时插件不会生效。
repeated UpstreamRateLimitRule rules = 1;
}

message UpstreamRateLimitRule

单条上游限流规则。

message UpstreamRateLimitRule {
// 用于生成限流 key 的维度。
// 每条规则会自动追加 `route:{RouteID}:rule:{RuleIndex}` 前缀。
RateLimitBucket bucket = 1;
// 只有在全部条件满足时才执行限流检查;为空时表示始终检查。
repeated RateLimitCondition conditions = 2;
// 配额定义。
RateLimitQuota quota = 3;
}