发布模式

发布模式

重建部署

版本A下线后版本B上线

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

优点:便于设置, 应用状态完整更新 缺点:对用户影响很大,预期的宕机时间取决于下线时间和应用启动耗时

滚动部署

又称 滚动更新或者增量发布

例如服务池有10个实例,

  1. 先增加2个新版本实例,
  2. 接收流量并且健康检查通过后;
  3. 下线旧版本 2 个实例;
  4. 循环上述过程直到全部更新。

相关参数

  1. 并行数,最大批量执行数:同时发布新实例的数目;
  2. 最大峰值:考虑到新增的实例数,即最大新旧副本数;
  3. 最大不可用数:在滚动更新过程中不可用的实例数;
  4. 最小可用数: 最少N个副本需要是正常的,才能进行下一轮次发布;

优点:

  • 便于设置
  • 版本在实例间缓慢发布
  • 对于能够处理数据重平衡的有状态应用非常方便

缺点:

  • 发布/回滚耗时
  • 支持多个API很困难, 即 API 兼容性保障难
  • 无法控制流量

蓝绿/部署

又名 红/黑

两种模式

  1. 日常情况下,环境由2个副本池运行,蓝绿各承担50%流量,蓝绿之间不存在互相调用;
  2. 日常只有1个区域, 旧区域下线时直接删除,新区域上线前创建。

发布过程

  1. 先将某一区的流量比例调整为0%
  2. 更新此区域的副本
  3. 调整新区的分流比例从 1%至5%进行验证,如果正常则提升至100% (旧区域减至0);
  4. 验证完全正常后,升级旧区域的应用版本;
  5. 最后流量再调整回各50%

如果升级失败则切换回旧副本。

优点:

  • 可以提前内部或小范围验证新环境, 实时发布、回滚,
  • 避免版本冲突问题,整个应用状态统一一次切换
  • 有一个单元总是可用的,回滚快速;

缺点:

  • 资源翻倍
  • 在发布版本到生产环境之前,整个平台的主流程测试必须执行
  • 处理有状态的应用很棘手

金丝雀部署

新版本向一小部分用户发布,验证后再完全放开。

通常流量是按比例分配的; 例如90%的请求流向版本A,10%的流向版本B;

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

优点:

  • 版本面向一部分用户发布
  • 方便错误评估和性能监控
  • 快速回滚

缺点:

  • 发布缓慢

A/B部署

与 金丝雀部署 模式类型,差别是 只将 符合特定条件的流量给到新版本。

用于测试特定功能的切换,并发布使用占大部分的版本

例如

  • 根据用户uid
  • 地理位置
  • 设备类型, 语言等

优点:

  • 多个版本并行运行;
  • 方便提前获得客户反馈,减少致命的影响和低级的错误;
  • 完全控制流量分布;

缺点:

  • 需要智能负载均衡网关和更高的自动化发布程度。
  • 对于给定的会话,很难定位问题,分布式跟踪是必须的

影子部署

即流量镜像模式

新版本B接受真实的业务流量请求,但是不产生响应; 例如大部分的查询类业务操作, 如果有写操作需要mork;

配置非常复杂,而且需要特殊条件,尤其是分出请求

优点:

  • 可以使用生产环境流量进行性能测试
  • 对用户无影响
  • 直到应用的稳定性和性能满足需求后才发布

缺点:

  • 双倍资源,成本昂贵
  • 配置复杂
  • 对于需要变更数据的业务操作要么关闭,要么定制操作;
  • 不是真实用户测试,可能出现误导
最后更新于