作者:长淇

导读

本文合适:

想了解 Serverless 灰度发布的同学。

以为当时 Serverless 灰度发布装备太杂乱,寻求简洁版灰度发布流程的同学。

想了解 Serverless Devs 组件和插件之间联系的同学。

Serverless 灰度发布

什么是 Serverless ?

Serverless 顾名思义便是无服务器,它是一种“来了就用,功用完全,用完即走”的全新核算供给方法,用户无需预制或办理服务器即可运转代码,只需将代码从布置在服务器上,转换到布置到各厂商 Serverless 平台上;一起享受 Serverless 按需付费,高弹性,低运维成本,事情驱动,降本提效等优势。

什么是 Serverless 灰度发布?

灰度发布又称为金丝雀发布( Canary Deployment )。过去,矿工们下矿井前,会先放一只金丝雀到井内,假如金丝雀在矿井内没有因缺氧、气体中毒而死亡后,矿工们才会下井工作,能够说金丝雀保护了工人们的生命。

与此相似,在软件开发过程中,也有一只金丝雀,也便是灰度发布(Gray release):开发者会先将新开发的功用对部分用户敞开,当新功用在这部分用户中能够平稳运转并且反应正面后,才会把新功用敞开给一切用户。金丝雀发布便是从不发布,然后逐步过渡到正式发布的一个过程。

那么对于布置在 Serverless 平台上的函数应该怎么进行灰度发布呢?

下文将以阿里云函数核算 FC 为例,为各位展开介绍。

灰度发布有一个流程,两种方法。

一个流程

Serverless 灰度发布是经过装备别号来完结的,别号能够装备灰度版别和主版别的流量份额,在调用函数时运用装备好的别号即可将流量按份额发送到相应版别。

如何用一个插件解决 Serverless 灰度发布难题?

装备灰度发布的流程如下:

  1. Service 中发布一个新版别。
  2. 创立或更新别号,装备别号相关新版别和安稳版别,新版别即为灰度版别。
  3. 将触发器 ( Trigger ) 相关到别号。
  4. 将自界说域名 ( Custom Domain ) 相关到别号。
  5. 在调用函数中运用别号,流量会按装备份额发送到新版别和安稳版别。

传统做法的两种方法

1、阿里云控制台 web 界面:

a.发布版别

如何用一个插件解决 Serverless 灰度发布难题?

b.创立别号

如何用一个插件解决 Serverless 灰度发布难题?

c.相关触发器

如何用一个插件解决 Serverless 灰度发布难题?

d.相关自界说域名

如何用一个插件解决 Serverless 灰度发布难题?

2、运用 Serverless Devs cli

a.发布版别

s cli fc version publish --region cn-hangzhou --service-name fc-deploy-service --description "test publish version"

b.创立别号并设置灰度

s cli fc alias publish --region cn-hangzhou --service-name fc-deploy-service --alias-name pre --version-id 1 --gversion 3 --weight 20

c.相关触发器

需求到控制台装备

d.相关自界说域名

需求到控制台装备能够看到,运用控制台或 Serverless Devs 进行灰度发布流程中的每一步,都需求用户亲自操作。并且因为装备繁多,极易出错。除了这些弊端以外,客户困扰的另一个问题是运用灰度发布战略十分不方便。

常见的灰度发布战略有 5 种:

    1. CanaryStep: 灰度发布,先灰度指定流量,距离指守时间后再灰度剩余流量。
    2. LinearStep:分批发布,每批固定流量,距离指守时间后再开端下一个批次。
    3. CanaryPlans:自界说灰度批次,每批次设定灰度流量和距离时间,距离指守时间后依照设定的流量进行灰度。
    4. CanaryWeight:手动灰度,直接对灰度版别设置对应的权重。
    5. FullWeight: 全量发布,全量发布到某一版别。

这些灰度战略中,前三项都需求装备距离时间,而用户在控制台或者运用 Serverless Devs 东西去装备灰度都没有方法经过主动程序来装备距离时间,不得不经过闹钟等方法提示用户手动进行下一步灰度流程,这个体会是十分不友好的。下面咱们介绍个能够帮您一键灰度发布函数的插件:FC-Canary 。

根据 Serverless Devs 插件 FC-Canary 的灰度发布

为了应对以上问题,根据 Serverless Devs 的插件 FC-Canary 应运而生,该插件能够协助您经过 Serverless-Devs 东西和 FC 组件完结函数的灰度发布才能,有效处理灰度发布时参数装备繁杂、需求开发人员亲自操作以及可用战略少等问题。

如何用一个插件解决 Serverless 灰度发布难题?

(内容装备及注意事项-部分截图)

详细流程请见:github.com/devsapp/fc-…。

FC-Canary 的优势

1、FC-Canary 支撑超简装备

用户最短只需在 s.yaml 中增加 5 行代码代码即可开启灰度发布功用。

如何用一个插件解决 Serverless 灰度发布难题?

2、FC-Canary 装备指引简单明晰:

如何用一个插件解决 Serverless 灰度发布难题?

3、FC-Canary 支撑多种灰度战略

  • 灰度发布,先灰度指定流量,距离指守时间后再灰度剩余流量。

此刻流量改变为:20%流量到新版别,10 分钟后 100%流量到新版别

如何用一个插件解决 Serverless 灰度发布难题?

  • 手动灰度,指守时直接将灰度版别设置对应的权重。

此刻为 10%流量到新版别,90%到安稳版别

如何用一个插件解决 Serverless 灰度发布难题?

  • 自界说灰度,以数组的方法装备灰度改变。

此刻流量改变为:10%到新版别 -> (5 分钟后) 30% 流量到新版别 -> (10 分钟后) 100% 流量到新版别

如何用一个插件解决 Serverless 灰度发布难题?

  • 分批发布,不断累加灰度份额直到 100%流量到新版别。

流量改变:40%到新版别 -> (10 分钟后) 80%流量到新版别 -> (再 10 分钟后) 100%流量到新版别

如何用一个插件解决 Serverless 灰度发布难题?

  • 全量发布,100%流量发到新版别

如何用一个插件解决 Serverless 灰度发布难题?

FC-Canary 插件支撑上述 5 种灰度战略,用户选择所需战略并进行简单装备,即可体会一键灰度发布。

4、FC-Canary 灰度阶段提示明晰

如何用一个插件解决 Serverless 灰度发布难题?

插件对每一个里程碑都会以 log 的方法展示出来,给开发者满足的信心。

5、FC-Canary 支撑钉钉群组机器人提示

如何用一个插件解决 Serverless 灰度发布难题?

装备钉钉机器人即可在群中收到相关提示,例如:

如何用一个插件解决 Serverless 灰度发布难题?

FC-Canary 最佳实践

运用 FC-Canary 插件灰度发布 nodejs 12 的函数。

代码库房:

github.com/devsapp/fc-…

初始化装备

  • 代码装备

如何用一个插件解决 Serverless 灰度发布难题?

  • yaml 装备

如何用一个插件解决 Serverless 灰度发布难题?

咱们选用 canaryWeight 的灰度战略:灰度发布后,50%的流量到新版别,50%的流量到旧版别。

进行第一次发布

  1. 履行发布

在 terminal 中输入: s deploy –use-local

  1. 检查成果

命令行输出的 log 中能够看到:

如何用一个插件解决 Serverless 灰度发布难题?

因为是第一次发布,项目中不存在前史版别,所以即使装备了灰度发布战略 ,FC-Canary 插件也会进行全量发布,即流量都发送到版别 1。

修正代码,第2次发布

  1. 在第2次发布前,咱们修正一下代码,让代码抛出错误。

如何用一个插件解决 Serverless 灰度发布难题?

  1. 履行发布

在terminal中输入: s deploy –use-local

  1. 成果

命令行输出 log 中能够看到:

如何用一个插件解决 Serverless 灰度发布难题?

第2次发布,运用了灰度发布战略,即 50%流量发送到版别 1, 50%的流量发送到版别 2。

测试

获取 log 中输出的 domain,访问 domain 100 次后检查控制台监控大盘。

如何用一个插件解决 Serverless 灰度发布难题?

能够看到调用了函数 100 次,错误的函数有 49 次,正确的函数有 100 – 49 = 51 次,正确和错误的函数都约占总调用数的 50%。

分析:函数版别 1 为正确函数,函数版别 2 为错误函数,咱们的灰度装备为流量 50% 到版别 1,50% 到版别 2,所以调用过程中,错误函数和正确函数应该各占 50%,图中成果符合咱们的假设,这证明咱们的灰度战略是成功的。

总结

咱们能够发现比较运用控制台进行灰度发布,运用 FC-Canary 插件免去了用户手动创立版别、发布别号、相关触发器和办理自界说域名的麻烦,运用起来十分方便。

引申阅览

Serverless Devs 组件和插件的联系

  • 组件是什么?

根据 Serverless Devs Model v0.0.1 中说明, 组件 Component: 是由 Package developer 开发并发布的符合 Serverless Package Model 标准的一段代码,通常这段代码会在运用中被引用,并在 Serverless Devs 开发者东西中被加载,并依照预订的规矩进行履行某些动作。例如,将用户的代码布置到 Serverless 平台;将 Serverless 运用进行构建和打包;对 Serverless 运用进行调试等。

举个比如:

假如想要运用 Serverless Devs 办理阿里云函数核算的函数核算资源,则需求在 yaml装备文件中声明阿里云 FC 组件,之后便能够运用阿里云 FC 组件的才能。

FC 组件能够供给办理阿里云函数核算资源的才能,包含:办理服务、函数、版别、别号 等功用。组件地址:github.com/devsapp/fc

  • 插件是什么?

插件作为组件的补充,供给组件的原子性功用。

举个比如:

  1. 运用 FC 组件 deploy 的功用布置函数,能够在布置结束后选用 FC-Canary 插件对布置的函数进行灰度发布。
  2. 运用 FC 组件 deploy 的功用布置函数,能够在布置开端前选用 layer-fc 插件来下降布置过程中上传代码的耗时:即 layer-fc 能够让函数直接运用公共依靠库(长途)中的依靠,从而在布置时不再需求上传这些长途存在的依靠。
  • 组件和插件的联系?

如何用一个插件解决 Serverless 灰度发布难题?

  • 在 Serverless Devs Model 中,组件是占有中心位置,插件是辅助位置,也便是说,插件的意图是提高组件才能,供给给组件一些可选的原子性功用。

  • Serverless Devs 办理组件和插件的生命周期,假如是 pre 插件,则会让其在组件履行前履行,反之,post 插件则会在组件后完结一些收尾工作。

  • 一个组件能够一起运用多个插件, 其间组件插件的履行顺序是:

    1. 插件依照 yaml 顺序履行, 前一个插件的履行成果为后一个插件的入参
    2. 最终一个 pre 插件的输出作为组件的入参
    3. 组件的输出作为第一个 post 插件的入参

相关概念

  • FC 函数 (Function) 是体系调度和运转的单位,由函数代码和函数装备构成。FC 函数必须从属于服务,同一个服务下的一切函数同享一些相同的设置,例如服务授权、日志装备。函数的相关操作,请拜见 办理函数。函数核算支撑事情函数和 HTTP 函数两种函数类型,关于二者的区别,请拜见 函数类型。

  • 服务 (Service) 能够和微服务对标 ( 有版别和别号 ),多个函数能够一起组成服务单元。创立函数前必须先创立服务,同一个服务下的一切函数同享一些相同的设置,例如服务授权、日志装备。

  • 触发器 (Trigger) 的作用是触发函数履行的。函数核算供给了一种事情驱动的核算模型。函数的履行能够经过函数核算控制台或 SDK 触发,也能够由其他一些事情源来触发。您能够在指定函数中创立触发器,该触发器描述了一组规矩,当某个事情满足这些规矩,事情源就会触发相关的函数。

  • 自界说域名(Custom Domain) 是函数核算供给为 Web 运用绑定域名的才能。

  • 版别 (Version) 是服务的快照,包含服务的装备、服务内的函数代码及函数装备,不包含触发器,当发布版别时,函数核算会为服务生成快照,并主动分配一个版别号与其相关,以供后续运用。

  • 别号 (Alias) 结合版别,协助函数核算完结软件开发生命周期中的持续集成和发布。

最终,欢迎大家一起来奉献更多的开源插件!

参阅链接:

Serverless Devs:

github.com/Serverless-…

FC 组件地址:

github.com/devsapp/fc

FC-Canary 插件具体信息及其运用请参阅:

github.com/devsapp/fc-…

FC 函数办理:

help.aliyun.com/document_de…

FC 函数类型:

help.aliyun.com/document_de…