配置项详解

本指南详细解释 OLC 的所有配置项,帮助你理解每个配置的作用和用法。

配置文件

OLC 使用两个配置文件:

  1. overload-config.properties - 基础配置
  2. 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 - 请求 IP
  • Tenant - 租户名

共享模式

  • share=true - 所有匹配的请求共享一个限流配额
  • share=false - 根据实际值创建子组,每个值有独立的配额

示例:按模型限流

{
  "tag": "Model",
  "match": "equal",
  "values": ["gpt-4", "gpt-3.5"]
}

这会为 gpt-4gpt-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: 规则不生效?

检查:

  1. olc.sdk.domainolc.json 中的 domain 是否一致
  2. 分组的 enabled 是否为 true
  3. 流控策略的 enabled 是否为 true

Q: 如何禁用限流?

设置 olc.sdk.switch=off,所有请求都会通过。

Q: 如何按不同维度限流?

在 tags 中添加多个标签,并设置 share=false 为每个值创建独立配额。

Q: 密码如何加密?

参考配置加密指南,使用 ENC(...) 格式。

相关链接