灰度发布(又称为金丝雀发布)是一种平滑过渡的发布方式,将老版本应用与新版本应用同时部署在环境中,让一部分用户继续使用老版本应用,一部分用户开始使用新版本应用,然后根据用户使用情况调整新版本流量占比,逐步把所有用户都迁移到新版本应用。

应用场景

互联网产品需要快速迭代开发上线,同时又要保证质量。为保证刚上线的系统出现问题后可以很快控制影响,需要设计一套灰度发布系统,按照发布策略选取部分用户流量,先行使用新版本应用,然后通过收集这部分用户对新版本应用的反馈,以及新版本应用的日志、性能、稳定性等指标来评审新版应用。根据评审情况,决定是否继续增加新版本的应用实例和流量,直至全量升级,或者发现问题后及时回滚到老版本。

准备工作

  1. 将您的老版本业务和新版本业务分别部署在不同的服务器,为了增加业务处理能力,请分别部署在多台服务器上。
  2. 创建ALB实例,基础版ALB实例不支持条件类型为Cookie的规则,需要创建标准版ALB实例。具体操作,请参见创建应用型负载均衡
  3. 创建服务器组,将承载老版本应用和新版本应用的服务器组分别加入不同的服务器组。具体操作,请参见管理服务器组
  4. 创建监听,并将监听默认服务器组设置为老版本应用服务器组。具体操作,请参见添加HTTP监听添加HTTPS监听添加QUIC监听

    此时用户请求将全部转发至老版本应用。本文提供以下三种不同的灰度方式,您可以根据需要选择一种或多种搭配使用。

基于HTTP标头实现灰度发布

本示例将用户请求中HTTP标头键是user-agent、值是*Mozilla/4.0*的访问转发至新版本应用。

header
  1. 登录应用型负载均衡ALB控制台
  2. 在顶部菜单栏,选择ALB实例所属的地域。
  3. 实例页面,单击目标实例ID。
  4. 监听页签,找到目标监听,然后在操作列单击查看/编辑转发规则
  5. 转发规则页签,单击插入新规则
  6. 配置转发规则,然后单击确定
    header
    • 转发条件:在下拉列表中选择HTTP标头,然后将键设置为user-agent,值设置为*Mozilla/4.0*
    • 转发动作:在下拉列表中选择转发至,然后选择新版本应用对应的服务器。
    更多参数说明,请参见管理监听转发规则
    说明 您可以根据需要增加转发条件来增加新版本应用的流量,待运行一段时间稳定后,将所有的流量从老版本应用切换到新版本应用中,平滑地将老版本应用下线。

基于Cookie实现灰度发布

本示例将用户请求中Cookie为key:value的访问转发至新版本应用。

cookie
  1. 登录应用型负载均衡ALB控制台
  2. 在顶部菜单栏,选择ALB实例所属的地域。
  3. 实例页面,单击目标实例ID。
  4. 监听页签,找到目标监听,然后在操作列单击查看/编辑转发规则
  5. 转发规则页签,单击插入新规则
  6. 配置转发规则,然后单击确定
    cookie
    • 转发条件:在下拉列表中选择Cookie,然后设置为keyvalue
    • 转发动作:在下拉列表中选择转发至,然后选择新版本应用的服务器。如果域名example1.com,那么转发至RS1。
    更多参数说明,请参见管理监听转发规则
    说明 您可以根据需要增加转发条件来增加新版本应用的流量,待运行一段时间稳定后,将所有的流量从老版本应用切换到新版本应用中,平滑地将老版本应用下线。

基于不同服务器组实现灰度发布

本示例将域名为example.com的访问分别转发至老版本应用和新版本应用,且老版本应用和新版本应用接收的请求比重分别为80%和20%。

比例灰度
  1. 登录应用型负载均衡ALB控制台
  2. 在顶部菜单栏,选择ALB实例所属的地域。
  3. 实例页面,单击目标实例ID。
  4. 监听页签,找到目标监听,然后在操作列单击查看/编辑转发规则
  5. 转发规则页签,单击插入新规则
  6. 配置转发规则,然后单击确定
    转发规则
    • 转发条件:在下拉列表中选择域名,然后将域名设置为example.com
    • 转发动作:在下拉列表中选择转发至,然后选择老版本应用服务器组(权重80)和新版本应用服务器组(权重20)。
    更多参数说明,请参见管理监听转发规则
    说明 您可以根据需要调整服务器组权重来增加新版本应用的流量占比,待运行一段时间稳定后,将所有的流量从老版本应用切换到新版本应用中,平滑地将老版本应用下线。