tencent cloud

文档反馈

使用别名实现 SCF 灰度发布

最后更新时间:2024-04-19 15:48:17

    概述

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

    名词解释

    函数、云函数(Function)

    用户创建的云函数。

    版本(Version)

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

    最近版本($LATEST)

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

    别名(Alias)

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

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

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

    方案示例

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

    背景

    用户已 创建云函数,且未发布新版本及创建别名。
    用户期望区分测试环境、预发布环境和发布环境。云函数需在每个阶段测试后,再进入下一阶段。且期望发布时灰度流量,以确保平稳过渡上线期。 总体方案示意图如下:
    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 的按规则路由,自定义传入的 keyvalue,将其指向版本4。在 invoke 接口时,将键值对以 json 格式存入参数 RoutingKey 中,若 RoutingKey 中存在符合规则的键值对,则路由到版本4。如何按规则路由请参见 按规则路由通过 API 运行函数5. 预发布环境至发布环境灰度发布: 假设版本2已经在预发布环境完成体验可以上线时,将函数 B 的 release 别名的流量配置逐渐从版本1切换至版本2,在灰度的过程中持续观察。如何配置别名的流量,请参见 云函数流量路由配置6. 发布过程中持续监控: 通过监控及日志查看灰度过程,版本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版本上
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持