上云无忧 > 文档中心 > 腾讯云 Serverless 应用中心 - 灰度发布
Serverless 应用中心
腾讯云 Serverless 应用中心 - 灰度发布

文档简介:
概述: 灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。Serverless 应用的灰度发布是配置云函数别名的流量规则,针对别名中两个不同版本的云函数进行流量规则配置。Serverless Cloud Framework 支持的两种方式别名配置:默认别名和自定义别名。
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

概述

灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。Serverless 应用的灰度发布是配置云函数别名的流量规则,针对别名中两个不同版本的云函数进行流量规则配置。Serverless Cloud Framework 支持的两种方式别名配置:默认别名自定义别名

默认别名

默认别名是配置云函数的 $default(默认流量)别名。该别名中固定有两个云函数版本,一个为 $latest 版本,一个为最后一次函数发布的版本。部署时配置的 traffic 参数为 $latest 版本流量占比,默认另一部分流量切到当前云函数最后一次发布的版本。
每次上线一个新功能,执行 scf deploy 会部署到 $latest 版本上。我们将切部分流量在 $latest 版本上进行观察,然后逐步将流量切到 $latest 版本。当流量切到 100% 时,我们会固化这个版本,并将流量全部切到固化后的版本。

命令说明

说明
旧版本命令为 scf deploy --inputs.key=value。Serverless CLI V3.2.3 后命令统一格式为 scf deploy --inputs key=value ,旧版本命令在新版本 Serverless CLI 中不可用,升级 Serverless CLI 的用户请使用新版本命令。

函数发布版本

部署时发布项目下所有函数版本:
		
scf deploy --inputs publish=true

函数流量设置

部署后切换 20% 流量到 $latest 版本:
		
scf deploy --inputs traffic=0.2
Serverless Cloud Framework 流量切换修改的是云函数别名为 $default 的流量规则。
每次配置针对的是 $latest,最后一次云函数发布的版本的配置。
traffic 配置的值为 $latest 版本对应的流量占比,最后一次云函数发布的版本的流量占比为 1-$latest 流量占比。例如 traffic=0.2,实则配置 $default 的流量规则为 {$latest:0.2, 最后一次云函数发布的版本:0.8}。
如果函数还未发任何固定版本,只存在 $latest 版本的函数情况下,traffic 无论如何设置,都会是 $latest:1.0。

操作步骤

当一个功能测试完毕,需要进行灰度发布,操作如下:
1. 配置生产环境信息到 .env 文件(STAGE=prod 为生产环境):
		
TENCENT_SECRET_ID=xxxxxxxxxx
TENCENT_SECRET_KEY=xxxxxxxx
STAGE=prod
2. 部署到线上环境 $latest,并切换 10% 的流量在 $latest 版本(90% 的流量在最后一次发布的云函数版本 N 上):
		
scf deploy --inputs traffic=0.1
3. 对 $latest 版本进行监控与观察,等版本稳定之后把流量 100% 切到该版本上:
		
scf deploy --inputs traffic=1.0
4. 流量全部切换成功后,对于一个稳定版本,我们需要对它进行标记,以免后续发布新功能时,如果遇到线上问题,方便快速回退版本。部署并发布函数版本 N+1,切换 100% 流量到版本 N+1:
		
scf deploy --inputs publish=true traffic=0

自定义别名

自定义别名可以通过命令创建别名,指定两个云函数版本配置流量比。使用自定义别名进行灰度发布时,先将新功能发布到一个新版本上,然后修改别名配置,切部分流量在该版本上进行观察,最后逐步将流量切到该版本。
自定义别名提供了灵活的版本切换,配置相对于默认别名的方式更复杂,适用于对灰度发布能力要求比较高的业务场景。
说明:
目前自定义别名只支持云函数(SCF)组件,其他组件请使用默认别名方式配置。

命令说明

函数发布版本

不部署直接给函数 my-function 发版本:
		
scf publish-ver --inputs function=my-function

创建别名

给云函数 my-function 创建别名 routing-alias,路由规则为版本1流量为50%,版本2流量为50%:
		
scf create-alias --inputs name=routing-alias function=my-function version=1
config='{"weights":{"2":0.5}}'

更新别名

更新云函数 my-function 别名 routing-alias 的流量规则为版本1流量为10%,版本2流量为90%:
		
scf update-alias --inputs name=routing-alias function=my-function version=1 config='{"weights":{"2":0.9}}'

列举别名

列举云函数 my-function 别名 routing-alias:
		
scf list-alias --inputs function=my-function

删除别名

删除云函数 my-function 的别名 routing-alias:
		
scf delete-alias --inputs name=routing-alias function=my-function

操作步骤

当一个功能测试完毕,需要进行灰度发布,操作如下:
1. 配置生产环境信息到 .env 文件(STAGE=prod 为生产环境):
		
TENCENT_SECRET_ID=xxxxxxxxxx
TENCENT_SECRET_KEY=xxxxxxxx
STAGE=prod
2. 创建别名 alias-prod,配置 alias-prod 的流量规则(假设目前线上稳定版本为 N):
		
scf create-alias --inputs function=my-function name=alias-prod version=n config='{"weights":{"$LATEST":0}}'
3. 配置 my-function 函数的 serverless.yml 中触发器对应的别名引用:
		
events: # 触发器
- timer: # 定时触发器
name: #触发器名称,默认 timer-${name}-${stage}
parameters:
qualifier: alias-prod #配置别名为 alias-prod
cronExpression: '*/5 * * * *' # 每 5 秒触发一次
enable: true
argument: argument # 额外的参数
4. 部署到线上环境 $latest,并发布该新版本(假设函数名为 my-function,发布后的新版本为 N+1):
		
scf deploy
scf publish-ver --inputs function=my-function
5. 配置云函数别名流量规则,切换10%的流量到 N+1 版本(假设原线上版本为 N,云函数中的别名为 alias-prod):
		
scf update-alias --inputs function=my-function name=alais-prod version=n config='{"weights":{"n+1":0.1}}'
6. 持续观察监控,稳定后切换100%到版本 N+1 上:
		
scf update-alias --inputs function=my-function name=alais-prod version=n config='{"weights":{"n+1":1}}'
相似文档
  • 操作场景: Serverless Cloud Framework 提供了多个基础资源组件,用户可以通过不同组件的结合使用,快速完成云端资源的创建与部署,本教程将指导您如何使用已有组件,构建您自己的多组件 Serverless 应用模板。
  • 由于云函数限制,目前只支持上传小于50MB的代码包,当您的项目过大时,您可以将依赖放在层中而不是部署包中,可确保部署包保持较小的体积。层的具体使用请参考 层管理相关操作。
  • 通过 Serverless Component 快速构建一个 Serverless Web 网站服务后,如果您希望配置自定义域名及支持 HTTPS 的访问,则可以按照本文提供的两种方案快速配置。
  • 本文为您介绍 Serverless Cloud Framework 的几种授权方式以及通过配置子账号权限进行实际操作演示。 前提条件: Serverless Cloud Framework 帮助您将项目快速部署到腾讯云 Serverless 应用中心,因此在部署前,请确认您已经 注册腾讯云账号 并完成 实名认证。
  • 除了默认角色 SLS_QcsRole 外,主账号还可自行创建多个角色,并将它们分配给每个子用户,各子用户根据自身业务需求只具有相应角色所赋予的策略,达到权限收缩的目的,流程图如下:
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部