概述
使用云函数(Serverless Cloud Function,SCF)的别名可以实现云函数的灰度发布方案,其优势如下:
支持用户在多版本间按需分配流量,无需在外部或各触发器位置频繁修改设置。
支持流量平滑分配,避免流量漏发。
通过相同的流量切换方案,可以在故障时进行版本快速回退。
名词解释
函数、云函数(Function)
用户创建的云函数。
版本(Version)
云函数版本包含代码及函数配置信息,由具体的数字版本号指明,您可通过发布操作生成具体版本及版本号。仅支持修改最近版本的代码及配置,但任何版本都可被调用。更多云函数版本信息,请参见 版本管理概述。 最近版本($LATEST)
可修改代码及配置的版本。创建函数后默认具有最近版本,进行发布时需使用最近版本发布带有数字版本号的具体版本。
别名(Alias)
别名名称可自定义,需使用英文字母开头的字符串指定。别名是可配置指向具体某一个或两个版本的引用。当指向两个版本时,可针对两个版本设置百分比流量。任何别名均可以被调用。
默认流量、默认别名($DEFAULT)
特殊别名,当调用请求未指定任何版本或其他别名时,缺省使用默认别名。默认别名缺省指向最近版本,支持修改版本指向。
方案示例
基于 API 网关触发器的使用示例
背景
用户期望区分测试环境、预发布环境和发布环境。云函数需在每个阶段测试后,再进入下一阶段。且期望发布时灰度流量,以确保平稳过渡上线期。
总体方案示意图如下:
初始配置过程
1. 创建别名:
在云函数 B 中创建别名 release、prepub,可暂时指向 $LATEST 版本。
2. 创建 API 网关:
在 API 网关中创建服务 A,配置 API 指向函数 B 的别名 release,并发布到 API 服务的 release stage 中。如何创建并发布 API 请参见 API 创建 及 API 发布。
3. 修改 API 配置:
a. 指向函数 B 的别名 prepub,并发布到 API 服务的 prepub stage 中。
b. 指向函数 B 的默认流量,并发布到 API 服务的 dev stage 中。 至此已分离测试环境、预发布环境和发布环境,但三个环境均指向 $LATEST 版本。API 网关的配置已完成,后续无需再次修改及发布 API 网关配置。
开发测试发布过程:持续开发、测试、发布、上线
1. 发布版本:
在云函数上持续开发并依次发布版本1、2、3、4。假设版本1已在发布环境,版本2在预发布环境测试,版本3和版本4在测试环境测试。
2. 开发需要测试的最近版本:
配置 $DEFAULT 别名指向 $LATEST 版本,开发人员可基于此版本持续地进行开发,开发完成后可以发布版本。
3. 预发布环境测试:
假设版本3可进入预发布环境时,配置函数 B 的 prepub 别名指向版本3,即可在预发环境进行测试和体验。
4. 预发布环境按用户灰度:
假设版本4可进入预发布环境,需要将用户 Bob 的调用路由至函数 B 的版本4,将其他用户路由至版本3,将函数 B 的 prepub 别名配置为按规则路由,内容为 invoke.headers.User exact Bob
。如何按规则路由,请参见 按规则路由。
5. 预发布环境至发布环境灰度发布:
假设版本2已经在预发布环境完成体验可以上线时,将函数 B 的 release 别名的流量配置逐渐从版本1切换至版本2,并在灰度的过程中持续观察。如何配置别名的流量,请参见 云函数流量路由配置。
6. 发布过程中持续监控:
通过监控及日志查看灰度过程,版本2的流量是否正常上涨,版本1的流量是否正常下降,监控发布过程中的各版本错误情况及总体错误情况。 回滚过程:发布有故障时及时回滚
假设版本2在上线时有故障,需回滚至之前版本,则修改云函数 B 的 release 别名流量全部指向版本1即可。
基于云 API invoke 接口的使用示例
背景
用户直接使用 API 或 SDK 运行云函数。
用户期望区分测试环境、预发布环境和发布环境。云函数需在每个阶段测试后,再进入下一阶段。且期望发布时灰度流量,以确保平稳过渡上线期。
总体方案示意图如下:
初始配置过程
在云函数 B 中创建别名 release、prepub,可暂时指向 $LATEST 版本。
开发测试发布过程:持续开发、测试、发布、上线
1. 发布版本:
在云函数上持续开发并依次发布版本1、2、3、4。假设版本1已在发布环境,版本2在预发布环境测试,版本3和版本4在测试环境测试。
2. 开发需要测试的最近版本:
配置 $DEFAULT 别名指向 $LATEST 版本,开发人员可基于此版本持续地进行开发,开发完成后可以发布版本。
3. 预发布环境测试:
假设版本3可进入预发布环境时,配置函数 B 的 prepub 别名指向版本3,即可在预发环境进行测试和体验。
4. 预发布环境按规则路由:
假设版本4可进入预发布环境,开发人员可配置云函数 B 的按规则路由,自定义传入的 key
和 value
,将其指向版本4。在 invoke
接口时,将键值对以 json
格式存入参数 RoutingKey
中,若 RoutingKey
中存在符合规则的键值对,则路由到版本4。如何按规则路由请参见 按规则路由 及 通过 API 运行函数。
5. 预发布环境至发布环境灰度发布:
假设版本2已经在预发布环境完成体验可以上线时,将函数 B 的 release 别名的流量配置逐渐从版本1切换至版本2,在灰度的过程中持续观察。如何配置别名的流量,请参见 云函数流量路由配置。
6. 发布过程中持续监控:
通过监控及日志查看灰度过程,版本2的流量是否正常上涨,版本1的流量是否正常下降,监控发布过程中的各版本错误情况及总体错误情况。 回滚过程:发布有故障时及时回滚
假设版本2在上线时有故障,需回滚至之前版本,则修改云函数 B 的 release 别名流量全部指向版本1即可。
Serverless Cloud Framework 的使用示例
scf deploy --inputs.traffic=0.1 #部署并切换10%流量到$latest版本上
scf deploy --inputs.traffic=1.0 #部署并切换100%流量到$latest版本上
scf deploy --inputs.traffic=1.0 #部署并切换100%流量到$latest版本上
本页内容是否解决了您的问题?