为何共享网关易被挤爆(多节点协作前提)
网关是单入口加法器:每台 Mac 上跑两个并行作业,十台机就可能对同一进程呈现二十路并发会话;Webhook 风暴与人工调试流量同权叠加。协作团队需要三件事:公布的容量模型(每类 RPS、最大会话)、CI 与聊天侧预算与网关一致、LB 后多副本的限流参数一致。边缘层在哪里挂 HTTP 限流模块,可与Nginx/Caddy 反代入口决策对照。
步骤化:网关限流设计(最小可复现)
- 路径清单与 route_class:列出对外 HTTP/gRPC,标记
interactive、ci_ingest、internal_worker,日志与配额都挂此类别。 - 身份键:按 API Key 指纹、OAuth subject、或 CI 注入
tenant_id分桶,避免「匿名 IP」互相踩踏。 - 每类两个数:(a)可持续 RPS + 突发令牌数 → 令牌桶;(b)同时进行的长会话或上游连接数 → 信号量/连接顶。
- 准入严于队列:网关在入队前拒绝比 dequeue 毒任务便宜;退避与重试策略与任务队列与重试一致,避免重试风暴。
- 灰度观测再 enforcement:先只打点「本会 429」计数,确认误伤面后再打开真实拒绝。
令牌桶 vs 连接/会话阈值
令牌桶吸收秒级尖峰(例如一秒内几十条 Webhook);会话/连接顶约束 TLS、WebSocket、子进程与 GPU/工具占用的同时存在量。生产上通常两者都要:桶管到达率,顶管昂贵并行度。下列为硬件无关的起点,需按机型与上游配额压测调整。
| 机制 | 适用 | 起点(须压测调参) |
|---|---|---|
| 每租户令牌桶 | Webhook POST、REST 轮询 | 补充 5–20 rps,突发 30–60 token |
| 全局令牌桶 | 共享上游 LLM / 供应商配额 | 按配额留安全余量 |
| 并发会话顶 | 长连 Agent、工具执行 | 每节点类 2–8;全网总和 ≤ 网关顶 |
| TCP/上游连接顶 | 防 fd 耗尽 | 与 ulimit -n 留 headroom |
CI 与消息通道:并发耦合
网关配满限额若 CI 仍矩阵扇出,等于白做:为环境级 workflow 设 concurrency,限制 matrix 并行;聊天侧多个 bot 同房间会重复入站,把「每分钟消息数」视作第二层桶,与 HTTP RPS 并列预算。skills 预热若多机同时触发,需错峰,避免与网关恢复流量叠加;预热与健康探针节奏可参考站内 OpenClaw 专栏中的 skills 与探针文。
健康检查联动
合并 /healthz(磁盘、队列 ping、关键依赖)与网关 SLA:探针失败或延迟 SLO 连续破线时,对新会话返回 503 并带 Retry-After,在飞任务按短截止 drain。可选:CPU 持续高于阈值时自动收紧令牌补充速率,恢复稳定后再放宽。LB 与网关用同一探针口径,先摘流再宕机。
失败观测与日志字段
各节点 grep 同一 JSON 形态。每次拒绝或卸流至少包含:
| 字段 | 用途 |
|---|---|
mesh_node_id |
关联 CI label 与 Mac 机角色 |
gateway_instance_id |
launchd/主机名,对照 VIP 后哪副本 |
route_class |
interactive / ci_ingest / internal_worker |
limit_name |
如 tenant_rps、global_sessions |
client_id |
脱敏 Key 指纹或 subject |
http_status |
429(配额)vs 503(健康/依赖) |
retry_after_ms |
与响应头一致,客户端退避 |
queue_depth_hint |
可选,看 backlog 是网关还是队列 |
告警:某租户持续高 429 多为配置或客户端失控;503 与健康失败同屏多为容量或依赖事故。结合 trace 区分「边缘拒绝」与「Worker 超时」。
FAQ
问:限流放在 TLS 反代还是 OpenClaw 里?
反代做粗粒度与 TLS;进程内做会话与工具语义限流。两层写清文档,重试策略与队列文一致,避免放大。
问:多机如何避免同时对网关雷群?
LB 后副本共享同一套限流配置,或分片网关 + 集中配额;定时与 CI 加抖动,每节点 Worker 上限之和不超过网关会话顶。
问:429 与 503 怎么选?
配额型限流用 429 + Retry-After;探针红或依赖挂用 503。字段集保持一致便于 on-call。
小结与延伸阅读
共享网关要用显式预算把多节点、CI 与消息通道关在一起;令牌桶 + 会话顶、健康卸流与结构化日志是最小闭环。更多 OpenClaw 与 Mesh 编排见OpenClaw 专栏与博客列表。