
一、灰度发布的意义
观察模式解决的是”规则该不该拦”,灰度发布解决的是”规则影响多大范围”。两者配合使用效果最好:先观察确认规则正确,再灰度控制影响范围。
如果你有多个站点或多个业务线,一条新规则直接全量生效,万一有问题就是全线故障。灰度让风险可控。
二、五种灰度维度
2.1 按域名灰度
多站点场景下,先在一个流量最小、业务最不关键的站点上线,观察没问题再推给其他站。
第 1 天:规则仅对 test.example.com 生效
第 2 天:确认无误 → 对 blog.example.com 生效
第 3 天:继续观察 → 对 www.example.com 生效
第 4 天:全站生效
2.2 按 URI 灰度
新规则通常针对特定路径,先只对该路径生效:
新规则:登录接口防爆破
第 1 天:仅对 /api/login-v2 生效(新接口,用户少)
第 2 天:扩展到 /api/login
第 3 天:扩展到 /wp-login.php
2.3 按流量比例灰度
部分平台支持按百分比放量。这种方式最平滑:
第 1 天:规则对 1% 流量生效
第 2 天:10%
第 3 天:30%
第 4 天:60%
第 5 天:100%
2.4 按 IP 段灰度
只对特定来源的请求应用新规则,适合定向验证:
场景:验证"海外 IP 全拦截"规则
第 1 天:仅对 45.0.0.0/8 生效(测试段)
第 2 天:扩展到全部海外 IP
注意:不要对自己的办公 IP 做灰度测试,
否则你无法验证正常用户是否受影响
2.5 按时间灰度
选择业务低峰期上线,比如凌晨 2-5 点,出问题影响面最小,而且有充足时间处理。
三、推荐的上线流程
完整的规则上线流程:
① 观察模式跑 3-7 天(验证规则正确性)
↓
② 小范围灰度:1 个域名 or 1% 流量
观察 24 小时
↓
③ 扩大灰度:30% 流量 or 3 个域名
观察 24 小时
↓
④ 全量发布
↓
⑤ 全量后持续监控 72 小时
↓
⑥ 记录基线,纳入常规巡检
四、灰度期间要监控什么
| 监控项 | 正常表现 | 异常信号 |
|---|---|---|
| 业务成功率 | 与灰度前持平 | 明显下降 |
| 拦截数 | 随灰度范围同比增加 | 激增(可能过严) |
| 5xx 错误率 | < 1% | 升高 |
| 用户投诉 | 0 | 出现投诉 |
| 响应时间 | 无明显变化 | 变慢 |
| 转化率/下单量 | 稳定 | 下降 |
五、回滚机制
灰度必须配套回滚能力,否则出问题只能硬扛:
回滚方案:
├─ 一键停用规则(最快,秒级生效)
├─ 从拦截退回观察模式(温和)
├─ 恢复到上一个配置版本(需提前备份)
└─ 应急白名单(临时放行关键业务)
触发回滚的条件:
├─ 业务成功率下降 > 5%
├─ 用户投诉 > 3 起
├─ 5xx 错误率 > 3%
└─ 核心接口不可用
六、灰度发布的常见错误
- 不做灰度直接全量 → 出问题影响全部业务
- 灰度范围太大(一次 50%)→ 失去灰度意义
- 观察时间太短(< 1 小时)→ 覆盖不到业务波动周期
- 灰度期间不监控 → 出问题也不知道
- 没有回滚预案 → 发现问题只能干着急
- 灰度成功不记录 → 下次还得重新摸索
七、小结
灰度发布是 WAF 规则上线的”减压阀”。按域名、URI、流量比例或时间维度分批放量,配合 24-72 小时的观察期和随时可用的回滚机制,就能把规则上线的风险控制在可接受范围内。多站运维或关键业务场景,强烈建议把灰度作为强制流程。
