ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何用Switchyard soak做发布门禁:48小时稳定性测试实战清单

如何用Switchyard soak做发布门禁:48小时稳定性测试实战清单 如何用Switchyard soak做发布门禁48小时稳定性测试实战清单【免费下载链接】SwitchyardSwitchyard lets LLM applications route traffic across models and providers while preserving native OpenAI and Anthropic API compatibility - enabling flexible model selection, benchmarking, and cost/performance optimization.项目地址: https://gitcode.com/GitHub_Trending/switch/Switchyard 为什么发布前要跑 48 小时 soak 测试Switchyard是一个 LLM 路由网关它把每一次模型调用转发给刚好够用且最便宜的模型同时完整保留 OpenAI 和 Anthropic 的 API 兼容性。当你改动了路由算法、协议翻译或服务器生命周期逻辑后普通的单元测试根本发现不了内存缓慢增长、第 36 小时才出现的流式断连这类问题——所以 Switchyard 内置了一个专门的 soak浸泡/长稳压测测试器switchyard-soak官方建议在代码冻结前对发布候选版本持续压测 48 小时并把测试器退出码直接当作发布门禁gate通过exit 0才能发版失败exit 1就拦截。它和普通压测工具最大的区别是请求有语义不是灌无意义的随机字符串而是模拟真实 LLM 应用的流量形态——长短上下文、多轮对话、工具调用突发、分类器混合流量甚至故意注入 429/500 错误来验证容错。 Switchyard soak 到底测什么soak 测试器把压力分成 3 组共 13 个场景源码位于 crates/switchyard-soak/src/scenarios/覆盖三条原生 API 端点Chat Completions、Anthropic Messages、Responses的流式与非流式两种模式组别场景压力角度Coreshort-interactive、long-context、decode-heavy、prefix-reuse、mixed-traffic并发拐点、8K/32K 长上下文、1024 长输出、前缀缓存、70/20/10 混合流量Agenticgrowing-conversation、large-tool-catalog、tool-call-burst、stage-transitions、classifier-mix8 轮累积对话、16/64 工具目录、8 轮工具调用突发、阶段路由切换、80/20 难易分类器混合Resiliencecontext-overflow、failure-pressure、client-cancellation目标溢出回退、注入 429/500/截断流、客户端中途取消standard预设包含 Core Agentic发布门禁默认用它Resilience 组含预期内失败官方要求单独运行不要和吞吐指标混在一起比。除了压流量测试器还内置了三重健康哨兵每分钟采样/health和/metricsclient.rs 会校验 health 返回{status: ok}每 5 分钟发一个故意畸形的请求必须收到 HTTP 400 且服务器仍存活金丝雀检查通过--server-pid采样本地服务器进程的 RSS 内存和 CPU监控内存是否持续爬升每个报告周期日志会打印一个一眼可辨的状态词OK/DEGRADED有错误或健康检查失败/STALLED本周期零请求report.rs 中的判定逻辑远程tail -f日志就能掌握 48 小时全程状况。 第一步零成本本地验证不花一分钱真正跑 48 小时之前先确认工具链是通的。仓库自带了一个请求感知的本地 mock 后端switchyard-soak-mock能返回合法的分类器判定、注入上下文溢出/重试/取消等故障不需要任何模型 API Key零推理成本# 从被测 commit 一次性构建服务器、soak 测试器和 mock 后端 cargo build --release -p switchyard-server -p switchyard-soak \ --bins --example switchyard-soak-mock然后一条命令完成启动 mock 启动服务器 逐路由冒烟 跑压测python3.12 scripts/run_local_soak_test.py --duration 10s --concurrency 4 --request-count 100本地配置模板在 scripts/local_soak_test.toml覆盖noop、random、passthrough、llm_classifier、stage_router五条路由。这一步能提前暴露 90% 的配置错误路由 id 写错、端口被占、配置文件校验不过等再进入正式的 48 小时流程。⏱ 第二步启动被测服务器并预检发布门禁的第一原则测什么就发什么。服务器必须从计划发布的精确 commit 构建使用生产同款配置禁止开发版服务器 正式版配置混搭cargo build --release -p switchyard-server target/release/switchyard-server --config release-routes.toml \ switchyard-soak.log 21 SOAK_SERVER_PID$!预检两个 HTTP 端点都通过才能开始GET /health返回 HTTP 200 且 body 为{status: ok}GET /v1/models里找到代表发布负载的路由 id稍后用--model精确传入⚠️ 另外请确保运行环境专用主机、作业调度器或 tmux/screen能连续 48 小时不挂起、不重启并留足服务器日志磁盘空间。 第三步48 小时发布门禁实战命令并发数怎么选官方给出的方法是先用短时试跑逐级上调并发找到低于后端限流阈值的最高稳态负载就用这个值跑 48 小时——大部分时间都被限流压着的过载测试测的不是稳定性。./target/release/switchyard-soak \ --base-url http://127.0.0.1:4000 \ --model RELEASE_MODEL_ID \ --duration 48h \ --concurrency 16 \ --server-pid $SOAK_SERVER_PID \ --max-rss-growth-mib 512关键参数速查完整说明见 crates/switchyard-soak/README.md参数默认值说明--duration48h压测总时长支持30s/5m/48h--concurrency16保持 16 个请求同时在飞闭环负载--max-error-rate0推理请求错误率上限0.01 允许 1%--max-rss-growth-mib无首尾内存增长上限MiB需配合--server-pid--api-key-env无传环境变量名而非 token 本身密钥不落命令行--results-dirsoak-results/UTC时间结果目录拒绝复用已有目录花钱提醒48 小时 × 16 并发在按量计费的模型后端上会产生可观费用。先用 5 分钟试跑估算请求量对付费成本走一次审批./target/release/switchyard-soak --model RELEASE_MODEL_ID \ --duration 5m --concurrency 4 --report-interval 10✅ 第四步8 条通过标准发布门禁判定清单switchyard-soak只在这 8 条全部满足时以 exit 0 结束任何一条不满足即 exit 1 拦下发布☑️ 要求的时长完整跑完☑️ 至少完成 1 个推理请求☑️ 推理错误率 ≤--max-error-rate默认 0即一个都不许挂☑️ 每次周期性存活检查health通过☑️ 每次/metrics读取都返回完整的 Switchyard 请求计数器计数器一旦归零重置即判失败——这能抓出服务器偷偷重启☑️ 每次进程采样都能取到 RSS 和 CPU 数据☑️ 每次畸形请求金丝雀检查通过400 服务器存活☑️ RSS 增长不超过--max-rss-growth-mib若已设置 如果发布计划确实允许远端服务商的瞬时故障请用--max-error-rate显式给出错误预算并把豁免理由写进发布记录。RSS 阈值同理基于同模型、同并发、同 worker 数的已批准基线来设而不是拍脑袋。 第五步结果审查清单每次运行会在soak-results/下生成一个带时间戳的目录包含 4 个文件文件看什么config.json本次运行的全部非机密参数复现依据intervals.csv每周期请求速率、错误、p50/p95/p99 延迟、health、计数器、RSS、CPUerrors.jsonl最多 10,000 条请求/金丝雀失败明细summary.json最终 PASS/FAIL 与失败原因——直接归档进发布记录批准发布前重点检查intervals.csv的这 4 种劣化信号后半夜才出现的错误早期干净不能代表全程稳定吞吐缓慢下滑p95/p99 延迟持续抬升RSS 单调爬升内存泄漏的铁证⚠️ 官方特别强调对比前几个小时和最后几个小时而不是全程平均值——平均值会把最后 6 小时崩了也平均掉。最后把summary.json、间隔图表、Switchyard 日志、被测 commit、服务器配置一起附进发布记录48 小时 soak 才算闭环。 常用文件速查操作指南预检/通过标准/结果审查docs/operations/soak_test.mdsoak 测试器说明与参数表crates/switchyard-soak/README.md零成本本地冒烟脚本scripts/run_local_soak_test.py本地测试路由配置scripts/local_soak_test.toml场景源码目录crates/switchyard-soak/src/scenarios/ 总结Switchyard 的 soak 测试把发布门禁从一句口号变成了一条可执行命令48 小时真实语义流量 三重健康哨兵 8 条硬性通过标准 结构化结果文件。记住这个节奏——先本地零成本验证 → 5 分钟试跑估算成本 → 48 小时正式门禁 → 首尾对比审查你的每次发布就多了一道真正能拦住慢性故障的防线。【免费下载链接】SwitchyardSwitchyard lets LLM applications route traffic across models and providers while preserving native OpenAI and Anthropic API compatibility - enabling flexible model selection, benchmarking, and cost/performance optimization.项目地址: https://gitcode.com/GitHub_Trending/switch/Switchyard创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表