首页/开发/CI/CD 与发布速查/暗发布(Dark Launch)
发布策略60 条

暗发布(Dark Launch)

新功能随发布部署但不暴露入口:先在生产环境里被动运行(或承接影子流量),用真实负载验证性能与稳定性,再开入口放行用户。

CI/CD 与发布速查开发更新于 2026-10-13

暗发布是什么

暗发布(Dark Launch)指新功能随发布部署到生产但不暴露入口:代码合入、模块加载、入口隐藏或开关关闭,让它在真实环境里先「沉默运行」——被动承接影子流量、内部调用或双写对比,用真实负载验证性能与稳定性,确认指标后再打开开关放行用户。它与灰度发布的区别是用户完全无感:暗阶段没有任何真实用户流量进入新路径。关键纪律是想清楚副作用:暗发布期间新代码仍会消耗资源、写日志、产生外部调用,这些都必须被评估。

基本信息

形态代码合入但入口隐藏/开关关闭
验证方式影子流量、内部调用、双写对比
放行确认指标后打开开关或入口
风险点双写与后台任务会产生真实副作用

典型使用场景

  • 高风险重写:新旧实现双跑对比结果,数据一致才切换读路径。
  • 性能验证:新路径承接影子流量,验证延迟与资源消耗再放行。
  • 预热类功能:索引、缓存暖机在生产环境提前完成。
  • 依赖联通性验证:新功能连接的外部系统在生产网络里先打通。
  • 大促前演练:把新链路在真实流量下压测,发现问题还有时间回退。

示意

示意
入口关闭:不注册路由 / 菜单不渲染
后台开启:新模块随启动加载并处理影子请求
# 影子流量: 复制真实请求到新路径, 响应丢弃
# 双写: 新旧两套写同一份数据, 比对结果后再切换

验证方式对比

方式流量来源适用
影子流量复制真实请求性能与逻辑差异验证
内部调用人工构造功能正确性
双写对比真实写路径数据一致性验证
暗发布期间新代码仍在消耗资源、写日志与外部调用:把这些副作用纳入容量与成本评估,别把暗发布当成零成本。
给暗发布设终点:明确放行或拆除的检查点,否则半开半闭的代码路径会成为长期排障黑洞。

易错点

  • 隐藏入口但不隐藏副作用:初始化任务写库、发消息,污染真实数据。
  • 长期暗发布不设终点:新代码路径在生产半开半闭,故障排查困难。
  • 影子流量未限速:复制流量压垮下游依赖,影子链路要独立限流。
  • 双写差异无人比对:双写不是目的,比对报告与切换条件是必要的产出。
  • 暗发布代码与正式路径共享可变状态:影子请求污染正式数据,状态隔离先于流量接入。

数据来源与参考

  • martinfowler.com《Feature Toggles (aka Feature Flags)》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌