基本复制自https://mp.weixin.qq.com/s/1r4feSe5XQcx-6UqhZau7Q
目前有各种各样的技术来将新应用部署到生产环境,所以权衡对系统和终端用户的影响降至最少,选择正确的方式是非常重要的。
本文将着重讨论如下部署策略:
- 重建部署:版本A下线后版本B上线
- 滚动部署(滚动更新或者增量发布):版本B缓慢更新并替代版本A
- 蓝绿部署:版本B并行与版本A发布,然后流量切换到版本B
- 金丝雀部署:版本B向一部分用户发布,然后完全放开
- A/B部署:版本B只向特定条件的用户发布
- 影子部署:版本B接受真实的流量请求,但是不产生响应
1. 重建策略
重建策略是一个冗余的方式,它包含下线版本A,然后部署版本B。这个方式意味着服务的宕机时间依赖于应用下线和启动耗时。
优点:
- 便于设置
- 应用状态完整更新
- 简单成本低
缺点:
- 对用户影响很大,预期的宕机时间取决于下线时间和应用启动耗时
2. 滚动部署
滚动部署策略是指通过逐个替换应用的所有实例,来缓慢发布应用的一个新版本。通常过程如下:在负载调度后有个版本A的应用实例池,一个版本B的实例部署成功,可以响应请求时,该实例被加入到池中。然后版本A的一个实例从池中删除并下线。
考虑到滚动部署依赖于系统,可以调整如下参数来增加部署时间:
- 并行数,最大批量执行数:同时发布实例的数目
- 最大峰值:考虑到当前实例数,实例可以加入的数目
- 最大不可用数:在滚动更新过程中不可用的实例数
优点:
- 便于设置
- 版本在实例间缓慢发布
- 对于能够处理数据重平衡的有状态应用非常方便
缺点:
- 发布/回滚耗时
- 支持多个API很困难
- 无法控制流量
3. 蓝绿部署
蓝绿部署策略与滚动部署不同,版本B(绿)同等数量的被并排部署在版本A(蓝)旁边。当新版本满足上线条件的测试后,流量在负载均衡层从版本A切换到版本B。
优点:
- 实时发布、回滚
- 避免版本冲突问题,整个应用状态统一一次切换
缺点:
- 比较昂贵因为需要双倍的资源
- 在释放版本到生产环境之前,整个平台的主流程测试必须执行
- 处理有状态的应用很棘手
4. 金丝雀部署
也叫灰度发布
金丝雀部署是指逐渐将生产环境流量从版本A切换到版本B。通常流量是按比例分配的。例如90%的请求流向版本A,10%的流向版本B。
这个技术大多数用于缺少足够测试,或者缺少可靠测试,或者对新版本的稳定性缺乏信心的情况下。
优点:
- 版本面向一部分用户发布
- 方便错误评估和性能监控
- 快速回滚
缺点:
- 发布缓慢
5. A/B测试
A/B测试是指在特定条件下将一部分用户路由到新功能上。它通常用于根据统计来制定商业决策,而不是部署策略。然而,他们是相关的,可以在金丝雀部署方式上添加额外功能来实现,所以我们这里简要介绍一下。
这个技术广泛用于测试特定功能的切换,并发布使用占大部分的版本。
下面是可以用于在版本间分散流量的条件:
- 浏览器cookie
- 查询参数
- 地理位置
- 技术支持:浏览器版本、屏幕尺寸、操作系统等
- 语言
优点:
- 多个版本并行运行
- 完全控制流量分布
缺点:
- 需要智能负载均衡
- 对于给定的会话,很难定位问题,分布式跟踪是必须的
6. 影子部署
影子部署是指在版本A旁边发布版本B,将版本A进来的请求同时分发到版本B,同时对生产环境流量无影响。这是测试新特征在产品负载上表现的很好用的方式。当满足上线要求后,则触发发布新应用。
这个技术配置非常复杂,而且需要特殊条件,尤其是分出请求。例如一个购物车平台,如果你想影子测试支付服务,你可能最终会是用户为他们的订单支付两次。这种情况下,可以通过创建一个仿真的服务来重复响应用户的请求。
优点:
- 可以使用生产环境流量进行性能测试
- 对用户无影响
- 直到应用的稳定性和性能满足要求后才发布
缺点:
- 双倍资源,成本昂贵
- 不是真实用户测试,可能出现误导
- 配置复杂
- 某种情况下需要模拟服务
7. 总结
部署应用有很多种方法,实际采用哪种方式取决于需求和预算。当发布到开发或者模拟环境时,重建或者滚动部署是一个好选择。当发布到生产环境时,滚动部署或者蓝绿部署通常是一个好选择,但是新平台的主流程测试是必须的。
蓝绿部署和影子部署对预算有更高的要求,因为需要双倍资源。如果应用缺乏测试或者对软件的功能和稳定性影响缺乏信心,那么可以使用金丝雀部署或者AB测试或者影子发布。如果业务需要根据地理位置、语言、操作系统或者浏览器特征等这样参数来给一些特定的用户测试,那么可以采用AB测试技术。
最后但并不是最不重要的,影子发布很复杂,且需要额外工作来模拟响应分支流量请求,当可变操作(邮件、银行等)调用外部依赖时这是必须的,这个技术在升级新数据库是非常有用,使用影子流量来监控负载下的系统性能。
8. 参考资料
https://mp.weixin.qq.com/s/1r4feSe5XQcx-6UqhZau7Q