文档中心>云函数>操作指南>别名管理>使用别名实现 SCF 灰度发布

使用别名实现 SCF 灰度发布

最近更新时间:2022-10-18 15:54:55

我的收藏

概述

使用云函数(Serverless Cloud Function,SCF)的别名可以实现云函数的灰度发布方案,其优势如下:
支持用户在多版本间按需分配流量,无需在外部或各触发器位置频繁修改设置。
支持流量平滑分配,避免流量漏发。
通过相同的流量切换方案,可以在故障时进行版本快速回退。
方案示意图如下所示:n
介绍图-中

n更多关于别名相关操作,请参见 别名管理相关操作

名词解释

函数、云函数(Function)

用户创建的云函数。

版本(Version)

云函数版本包含代码及函数配置信息,由具体的数字版本号指明,您可通过发布操作生成具体版本及版本号。仅支持修改最近版本的代码及配置,但任何版本都可被调用。更多云函数版本信息,请参见 版本管理概述

最近版本($LATEST)

可修改代码及配置的版本。创建函数后默认具有最近版本,进行发布时需使用最近版本发布带有数字版本号的具体版本。

别名(Alias)

别名名称可自定义,需使用英文字母开头的字符串指定。别名是可配置指向具体某一个或两个版本的引用。当指向两个版本时,可针对两个版本设置百分比流量。任何别名均可以被调用。

默认流量、默认别名($DEFAULT)

特殊别名,当调用请求未指定任何版本或其他别名时,缺省使用默认别名。默认别名缺省指向最近版本,支持修改版本指向。

方案示例

基于 API 网关触发器的使用示例

背景

用户已 创建云函数,且未发布新版本及创建别名。
用户期望区分测试环境、预发布环境和发布环境。云函数需在每个阶段测试后,再进入下一阶段。且期望发布时灰度流量,以确保平稳过渡上线期。n总体方案示意图如下:n
API网关-中



初始配置过程

1. 创建别名:n在云函数 B 中创建别名 release、prepub,可暂时指向 $LATEST 版本。n2. 创建 API 网关:n在 API 网关中创建服务 A,配置 API 指向函数 B 的别名 release,并发布到 API 服务的 release stage 中。如何创建并发布 API 请参见 API 创建API 发布。n3. 修改 API 配置:na. 指向函数 B 的别名 prepub,并发布到 API 服务的 prepub stage 中。nb. 指向函数 B 的默认流量,并发布到 API 服务的 dev stage 中。
至此已分离测试环境、预发布环境和发布环境,但三个环境均指向 $LATEST 版本。API 网关的配置已完成,后续无需再次修改及发布 API 网关配置。

开发测试发布过程:持续开发、测试、发布、上线

1. 发布版本:n在云函数上持续开发并依次发布版本1、2、3、4。假设版本1已在发布环境,版本2在预发布环境测试,版本3和版本4在测试环境测试。n2. 开发需要测试的最近版本:n配置 $DEFAULT 别名指向 $LATEST 版本,开发人员可基于此版本持续地进行开发,开发完成后可以发布版本。n3. 预发布环境测试:n假设版本3可进入预发布环境时,配置函数 B 的 prepub 别名指向版本3,即可在预发环境进行测试和体验。n4. 预发布环境按用户灰度:n假设版本4可进入预发布环境,需要将用户 Bob 的调用路由至函数 B 的版本4,将其他用户路由至版本3,将函数 B 的 prepub 别名配置为按规则路由,内容为 invoke.headers.User exact Bob。如何按规则路由,请参见 按规则路由。n5. 预发布环境至发布环境灰度发布:n假设版本2已经在预发布环境完成体验可以上线时,将函数 B 的 release 别名的流量配置逐渐从版本1切换至版本2,并在灰度的过程中持续观察。如何配置别名的流量,请参见 云函数流量路由配置。n6. 发布过程中持续监控:n通过监控及日志查看灰度过程,版本2的流量是否正常上涨,版本1的流量是否正常下降,监控发布过程中的各版本错误情况及总体错误情况。

回滚过程:发布有故障时及时回滚

假设版本2在上线时有故障,需回滚至之前版本,则修改云函数 B 的 release 别名流量全部指向版本1即可。

基于云 API invoke 接口的使用示例

背景

用户已 创建云函数,且未发布新版本及创建别名。
用户直接使用 API 或 SDK 运行云函数。
用户期望区分测试环境、预发布环境和发布环境。云函数需在每个阶段测试后,再进入下一阶段。且期望发布时灰度流量,以确保平稳过渡上线期。n总体方案示意图如下:n



初始配置过程

在云函数 B 中创建别名 release、prepub,可暂时指向 $LATEST 版本。

开发测试发布过程:持续开发、测试、发布、上线

1. 发布版本:n在云函数上持续开发并依次发布版本1、2、3、4。假设版本1已在发布环境,版本2在预发布环境测试,版本3和版本4在测试环境测试。n2. 开发需要测试的最近版本:n配置 $DEFAULT 别名指向 $LATEST 版本,开发人员可基于此版本持续地进行开发,开发完成后可以发布版本。n3. 预发布环境测试:n假设版本3可进入预发布环境时,配置函数 B 的 prepub 别名指向版本3,即可在预发环境进行测试和体验。n4. 预发布环境按规则路由:n假设版本4可进入预发布环境,开发人员可配置云函数 B 的按规则路由,自定义传入的 keyvalue,将其指向版本4。在 invoke 接口时,将键值对以 json 格式存入参数 RoutingKey 中,若 RoutingKey 中存在符合规则的键值对,则路由到版本4。如何按规则路由请参见 按规则路由通过 API 运行函数。n5. 预发布环境至发布环境灰度发布:n假设版本2已经在预发布环境完成体验可以上线时,将函数 B 的 release 别名的流量配置逐渐从版本1切换至版本2,在灰度的过程中持续观察。如何配置别名的流量,请参见 云函数流量路由配置。n6. 发布过程中持续监控:n通过监控及日志查看灰度过程,版本2的流量是否正常上涨,版本1的流量是否正常下降,监控发布过程中的各版本错误情况及总体错误情况。

回滚过程:发布有故障时及时回滚

假设版本2在上线时有故障,需回滚至之前版本,则修改云函数 B 的 release 别名流量全部指向版本1即可。

Serverless Cloud Framework 的使用示例

在使用 Serverless Cloud Framework 时,可以通过 stage 区分测试环境、预发布环境和发布环境。在发布环境灰度时,可使用以下命令实现逐步过渡。详细操作步骤请参见 使用 tencent-express 组件部署 express 网站
scf deploy --inputs.traffic=0.1 #部署并切换10%流量到$latest版本上
scf deploy --inputs.traffic=1.0 #部署并切换100%流量到$latest版本上
scf deploy --inputs.traffic=1.0 #部署并切换100%流量到$latest版本上