执行代码,但不展示结果
暗发布会在生产环境运行新路径,但丢弃或隐藏它的输出。团队可以比较新旧结果、测量延迟,并捕获预发环境漏掉的数据形状错误。在显式启用之前,用户看到的仍是旧行为。
request -> old path -> user response
-> new path (dark) -> log/compare only
新路径必须没有副作用。如果它会写数据库、发送通知或扣款,那就不是暗发布,而是一个隐藏了界面的真实功能。应把写入隔离到沙箱、独立表或关闭的分支后。
要比较,而不只是执行
暗发布的价值来自结果比较。记录新输出,与当前输出对比,统计差异和延迟。只运行、从不比较的新路径几乎提供不了证据。上线前要定义比较指标,包括对预期差异的容忍度。
控制成本与风险
同时跑两条路径会让受影响请求的工作量翻倍。限制采样比例,监控 CPU 和依赖负载,一旦拖慢用户路径就停止暗路径。暗发布不能变成无人负责的永久负载。结束时必须明确:正式发布、继续迭代还是删除。
何时使用
当必须借助生产数据和流量验证高风险变更,且新路径可以做到无副作用时,使用暗发布。优点是低用户风险下获得真实证据;代价是重复资源消耗和比较复杂度。与金丝雀相比,它完全隐藏输出;与预发环境相比,它测试的是真实系统。