首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

应用部署的六种策略

目前有各种各样的技术来将新应用部署到生产环境,所以权衡对系统和终端用户的影响降至最少,选择正确的方式是非常重要的。

本文将着重讨论如下部署策略:

重建部署:版本A下线后版本B上线

滚动部署(滚动更新或者增量发布):版本B缓慢更新并替代版本A

蓝绿部署:版本B并行与版本A发布,然后流量切换到版本B

金丝雀部署:版本B向一部分用户发布,然后完全放开

A/B部署布:版本B只向特定条件的用户发布

影子部署:版本B接受真实的流量请求,但是不产生响应

我们来看一下每个策略最适合哪种用户使用场景。为了简化,我们使用Kubernetes,并用Minikube进行例子演示。每个策略的配置例子和详细步骤都可以在这个Git仓库[1]上找到。

重建策略

重建策略是一个冗余的方式,它包含下线版本A,然后部署版本B。这个方式意味着服务的宕机时间依赖于应用下线和启动耗时。

优点:

便于设置

应用状态完整更新

缺点:

对用户影响很大,预期的宕机时间取决于下线时间和应用启动耗时

滚动部署

滚动部署策略是指通过逐个替换应用的所有实例,来缓慢发布应用的一个新版本。通常过程如下:在负载调度后有个版本A的应用实例池,一个版本B的实例部署成功,可以响应请求时,该实例被加入到池中。然后版本A的一个实例从池中删除并下线。

考虑到滚动部署依赖于系统,可以调整如下参数来增加部署时间:

并行数,最大批量执行数:同时发布实例的数目

最大峰值:考虑到当前实例数,实例可以加入的数目

最大不可用数:在滚动更新过程中不可用的实例数

优点:

便于设置

版本在实例间缓慢发布

对于能够处理数据重平衡的有状态应用非常方便

缺点:

发布/回滚耗时

支持多个API很困难

无法控制流量

蓝绿部署

蓝绿部署策略与滚动部署不同,版本B(绿)同等数量的被并排部署在版本A(蓝)旁边。当新版本满足上线条件的测试后,流量在负载均衡层从版本A切换到版本B。

优点:

实时发布、回滚

避免版本冲突问题,整个应用状态统一一次切换

缺点:

比较昂贵因为需要双倍的资源

在释放版本到生产环境之前,整个平台的主流程测试必须执行

处理有状态的应用很棘手

金丝雀部署

金丝雀部署是指逐渐将生产环境流量从版本A切换到版本B。通常流量是按比例分配的。例如90%的请求流向版本A,10%的流向版本B。

这个技术大多数用于缺少足够测试,或者缺少可靠测试,或者对新版本的稳定性缺乏信心的情况下。

优点:

版本面向一部分用户发布

方便错误评估和性能监控

快速回滚

缺点:

发布缓慢

A/B测试

A/B测试是指在特定条件下将一部分用户路由到新功能上。它通常用于根据统计来制定商业决策,而不是部署策略。然而,他们是相关的,可以在金丝雀部署方式上添加额外功能来实现,所以我们这里简要介绍一下。

这个技术广泛用于测试特定功能的切换,并发布使用占大部分的版本。

下面是可以用于在版本间分散流量的条件:

浏览器cookie

查询参数

地理位置

技术支持:浏览器版本、屏幕尺寸、操作系统等

语言

优点:

多个版本并行运行

完全控制流量分布

缺点:

需要智能负载均衡

对于给定的会话,很难定位问题,分布式跟踪是必须的

影子部署

影子部署是指在版本A旁边发布版本B,将版本A进来的请求同时分发到版本B,同时对生产环境流量无影响。这是测试新特征在产品负载上表现的很好用的方式。当满足上线要求后,则触发发布新应用。

这个技术配置非常复杂,而且需要特殊条件,尤其是分出请求。例如一个购物车平台,如果你想影子测试支付服务,你可能最终会是用户为他们的订单支付两次。这种情况下,可以通过创建一个仿真的服务来重复响应用户的请求。

优点:

可以使用生产环境流量进行性能测试

对用户无影响

直到应用的稳定性和性能满足要求后才发布

缺点:

双倍资源,成本昂贵

不是真实用户测试,可能出现误导

配置复杂

某种情况下需要模拟服务

总结

部署应用有很多种方法,实际采用哪种方式取决于需求和预算。当发布到开发或者模拟环境时,重建或者滚动部署是一个好选择。当发布到生产环境时,滚动部署或者蓝绿部署通常是一个好选择,但是新平台的主流程测试是必须的。

蓝绿部署和影子部署对预算有更高的要求,因为需要双倍资源。如果应用缺乏测试或者对软件的功能和稳定性影响缺乏信心,那么可以使用金丝雀部署或者AB测试或者影子发布。如果业务需要根据地理位置、语言、操作系统或者浏览器特征等这样参数来给一些特定的用户测试,那么可以采用AB测试技术。

最后但并不是最不重要的,影子发布很复杂,且需要额外工作来模拟响应分支流量请求,当可变操作(邮件、银行等)调用外部依赖时这是必须的,这个技术在升级新数据库是非常有用,使用影子流量来监控负载下的系统性能。

下表可以帮助你选择正确的策略:

取决于云服务提供商和平台,如下文档是理解部署的很好开始:

Amazon Web Services[2]

Docker Swarm[3]

Google Cloud[4]

Kubernetes[5]

我希望这是有用的,如果有任何问题或者反馈,可以在下面评论。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171223B03GP000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券