预算提醒与限制
预算策略允许您通过设定定期时间窗口(日、周或月)内的支出阈值(美元)来控制 AI 网关的开支。当超出阈值时,策略将执行以下两种操作之一:
- 警报 (Alert) — 发送 Webhook 通知。请求继续正常处理。
- 拒绝 (Reject) — 使用 HTTP 429 阻止后续请求。导致支出超过预算的那个请求会被允许完成;拒绝操作适用于在超过阈值之后到达的请求。
支出会在每个新时间窗口开始时自动重置。启用工作区 (Workspaces) 功能后,预算策略可以限定在特定工作区范围内,以便按工作区跟踪支出。
管理预算策略
在 MLflow UI 中导航至 AI Gateway > Budgets 以查看和管理您的预算策略。
创建预算策略
点击 Create budget policy 打开创建对话框。指定预算金额(美元)、重置周期以及超出阈值时采取的操作。
警报 Webhook
当 ALERT 策略的阈值被超出时,网关会发送一个包含违规详情的 Webhook。警报在每个窗口内仅触发一次,同一窗口内的后续请求不会触发额外的 Webhook。
Webhook 端点可以直接在 Budgets 页面的 Budget alert webhooks 部分进行配置。
Webhook 有效负载包含:
json
{
"budget_policy_id": "bp-abc123",
"budget_unit": "USD",
"budget_amount": 500.0,
"current_spend": 523.40,
"duration_unit": "MONTHS",
"duration_value": 1,
"target_scope": "GLOBAL",
"workspace": "default",
"window_start": 1704067200000
}
拒绝行为
当 REJECT 策略的阈值被超出时,网关将阻止所有后续指向 AI 网关端点的请求,并返回 HTTP 429 响应。
text
HTTP/1.1 429 Too Many Requests
{
"detail": "Budget limit exceeded for policy 'bp-abc123'. Limit: $500.00 USD per 1 month. Request rejected."
}
时间窗口
预算窗口是固定的时间间隔:
- 每日 — 每天 UTC 时间午夜重置
- 每周 — 每 7 天重置一次(周日)
- 每月 — 每个月 1 号重置
累计支出在每个新窗口开始时重置为零。
授权
当跟踪服务器启用 身份验证 时,只有管理员用户可以创建、更新或删除预算策略。
预算跟踪策略
网关使用 预算跟踪器 (budget tracker) 在每次请求时累积支出并评估预算策略。有两种策略可选:local 和 redis。
Local (本地)
优点
- 无外部依赖 — 完全在进程内运行。
- 延迟最低;每个请求无需网络往返。
- 累计支出通过启动时的跟踪回填 (trace backfill) 在重启后得以保留。
缺点
- 预算状态不在工作进程或副本之间共享。每个进程独立跟踪支出,因此所有进程的总支出可能会超过配置的限额。
- 如果跟踪回填被禁用或不可用,支出将在重启时重置为零。
bash
# No extra environment variables required
mlflow server --host 0.0.0.0 --port 5000
Redis
优点
- 预算状态在所有网关工作进程和副本之间共享 — 全局强制执行限额。
- 原子操作保证了窗口初始化和成本累积过程中不会出现竞争条件。
缺点
- 需要一个可从每个网关进程访问的 Redis 实例。
- 由于 Redis 往返,会增加少量的单次请求延迟。
- 需要额外依赖:
pip install redis。
| 环境变量 | 默认值 | 描述 |
|---|---|---|
MLFLOW_GATEWAY_BUDGET_REDIS_URL | 无 | Redis 连接 URL。设置此变量将激活 redis 策略。示例:redis://:6379/0 (明文), rediss://host:6380/0 (TLS), redis://:password@host:6379/0 (带验证)。 |
bash
export MLFLOW_GATEWAY_BUDGET_REDIS_URL=redis://:6379/0
mlflow server --host 0.0.0.0 --port 5000
策略刷新间隔
两种策略都会定期从数据库重新获取预算策略。间隔由 MLFLOW_GATEWAY_BUDGET_REFRESH_INTERVAL 控制(默认:600 秒)。减小该值可更快地获取策略更改;增大该值可减轻数据库负载。
bash
export MLFLOW_GATEWAY_BUDGET_REFRESH_INTERVAL=30
mlflow server --host 0.0.0.0 --port 5000