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

导读
本文适合:
想了解 Serverless 灰度发布的同学。
认为当前 Serverless 灰度发布配置太复杂,寻求简洁版灰度发布流程的同学。
想了解 Serverless Devs 组件和插件之间关系的同学。

Serverless 灰度发布

什么是 Serverless ?

Serverless 顾名思义就是无服务器,它是一种“来了就用,功能齐全,用完即走”的全新计算提供方式,用户无需预制或管理服务器即可运行代码,只需将代码从部署在服务器上,转换到部署到各厂商 Serverless 平台上;同时享受 Serverless 按需付费,高弹性,低运维成本,事件驱动,降本提效等优势。

什么是 Serverless 灰度发布?

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

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

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

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

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

一个流程

Serverless 灰度发布是通过配置别名来实现的,别名可以配置灰度版本和主版本的流量比例,在调用函数时使用配置好的别名即可将流量按比例发送到相应版本。

配置灰度发布的流程如下:

  1. Service 中发布一个新版本。
  2. 创建或更新别名,配置别名关联新版本和稳定版本,新版本即为灰度版本。
  3. 将触发器 ( Trigger ) 关联到别名。
  4. 将自定义域名 ( Custom Domain ) 关联到别名。
  5. 在调用函数中使用别名,流量会按配置比例发送到新版本和稳定版本。

传统做法的两种方式

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

a.发布版本

b.创建别名

c.关联触发器

d.关联自定义域名

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 组件实现函数的灰度发布能力,有效解决灰度发布时参数配置繁杂、需要开发人员亲自操作以及可用策略少等问题。

(内容配置及注意事项-部分截图)

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

FC-Canary 的优势

1、FC-Canary 支持超简配置

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

2、FC-Canary 配置指引简单清晰:

3、FC-Canary 支持多种灰度策略

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

此时流量变化为:20%流量到新版本,10 分钟后 100%流量到新版本

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

此时为 10%流量到新版本,90%到稳定版本

  • 自定义灰度,以数组的方式配置灰度变化。

此时流量变化为:10%到新版本 -> (5 分钟后) 30% 流量到新版本 -> (10 分钟后) 100% 流量到新版本

  • 分批发布,不断累加灰度比例直到 100%流量到新版本。

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

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

FC-Canary 插件支持上述 5 种灰度策略,用户选择所需策略并进行简单配置,即可体验一键灰度发布。

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

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

5、FC-Canary 支持钉钉群组机器人提醒

配置钉钉机器人即可在群中收到相关提醒,例如:

FC-Canary 最佳实践

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

代码仓库:

https://github.com/devsapp/fc-canary/tree/main/example/singleFunc-http

初始化配置

  • 代码配置

  • yaml 配置

我们采用 canaryWeight 的灰度策略:灰度发布后,50%的流量到新版本,50%的流量到旧版本。

进行第一次发布

  1. 执行发布

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

  1. 查看结果

命令行输出的 log 中可以看到:

由于是第一次发布,项目中不存在历史版本,所以即使配置了灰度发布策略 ,FC-Canary 插件也会进行全量发布,即流量都发送到版本 1。

修改代码,第二次发布

  1. 在第二次发布前,我们修改一下代码,让代码抛出错误。

  1. 执行发布

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

  1. 结果

命令行输出 log 中可以看到:

第二次发布,应用了灰度发布策略,即 50%流量发送到版本 1, 50%的流量发送到版本 2。

测试

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

可以看到调用了函数 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 组件可以提供管理阿里云函数计算资源的能力,包括:管理服务、函数、版本、别名 等功能。组件地址:https://github.com/devsapp/fc
  • 插件是什么?
插件作为组件的补充,提供组件的原子性功能。

举个例子:

  1. 使用 FC 组件 deploy 的功能部署函数,可以在部署结束后采用 FC-Canary 插件对部署的函数进行灰度发布。
  2. 使用 FC 组件 deploy 的功能部署函数,可以在部署开始前采用 layer-fc 插件来降低部署过程中上传代码的耗时:即 layer-fc 可以让函数直接使用公共依赖库(远程)中的依赖,从而在部署时不再需要上传这些远程存在的依赖。
  • 组件和插件的关系?

  • 在 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:

https://github.com/Serverless-Devs/Serverless-Devs/

FC 组件地址:

https://github.com/devsapp/fc

FC-Canary 插件具体信息及其使用请参考:

https://github.com/devsapp/fc-canary

FC 函数管理:

https://help.aliyun.com/document_detail/73338.htm

FC 函数类型:

https://help.aliyun.com/document_detail/61009.htm

作者:长淇

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510689.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云云原生一体化数仓 — 分析服务一体化新能力解读

分析服务一体化一直都是阿里云离线实时一体化数仓的重要能力创新 分析服务一体化需求分析 业务在线化、运营精细化驱动数据实时化 随着互联网的信息,业务对于在线化、运营精细化的需求日益强烈,领导驾驶舱、实时大屏等,起到了越来越重要的…

一位 sealer maintainer 的心路历程

引言 在 2021 年四月左右,我有幸在 sealer 启动初期了解到其相关工作,并且不久后就作为初始的几位开发同学之一,加入到了 sealer 的开发工作中。 本文,我将回顾个人参与 sealer 开源项目的机缘巧合,参与过程中的挑战…

龙蜥社区开源 coolbpf,BPF 程序开发效率提升百倍

引言 BPF 是一个新的动态跟踪技术,目前这项技术正在深刻的影响着我们的生产和生活。BPF 在四大应用场景发挥着巨大作用: 系统故障诊断:它可以动态插桩透视内核。网络性能优化:它可以对接收和发送的网络包做修改和转发。系统安全…

线上故障突突突?如何紧急诊断、排查与恢复

概述 稳定性大于一切,因此我们需要有更有效的方式避免线上故障。在发生故障不可避免的假设下,我们需要能够快速修复,减少线上影响。基于以上这些想法,我们提出了 1-5-10 的快恢目标,所谓 1-5-10 的目标就是是要我们对…

巧用 API 网关构建大型应用体系架构

近期阿里云重磅发布了BizWorks一体化的云原生应用的开发和运营平台,内置阿里巴巴业务中台构建的最佳技术实践。BizWorks提供的产品能力,普遍适用于企业云原生应用高效开发以及企业业务能力沉淀和复用的场景。BizWorks提供业务架构师一整套的可视化业务建…

可观测|时序数据降采样在 Prometheus 实践复盘

基于 Prometheus 的监控实践中,尤其是在规模较大时,时序数据的存储与查询是其中非常关键,而且问题点较多的一环。如何应对大数据量下的长周期查询,原生的 Prometheus 体系并未能给出一个令人满意的答案。对此,ARMS Pro…

倒计时1天!中国移动算力网络创新成果即将发布!

数字时代,随着计算机技术的普及,电脑及相关电子产品日新月异,给人们日常生活带来了翻天覆地的变化。多样化的电脑功能提高了各项事务协同管理的便捷性,电脑游戏也极大地丰富了人们的娱乐生活。未来电脑又会使人们的办公模式、娱乐…

托管式服务网络:云原生时代的应用体系架构进化

背景 回顾下应用服务架构体系的演进。从服务调用方与提供方的处理方式来看, 可以分为 3 个阶段。 第一个阶段是集中式负载均衡, 也就是说服务调用方是通过一个外部的负载均衡路由到对应的服务提供方。其优势显而易见, 对应用本身无侵入, 可以支持多语言多框架来开发实现应用本…

科普达人丨一文看懂阿里云的秘密武器“神龙架构”

在一台电脑中,我们把CPU和硬盘比作一家公司的加工厂和仓库,那么两个部门的任务就是处理数据和存储数据。 但是因为土地价格和劳动力价格差异较大等因素,需要将两个部门分别建在不同的地方,这也就是在云上的情况,也就是…

卓越工程实践之—前端高质量单测

高单测等于高质量? 笔者负责的npm包是 ICBU信天翁低代码平台渲染引擎,160应用 600页面基于该引擎开发,内网日npm下载 1K。经过不懈努力(CV),终于把单测提到了95%。 然而,虽然在覆盖率上获得了…

中国移动云电脑重磅发布,又一场革命到来!

12 月 11 日,2022 中国移动全球合作伙伴大会产业链创新暨算力网络分论坛顺利举办。会上,中国移动基于算力网络战略下的扛鼎力作——中国移动云电脑重磅发布!中国移动云能力中心总经理方力表示:“它将会成为中国移动算力网络对外输…

PolarDB-X 如何做分布式数据库热点分析

背景 PolarDB-X是一款计算存储分离的分布式数据库,分布式的处理能力是PolarDB-X的核心特性之一,单个数据库实例的多个计算节点会均摊全部的SQL流量,这样就可以通过节点的扩缩容来快速满足不同的流量峰值场景。 在PolarDB-X 1.0时代&#xff…

说说关系型数据库与Serverless

它是站在海岸遥望海中已经看得见桅杆尖头了的一只航船,它是立于高山之巅远看东方已见光芒四射喷薄欲出的一轮朝日,它是躁动于母腹中的快要成熟了的一个婴儿。-- 星星之火,可以燎原一、关于Serverless 看到如今Serverless在云计算行业喷薄欲出…

历时4年打磨,可信执行环境操作系统Occlum 1.0发布

12月10日,由中国计算机协会主办的2022中国计算机大会(CNCC2022)在线上举行,由蚂蚁集团主导开源的可信执行环境(TEE)操作系统Occlum 1.0在“可信隐私计算研讨会”上发布。Occlum是机密计算领域核心开源软件之…

全链路压测:影子库与影子表之争

业界盛传的全链路压测是什么 全链路压测诞生于阿里巴巴双 11 备战过程,如果说双 11 大促是阿里业务的“期末考试”,全链路压测就是大考前的“模拟考试”,诞生后被誉为双 11 稳定性保障的“核武器”。全链路压测通过在生产环境对业务大流量场…

当我们谈论不可变基础设施时,我们在谈论什么

午夜时分,电话响起,线上告急。你从千呼万钉中醒来,睡眼朦胧,手忙脚乱。 恍惚之间,终于梳理清楚发生了什么,一个陈年老应用突然停机,消息堆积,系统停摆。而你就像一个下水道小工疏通…

主流电脑形态大变革,云电脑才是未来?

数字技术与实体经济加速融合的时代,传统 PC 形态正面临着运算效率、成本、安全等多方面的挑战。首先是信息处理需求的爆发式增长,推动着人们对大算力应用的需求升级,终端的计算、储存能力更多地向云端转移。其次,复杂的国际形势下…

10亿+/秒!看阿里如何搞定实时数仓高吞吐实时写入与更新

导读:Hologres(原交互式分析)是阿里云自研的一站式实时数仓,这个云原生系统融合了实时服务和分析大数据的场景,全面兼容PostgreSQL协议并与大数据生态无缝打通,能用同一套数据架构同时支持实时写入实时查询…

阿里云云原生一体化数仓 — 数据建模新能力解读

DataWorks智能数据建模-产品建设背景 2009年,DataWorks就已经在阿里巴巴集团立项,支撑阿里巴巴数据中台建设,一路见证阿里巴巴大数据建设之路。2020年之前,DataWorks支持的是开发视角、自底向上、小步快跑,快速满足业…

如何快速理解复杂业务,系统思考问题?

正视复杂性 我们必须承认这个世界原本就非常复杂,就像以我们现在的科技仍然不能攻克新冠病毒、不能精确预测天气、不能有效控制经济形势异常波动一样,任何试图浮于表面、疏于投入就想了解并解决一个复杂问题的傲慢做法,最终都只能接受无情的…