暗发布是什么
暗发布(Dark Launch)指新功能随发布部署到生产但不暴露入口:代码合入、模块加载、入口隐藏或开关关闭,让它在真实环境里先「沉默运行」——被动承接影子流量、内部调用或双写对比,用真实负载验证性能与稳定性,确认指标后再打开开关放行用户。它与灰度发布的区别是用户完全无感:暗阶段没有任何真实用户流量进入新路径。关键纪律是想清楚副作用:暗发布期间新代码仍会消耗资源、写日志、产生外部调用,这些都必须被评估。
基本信息
| 形态 | 代码合入但入口隐藏/开关关闭 |
|---|---|
| 验证方式 | 影子流量、内部调用、双写对比 |
| 放行 | 确认指标后打开开关或入口 |
| 风险点 | 双写与后台任务会产生真实副作用 |
典型使用场景
- 高风险重写:新旧实现双跑对比结果,数据一致才切换读路径。
- 性能验证:新路径承接影子流量,验证延迟与资源消耗再放行。
- 预热类功能:索引、缓存暖机在生产环境提前完成。
- 依赖联通性验证:新功能连接的外部系统在生产网络里先打通。
- 大促前演练:把新链路在真实流量下压测,发现问题还有时间回退。
示意
示意
入口关闭:不注册路由 / 菜单不渲染
后台开启:新模块随启动加载并处理影子请求
# 影子流量: 复制真实请求到新路径, 响应丢弃
# 双写: 新旧两套写同一份数据, 比对结果后再切换验证方式对比
| 方式 | 流量来源 | 适用 |
|---|---|---|
| 影子流量 | 复制真实请求 | 性能与逻辑差异验证 |
| 内部调用 | 人工构造 | 功能正确性 |
| 双写对比 | 真实写路径 | 数据一致性验证 |
暗发布期间新代码仍在消耗资源、写日志与外部调用:把这些副作用纳入容量与成本评估,别把暗发布当成零成本。
给暗发布设终点:明确放行或拆除的检查点,否则半开半闭的代码路径会成为长期排障黑洞。