# 灰度 / 版本管理

微信开发者工具 1.02.2005112 起

云开发提供发布版本(快照)和多版本间调整流量比例的能力。借此能力用户可以完成灰度,同时可以灰度函数配置。

# 核心概念

云函数版本

一个云函数可以发布多个版本,一个版本就是一个函数在当前时刻的快照,包含其代码和配置(超时时间、环境变量等)。

云函数始终存在一个 LATEST 版,即最新版。编辑器中上传云函数和在控制台更改配置始终更改 LATEST 版本。

在发布版本时,总是从 LATEST 当前的状态发布一个版本(快照)。

要进行灰度,只需更改版本之前的流量配比,即可实现灰度。

流量比例

在没有设置流量比例前,默认情况下都是 100% 流量导向 LATEST 版本,在发布一个或多个版本后,即可调整各个版本之间的流量比例。

比如现在要进行灰度,首先我们发布版本 1,然后设置 100% 流量到版本 1,接着更改 LATEST 代码,此时希望 10% 的线上流量给到需要灰度观察的最新代码,则设置 10% 流量给到 LATEST,90% 流量给到 1

# 操作流程示例

# 1. 第一次灰度

此时云函数只有 LATEST 版本、没有快照,用户在本地改了代码后进行灰度的步骤:

  1. 用户在控制台中选择云函数,发布新版本 A,将流量设置为 100% 导向 A
  2. 用户在编辑器上传代码更新 LATEST
  3. 开始灰度 10%:用户将 LATESTA 的流量比例设为 10%、90%
    1. 需要 ”全量“ :用户从 LATEST 发布新版本 B,将流量 100% 导向 B
    2. 需要回退:用户将 LATEST 流量比例设为 0%

# 2. 第二次及之后灰度

此时云函数有 LATEST 版本和版本 A,100% 导向 A,要灰度只需更新 LATEST 然后调高比例。

# 3. 线上版本回退

比如此时 100% 导向 A,希望回退到 B,则调权使得 100% 导向 B

# 4. 配置灰度

假设此时云函数有 LATEST 版本和版本 A,100% 导向 A,此时想要更改云函数环境变量并灰度:

  1. 用户在控制台更改云函数的配置
  2. 用户从 LATEST 发布新版本 B
  3. 之后的操作同上述流程

# 其他说明

用户维度灰度

设置了流量配比后,如果一个用户被分配到了该流量区间,则该用户调用该云函数时一定会走到该流量区间对应的云函数版本,不会出现随机分配的现象。比如假设云函数 aLATEST 流量占比 10%,版本 1 占比 90%,如果该用户 openid_1 经系统判断落在了版本 1 上,则用户 openid_1 的对云函数 a 的请求都一定会落在版本 1 上,而不是 90% 概率到 1、10 % 概率到 LATEST。这种方式可以保证灰度的用户维度的一致性。