业界发布策略
1、停机发布
停机发布顾名思义就是先把服务停止,再把所有服务升级,在此期间用户不能访问服务
- 优点:不需要考虑在新旧版本同时存在时的兼容问题
- 缺的:需要在用户低峰期发布,出现故障回滚麻烦
适合场景:
- 开发测试环境
- 非关键应用,用户影响面小
- 兼容性比较难管控的场景
- 发布信心不足,需要线上流量进行测试
2、金丝雀发布
金丝雀发布就是先分发部分流量至一个小规模集群,出现故障则回滚至原来的集群,反馈较好则扩大集群将所有流量分发过去,金丝雀发布通常会结合监控系统,通过监控指标,观察金丝雀机器的健康状况。如果金丝雀测试通过,则把剩余的机器全部升级成新版本,否则回滚代码。
优点:
- 对用户体验影响较小,在金丝雀发布过程中,只有少量用户会受影响
- 发布安全能够得到保障
缺点:由于集群较小,很多问题不能暴露出来
适应场景: - 监控比较完备且与发布系统集成
3、灰度发布
灰度发布就是金丝雀发布的延伸,他和金丝雀发布一样,首先先发小部分流量至一个小规模集群,如果反馈较好,则夸大扩集群至下一阶段,总而言之就是将发布分成不同的阶段/批次,每个阶段/批次的用户数量逐级增加。如果新版本在当前阶段没有发现问题,就再增加用户数量进入下一个阶段,直至扩展到全部用户。
优点:
- 用户体验影响比较小, 不需要停机发布
- 能够控制发布风险
缺点 - 发布时间会比较长
- 需要复杂的发布系统和负载均衡器
- 需要考虑新旧版本共存时的兼容性
适用场景: - 适合可用性较高的生产环境发布
4、蓝绿发布
蓝绿发布就是部署两个完全一样、相互独立的集群,一开始用户使用的生产环境是绿环境,升级版本时部署至蓝环境,首先对蓝环境进行测试,合格则将路由切到蓝环境,如果有问题可以马上回滚回原来环境,在对蓝环境进行调试,修复之后在次切换
优势:
- 升级切换和回退速度非常快
- 零停机时间
缺点: - 一次性的全量切换,如果发布出现问题, 会对用户产生比较大的影响
- 需要两倍的机器资源
- 需要中间件和应用自身支持热备集群的流量切换
适用场景: - 机器资源比较富余或者按需分配 (背靠云厂商)
5、ab测试
ab测试与灰度非常相识,但是ab测试更加倾向于对a版本和b版本的差异进行决策,如通过细粒度的流量控制,把 50% 的用户总是引导到 A 实现上,把剩下的 50% 用户总是引导到 B 实现上,通过比较 A 实现和 B 实现的转化率,最终选择转化率较高的 A 实现作为功能的最终版本。
优势:
- 用户体验影响小
- 可以使用生产环境流量做测试
- 可以针对某些特定用户做测试
不足: - 需要较为复杂的业务流量识别和控制能力
- 需要考虑较为复杂的新旧版本兼容性问题
- 技术门槛高
适用场景: - 用来做业务探索和创新测试
- 对用户体验要求很高,确保应用发布风险受控。