Files
EnterpriseArchitect/services/nvidia_sidecar
vincent c50dcc9cb2 fix(BIZ-42): 综合评审优化 — 12项修复
四轮评审反馈全部处理:

🔴 Critical (5):
- _stats data race: 新增 _stats_lock (asyncio.Lock) + _increment_stat() helper
- Admin API 无认证: 新增 SIDECAR_ADMIN_TOKEN Bearer Token 认证
- API Key 明文暴露: GET config 返回 masked api_key (前4位+****)
- queue_max_size hot-reload 假生效: PriorityQueue.set_max_size() + 收缩保护
- SIDECAR_TIMEOUT 6000→60s + 上限截断 300s

🟠 Major (3):
- upstream_api_key 启动检查: lifespan 阶段 warning 日志
- Dashboard HTML 无缓存: 300s TTL 内存缓存
- queue_stats 异常日志: logger.warning(queue_stats_unavailable)

🟡 Medium (3):
- CORS middleware 配置
- httpx 连接池限制 (max_connections=100, keepalive=20)
- SSE retry: 3000 字段

🟢 Minor (1):
- _extract_model 类型注解 body: dict→Any
- passthrough 硬编码 30s→_config.request_timeout

mypy strict: 5 files, zero errors

Reviewed-by: 梁思筑, 严维序, 陆怀瑾, 沈路明
Co-authored-by: multica-agent <github@multica.ai>
2026-06-24 13:26:56 +08:00
..

NVIDIA Sidecar 限流代理

为 NVIDIA API 提供优先级排队 + 令牌桶限流的透明代理层。

快速启动

pip install .
nvidia-sidecar

监听 127.0.0.1:9190,代理到 NVIDIA API。

环境变量

变量 默认值 说明
SIDECAR_HOST 127.0.0.1 监听地址
SIDECAR_PORT 9190 监听端口
SIDECAR_METRICS_PORT 9191 Metrics 端口
SIDECAR_UPSTREAM https://integrate.api.nvidia.com/v1 上游 API 地址
SIDECAR_API_KEY NVIDIA API Key(必填)
SIDECAR_RATE_RPM 40 每分钟请求数限制
SIDECAR_BUCKET_CAPACITY 40 令牌桶容量
SIDECAR_TIMEOUT 6000 上游请求超时(秒)
SIDECAR_QUEUE_MAX 500 队列最大长度
SIDECAR_LOW_TIMEOUT 2.0 低优先级令牌等待超时(秒)
SIDECAR_FALLBACK_PASSTHROUGH true 队列满时是否直通上游
SIDECAR_LOG_LEVEL INFO 日志级别

YAML 配置

listen_port: 9292
rate_rpm: 60
upstream_api_key: "nvapi-xxx"
nvidia-sidecar --config /etc/nvidia-sidecar.yaml

API 端点

路径 方法 说明
/v1/chat/completions POST OpenAI Chat Completions 代理
/v1/completions POST OpenAI Completions 代理(legacy
/v1/embeddings POST OpenAI Embeddings 代理
/v1/models GET 模型列表代理
/health GET 健康检查
/metrics GET 指标查询

架构

请求 → 网关识别 → [NVIDIA: 优先级排队 → 令牌桶限流] → httpx → NVIDIA API
                → [非 NVIDIA: 直通] → httpx → 上游
  • 四级优先级: URGENT > HIGH > NORMAL > LOW(通过 X-Priority header 指定)
  • 队列满策略: PASSTHROUGH(直通)/ REJECT503/ DROP_LOWEST(丢弃最低优先级)
  • 令牌桶: 40 RPM,线程安全,支持阻塞/非阻塞消费