配置项详解
本指南详细解释 OLC 的所有配置项,帮助你理解每个配置的作用和用法。
配置文件
OLC 使用两个配置文件:
- overload-config.properties - 基础配置
- olc.json - 限流规则配置
两个文件都放在同一个目录下,通过环境变量 OLC_CONFIG_PATH 指定目录路径。
Properties 配置
SDK 基础配置
这些配置控制 OLC 的基本行为。
olc.sdk.domain=my-service
olc.sdk.switch=on
olc.sdk.config.stub=jsonfile
olc.sdk.policy.update.period=6
| 配置项 | 说明 | 示例 |
|---|---|---|
olc.sdk.domain |
服务域名 | my-service |
olc.sdk.switch |
全局开关 | on(启用)/ off(关闭) |
olc.sdk.config.stub |
配置源类型 | jsonfile |
olc.sdk.policy.update.period |
规则刷新间隔(秒) | 6 |
域名配置:olc.sdk.domain 必须与 olc.json 中的 domain 一致,用于匹配规则。
全局开关:olc.sdk.switch=off 会完全关闭限流功能,所有请求都会通过。
刷新间隔:olc.sdk.policy.update.period=6 表示每 6 秒重新加载一次规则配置。设置为 0 禁用热更新。
采集器配置
用于收集系统资源指标,支持自适应限流。
olc.sdk.collector.active=vllm
olc.sdk.collector.capacity=10
olc.sdk.collector.sample=10
olc.sdk.collector.interval=1
| 配置项 | 说明 | 默认值 |
|---|---|---|
olc.sdk.collector.active |
激活的采集器 | "" |
olc.sdk.collector.capacity |
最大保留的采集记录数 | 10 |
olc.sdk.collector.sample |
计算平均值使用的样本数 | 10 |
olc.sdk.collector.interval |
采集间隔(秒) | 1 |
激活采集器:设置为 vllm 启用 vLLM 资源采集。
Redis 配置
用于集群模式下的限流数据同步。
olc.redis.mode=alone
olc.redis.passwd=ENC(encrypted_password)
olc.redis.timeout=2000
olc.redis.maxConnections=64
| 配置项 | 说明 | 默认值 |
|---|---|---|
olc.redis.mode |
Redis 模式 | alone |
olc.redis.nodeList |
集群节点列表 | "" |
olc.redis.passwd |
密码(支持加密) | None |
olc.redis.timeout |
连接超时(毫秒) | 2000 |
olc.redis.maxConnections |
最大连接数 | 64 |
Redis 模式:
alone- 单机模式cluster- 集群模式sentinel- 哨兵模式
密码加密:密码支持 ENC(...) 格式加密,详见配置加密指南。
统计相关配置
| 配置项 | 说明 | 默认值 |
|---|---|---|
| olc.sdk.statistic.expire | 统计过期时间 某组请求多久开始从新统计 | 300秒 |
| olc.sdk.statistic.maxsize | 统计存储数据量 | 5000000 |
| olc.sdk.statistic.windowLengthInMs | 滑动窗口自定统计小窗口大小 | 1000毫秒 |
| olc.sdk.statistic.intervalInSec | 滑动窗口自定义统计总窗口大小 | 60秒 |
JSON 规则配置
基本结构
{
"domain": "my-service",
"rules": [...]
}
| 字段 | 说明 | 必填 |
|---|---|---|
domain |
域名,需与 properties 中的 olc.sdk.domain 一致 |
是 |
rules |
规则列表 | 是 |
完整配置示例
{
"domain": "my-service",
"rules": [
{
"group": {
"name": "apiGroup",
"priority": 4,
"enabled": true,
"tags": [
{"tag": "URL", "match": "equal", "values": ["/api/chat"]}
]
},
"flow": {
"name": "chatFlow",
"enabled": true,
"flowControlMode": "qps",
"timeUnit": "second",
"timeInterval": 1,
"rateLimit": 100
}
}
]
}
分组配置(Group)
详情请参考组策略配置指南。
分组定义如何匹配请求。
{
"group": {
"name": "apiGroup",
"priority": 4,
"enabled": true,
"type": "normal",
"tags": [...]
}
}
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
name |
string | - | 分组名称(唯一标识) |
priority |
int | 500 |
优先级,数字越小优先级越高 |
enabled |
bool | true |
是否启用 |
type |
string | "normal" |
类型:normal / global |
tags |
array | - | 标签列表 |
优先级:当请求匹配多个分组时,使用优先级最高的分组。
分组类型:
normal- 笛卡尔积模式global- 全局共享模式
标签配置(Tag)
标签定义匹配的维度。
{
"tag": "URL",
"match": "equal",
"values": ["/api/chat"],
"share": true
}
| 字段 | 类型 | 说明 |
|---|---|---|
tag |
string | 维度名(URL、Method、Model 等) |
match |
string | 匹配方式 |
values |
array | 匹配的值列表 |
share |
bool | 是否共享配额 |
匹配方式:
equal- 精确匹配regex- 正则表达式匹配default- 通配符匹配(只支持*)
预定义维度:
URL- 请求路径Method- HTTP 方法Model- 模型名称ServiceName- 服务名InterfaceName- 接口名URL- 请求路径Method- HTTP 方法IP- 请求 IPTenant- 租户名
共享模式:
share=true- 所有匹配的请求共享一个限流配额share=false- 根据实际值创建子组,每个值有独立的配额
示例:按模型限流
{
"tag": "Model",
"match": "equal",
"values": ["gpt-4", "gpt-3.5"]
}
这会为 gpt-4 和 gpt-3.5 分别创建独立的限流配额。
流控配置(Flow)
流控定义限流的策略和参数。
{
"flow": {
"name": "chatFlow",
"enabled": true,
"flowControlMode": "qps",
"policyType": "NODE",
"timeUnit": "second",
"timeInterval": 1,
"rateLimit": 100,
"burstLimit": 120,
"blockMsg": "请求过于频繁"
}
}
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
name |
string | {groupName}_flow |
策略名称 |
enabled |
bool | true |
是否启用 |
flowControlMode |
string | "qps" |
流控模式 |
policyType |
string | "NODE" |
策略类型 |
timeUnit |
string | - | 时间单位 |
timeInterval |
int | 1 |
时间间隔 |
rateLimit |
int | 0 |
限流阈值 |
burstLimit |
int | 0 |
突发上限 |
blockMsg |
string | "" |
拦截消息 |
流控模式:
qps- 每秒请求数限制quota- 配额限制response_quota- 响应配额限制concurrent- 并发数限制
时间单位:
second- 秒minute- 分钟hour- 小时day- 天
策略类型:
NODE- 单机限流CLUSTER- 集群限流
QPS 限流示例
{
"flow": {
"name": "chatFlow",
"flowControlMode": "qps",
"timeUnit": "second",
"timeInterval": 1,
"rateLimit": 100,
"burstLimit": 120
}
}
每秒最多处理 100 个请求,突发情况最多处理 120 个。
并发限流示例
{
"flow": {
"name": "modelFlow",
"flowControlMode": "concurrent",
"timeUnit": "second",
"timeInterval": 1,
"rateLimit": 50
}
}
同时最多处理 50 个并发请求。
准入控制配置(Admission)
详情请参考准入控制策略配置指南。
准入控制用于额外的请求过滤。
{
"admission": {
"name": "modelAdmission",
"enabled": true,
"type": "allow",
"blockMsg": "资源不足"
}
}
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
name |
string | {groupName}_admission |
策略名称 |
enabled |
bool | true |
是否启用 |
type |
string | "" |
准入类型 |
blockMsg |
string | "" |
拦截消息 |
准入类型:
allow- 允许模式deny- 拒绝模式dynamic- 动态模式
自适应算法配置
详情请参考自适应算法指南。
配合采集器使用,实现动态限流。
{
"flow": {
"calculateAlg": {
"algName": "PID",
"algParam": {
"Kp": 0.5,
"Ki": 0,
"kd": 0.5,
"minResource": 0.5,
"maxResource": 0.8,
"currentUsage": "vllm.gpu_usage"
}
}
}
}
| 参数 | 说明 | 示例 |
|---|---|---|
algName |
算法名称 | PID |
Kp |
比例系数 | 0.5 |
Ki |
积分系数 | 0 |
kd |
微分系数 | 0.5 |
minResource |
最小资源阈值 | 0.5 |
maxResource |
最大资源阈值 | 0.8 |
currentUsage |
资源指标来源 | vllm.gpu_usage |
详细说明请参考自适应算法指南。
环境变量
| 变量名 | 说明 | 示例 |
|---|---|---|
OLC_CONFIG_PATH |
配置文件目录 | /app/config |
快速配置模板
最小配置
# overload-config.properties
olc.sdk.domain=my-service
olc.sdk.switch=on
olc.sdk.config.stub=jsonfile
{
"domain": "my-service",
"rules": []
}
完整生产配置
# overload-config.properties
olc.sdk.domain=my-service
olc.sdk.switch=on
olc.sdk.config.stub=jsonfile
olc.sdk.policy.update.period=6
olc.sdk.collector.active=vllm
olc.sdk.collector.capacity=10
olc.sdk.collector.sample=10
olc.sdk.collector.interval=1
olc.redis.mode=alone
olc.redis.passwd=ENC(your_encrypted_password)
olc.redis.timeout=2000
olc.redis.maxConnections=64
olc.extension.prometheus.url=http://prometheus:9090
常见配置问题
Q: 规则不生效?
检查:
olc.sdk.domain与olc.json中的 domain 是否一致- 分组的
enabled是否为true - 流控策略的
enabled是否为true
Q: 如何禁用限流?
设置 olc.sdk.switch=off,所有请求都会通过。
Q: 如何按不同维度限流?
在 tags 中添加多个标签,并设置 share=false 为每个值创建独立配额。
Q: 密码如何加密?
参考配置加密指南,使用 ENC(...) 格式。