灰度发布方案
2020年某电商平台的订单服务发布新版本,灰度10%的流量后发现错误率飙升。
但开发团队犹豫了:到底是继续观察还是回滚?万一只是那10%流量有问题呢?
15分钟后,错误率从5%飙升到50%,但此时已经全量发布了。
这次故障持续了30分钟,影响了约10万笔订单,直接损失约20万元。
【面试官手记】
灰度发布是保障线上稳定的关键手段。我面试过的候选人里,能说清楚"灰度策略"的不超过30%,能说出"回滚决策"的不超过20%。灰度发布的关键是灰度期间发现问题要及时回滚。
一、灰度发布的四大策略 🔴
1.1 四大策略
1.2 灰度比例策略
二、流量灰度实现 🔴
2.1 Nginx灰度
2.2 Spring Cloud灰度
2.3 配置中心灰度
三、金丝雀发布 🟡
3.1 原理
3.2 Kubernetes实现
四、A/B测试 🟡
4.1 A/B测试配置
4.2 A/B测试使用
五、回滚策略 🟡
5.1 自动回滚
5.2 手动回滚
5.3 回滚决策
六、生产避坑 🟡
6.1 灰度发布的五大坑
坑1:灰度期间不观察
坑2:灰度比例增长过快
坑3:没有灰度开关
坑4:灰度流量不均匀
坑5:数据库灰度不同步
6.2 灰度检查清单
七、真实面试回放 🟡
面试官:灰度发布怎么实现?
候选人(小张):三种方式:
一是流量灰度。按请求百分比分配流量,比如10%到新版本。
二是用户灰度。按用户ID哈希,决定走哪个版本。
三是金丝雀发布。保留旧版本服务器,部署新版本到少量服务器,逐步切换。
面试官:灰度期间出现问题怎么决策?
小张:三个原则:
一是错误率上升。超过正常值的2倍,立即回滚。
二是响应时间上升。P99超过500ms,立即回滚。
三是核心指标下降。DAU/订单量下降超过10%,立即回滚。
面试官:怎么保证灰度流量均匀?
小张:用用户ID哈希。
比如10%流量到新版本,就对用户ID的哈希值取模,余数小于1的用户走新版本。
这样每个用户看到的版本是固定的,不会忽新忽旧。
【面试官手记】
小张这场面试的亮点:
知道三种灰度方式
知道回滚决策的三个原则
知道用用户ID哈希保证均匀
灰度发布是P6工程师必备技能,能完整回答的候选人,说明有发布运维经验。
灰度发布的核心理念是小步快跑,快速试错。记住三个要点:
- 灰度策略:按流量/用户/地域分批
- 监控观察:每个级别观察2-4小时
- 及时回滚:有问题立即回滚,不要犹豫
灰度发布是保障线上稳定的护身符。