Serverless Devs 重大更新,基于 Serverless 架构的 CI/CD 框架:Serverless-cd
近日,Serverless 开发者平台 Serverless Devs 重磅发布基于 Serverless 架构的轻量级 CI/CD 框架——Serverless-cd。Serverless-cd 是一款运行在 Serverless 架构上的功能强大而灵活,安全,低成本的CI/CD开源框架。该框架基于 Serverless Devs 开发者工具打造,通过 Serverless-cd开发者可以快速构建企业内部应用管理PaaS平台。
开发者更想关注业务价值的创造
Serverless Devs 是CNCF 沙箱孵化项目,2020年由阿里云开源,它是一个开源开放的 Serverless 开发者平台,Serverless Devs 也是业内首个支持主流 Serverless 服务 / 框架的云原生全生命周期管理的平台,致力于为开发者打造 Serverless 应用开发一站式服务,帮助解决目前的工具链之困,让开发者一键体验多云产品,极速部署 Serverless 项目。
Serverless Devs 项目为应用的开发,调试,部署,运维,监控提供全生命周期的解决方案。在实际使用中,应用部署和交付对于开发者来说仍然是一个难题。开发者希望更专注于应用的开发和价值的创造——也就是关注代码编写和应用的构建,而非应用部署和交付。
在 Serverless-cd 项目发布之前,Serverless Devs 项目通过集成的方式,集成了主流的 CI/CD 工具:https://github.com/Serverless-Devs/cicd,如 Jenkins、Github、Gitlab 等,但使用这些传统的 CI/CD 工具一般会面临如下几个问题:
- 资源利用率低:需要提前准备构建机器,在没有构建任务时,机器资源浪费;
- 任务排队:如果资源准备不充足,在业务构建的高峰期间, 任务排队时间过长;
- 隔离性差:如果某个任务执行过程中消耗大量计算/存储资源,导致其他任务失败;
- 安全问题:
- 使用平台提供的CICD服务:代码和构建机器不在同一个网络环境,不得不开放公网访问,引起安全问题。
- ECS虚机部署:多个应用同时在一个实例构建,某个恶意应用可以访问其他的应用的代码
CI/CD 流水线的 2个特点
CI/CD 流水线有两个显著的特点:
- 事件驱动
无论是接收 Webhook 自动触发,还是调用 Open Api 手动触发,对于 CICD 系统来说都是被动接收指令进行消费
- 业务明显波峰波谷
触发 CI/CD 构建的高峰一般在上班的时间段中,下班后以及晚上构建任务比较少。同时有些任务执行非常耗时,有些任务又需要大量的CPU&内存资源,很难提前进行有效的容量预估。
- 机器资源准备过少:由于资源不足导致任务执行失败,或者多个任务进行资源抢占,一直无法执行。
- 机器资源准备过多:无法充分利用,造成资源闲置浪费。
基于Serverless架构的CI/CD优势
在 Serverless 架构下,CI/CD 可以具备以下优势
- 自动弹性
Serverless 平台会为每个构建任务分配一个全新的实例,保证每个任务之间互不影响。再也不用担心资源不足导致任务失败,也避免了由于资源不足导致任务一直排不上队的情况。
- 按价值付费
在业务波谷(晚上或者下班后)期,只有少量甚至没有任务执行,资源就出现了闲置和浪费。Serverless 的理念是帮助客户按实际产生的价值付费,只有实实在在的发生了构建行为,才会产生费用。
- 免运维
Serverless 弹性是按照请求进行水平扩容的,开发者无需关注底层资源调度和运维的工作,可以心无旁骛的实现业务开发和价值创造。
Serverless-cd 技术架构
Serverless-cd 是完全遵循 Serverless 架构最佳实践,在规范和生态层面参考 Github Action 的实现。下面是Serverless-cd 部署 Serverless Devs 应用的一段 YAML:
name: "Deploy Express application to FC"
steps:
- run: npm i @serverless-devs/s -g --registry=https://registry.npmmirror.com
- run: s -v
- run: echo ${{secrets.ALIYUN_ACCOUNTID}}
- run: echo ${{secrets.ALIYUN_AK}}
- run: echo ${{secrets.ALIYUN_SK}}
- run: s config add --AccountID ${{secrets.ALIYUN_ACCOUNTID}} --AccessKeyID ${{secrets.SIMPLE_ALIYUN_AK}} --AccessKeySecret ${{secrets.SIMPLE_ALIYUN_SK}} -a default -f
- run: s deploy --use-local -y
Serverless-cd 采用的是经典的 Master Worker 模型,采用事件驱动的架构,整体的架构如下图:
触发方式
触发器承担事件驱动中的生产者的角色,Serveless-cd暂时提供了三种触发方式:
- 通过Webhook自动触发:
开发者可以配置对应的触发条件:比如Push到Master分支,发起Merge Request。这是一种非常敏捷的开发和交付的方式
- 通过Open api触发:
Serverless cd平台的所有的能力都提供开放了Open api。以便开发者更好的构建企业内部的PaaS平台
- 通过CLI触发:
从技术的角度来看Serverless-Devs本质是一个CLI工作,提供了组件化的能力,所谓的组件化也就是通过热更新的机制,让开发者根据自己的需求进行拓展。Serverless-cd通过自定义组件,让开发者可以通过通过命令行直接操作。
当然我们也在计划接入更多的触发类型,比如 cloudevents 触发, 定时触发等
Serverless(FaaS) 平台
FaaS平台是整个平台的核心部分,承担事件驱动中的消费者角色,采用的是经典的 Master Worker 模型。
Master Worker 模型在 Serverless 架构的优势
传统的Master Woker部署,为了保证Master节点的高可用,需要部署三个节点搭配负载均衡以及健康检查,来保证Master节点高可用。在Serverless架构中,实例会根据请求自动弹性扩容,Master节点天然具备高可用能力,无论在可靠性,还是灵活性都有较大的优势
Master 函数作用
Master 函数本质是一个 HTTP 类型函数,作为整体流量的入口,同时也是整个系统的大脑,承担着非常重要职责。
- 安全保障
- 公网密钥校验
Master 暴露的 URL 地址是可以公网访问的,为了防范恶意请求,serverless-cd 系统在下发 URL 的同时也会下发签名规则。如果是恶意的请求,就无法通过校验,来保证系统的安全性 - VPC 绑定
也支持绑定VPC环境,代码仓库和serverless-cd 服务绑定在同一个VPC环境,通过Webhook触发。公网用户无法直接访问,从网络上保证了绝对的安全
- 过滤请求
我们每天在 Git Repository 会触发各种事件,比如新建 ISSUE,PUSH 代码,发起 Merge Request 等。这些动作都会通过 Webhook 触发,开发者可以配置规则过滤相关事件。下面是一个示例:代表在 GitHub 平台提交到Master 的代码才会触发
triggers:
github:
events:
- eventName: "push"
filter: 'body.ref in ["refs/heads/master"]'
- 路由转发
Master 函数负责将请求分发给 Worker 函数,Worker 函数所有的行为都由 Master 函数控制
Worker函数作用
Worker 函数本质是一个事件(Event)函数,只和 Master 函数通信,唯一的职责是处理 Pipeline,可以长时间运行。
自定义 pipeline
serverless-cd 支持三种方式自定义 pipeline
shell 脚本
shell 脚本是最容易理解也是使用最广泛的
name: "shell example"
steps:
- run: echo Hello world
zx 脚本
google/zx 允许开发者通过javascript语法来编写您的Shell脚本
name: "zx example"
steps:
- script: 'const listFile = await $`ls -la`; console.log(listFile)',
使用自定义应用(NPM Package)进行扩展
Serverless-cd也支持封装通用的NPM包进行扩展:比如钉钉通知,企业微信通知,OSS文件上传等通用能力,都可以通过自定义应用扩展。自定义应用本质是发布在NPM仓库的包。
name: "zx example"
steps:
- run: @serverless-cd/dingding
快速体验
提前准备
serverless-cd 部署完全是基于云进行,依赖相关云产品也是Serverless化。
- 函数计算FC:整个系统的计算能力运行在FC上
- 日志服务SLS:分布式日志存储服务,更好的定位和发现问题
- 对象存储OSS:用于存储日志信息
- 表格存储Tablestore: 应用和任务的云数据信息存储
本地部署
- 下载安装 Serverless Devs:
npm install @serverlesss-devs -g
(版本必须大于2.1.7),详细操作引导请参考Serverless Devs 安装文档 - 配置密匙信息:
s config add
, 详细操作引导请参考配置阿里云秘钥 - 初始化项目:
s init serverless-cd
- 进入项目并部署:
cd serverless-cd && s deploy
Serverless-cd RoadMap
开源共建
Serverless-cd 是业界首个基于 Serverless 架构的 CI/CD 的探索,欢迎大家关注我们的开源地址:https://github.com/Serverless-Devs/serverless-cd 。Serverless-cd 刚刚开源,还有大量的细节和工作,期待与更多开发者一起共建 Serevrless 生态,让开发者可以心无旁骛的专注业务开发和价值创造。
更多内容关注 Serverless 微信公众号(ID:serverlessdevs),汇集 Serverless 技术最全内容,定期举办 Serverless 活动、直播,用户最佳实践。
Serverless Devs 重大更新,基于 Serverless 架构的 CI/CD 框架:Serverless-cd的更多相关文章
- 重磅 | 阿里开源首个 Serverless 开发者平台 Serverless Devs
Serverless 从概念提出到应用,已经走过了 8 个年头,开发者对 Serverless 的使用热情不断高涨.为帮助开发者实现一键体验多云产品,极速部署 Serverless 项目,10 月 2 ...
- Serverless Kubernetes全面升级2.0架构:支持多命名空间、RBAC、CRD、PV/PVC等功能
Serverless Kubernetes概述: 阿里云Serverless Kubernetes容器服务最新开放香港.新加坡.悉尼区域,同时全面开放2.0架构,帮助用户更加便捷.轻松地步入“以应用为 ...
- 暑期 2021 | Serverless Devs 最全项目申请攻略来啦!
Serverless 是近年来云计算领域热门话题,凭借极致弹性.按量付费.降本提效等众多优势受到很多人的追捧,各云厂商也在不断地布局 Serverless 领域.但是随着时间的发展,Serverles ...
- Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试 (转)
环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_ ...
- Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试
环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_ ...
- Vertica: 基于DBMS架构的列存储数据仓库
介绍 Vertica(属于HP公司),是一个基于DBMS架构的数据库系统,适合读密集的分析型数据库应用,比方数据仓库,白皮书中全名称为VerticaAnalytic Database.从命名中也可以看 ...
- Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试【转】
环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_ ...
- 庐山真面目之十一微服务架构手把手教你搭建基于Jenkins的企业级CI/CD环境
庐山真面目之十一微服务架构手把手教你搭建基于Jenkins的企业级CI/CD环境 一.介绍 说起微服务架构来,有一个环节是少不了的,那就是CI/CD持续集成的环境.当然,搭建CI/CD环境的工具很多, ...
- 如何基于LSM-tree架构实现一写多读
一 前言 PolarDB是阿里巴巴自研的新一代云原生关系型数据库,在存储计算分离架构下,利用了软硬件结合的优势,为用户提供具备极致弹性.海量存储.高性能.低成本的数据库服务.X-Engine是阿里巴 ...
- 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查
Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...
随机推荐
- AntDesignBlazor示例——列表查询条件
本示例是AntDesign Blazor的入门示例,在学习的同时分享出来,以供新手参考. 示例代码仓库:https://gitee.com/known/AntDesignDemo 1. 学习目标 重构 ...
- windows中MySQL忘记密码
前言: 一直都是连接公司项目数据库,许久未连接本地的数据库,密码忘记了 步骤: 进入本机安装mysql的bin目录下 暂停mysql服务 net stop mysql 设置跳过密码授权登录 my ...
- 神经网络入门篇:详解参数VS超参数(Parameters vs Hyperparameters)
参数 VS 超参数 什么是超参数? 比如算法中的learning rate \(a\)(学习率).iterations(梯度下降法循环的数量).\(L\)(隐藏层数目).\({{n}^{[l]}}\) ...
- jvm的jshell,学生的工具
jshell 在我眼里,只能作为学校教学的一个玩具,事实上官方也做了解释,以下是官方的解释: 在学习编程语言时,即时反馈很重要,并且 它的 API.学校引用远离Java的首要原因 教学语言是其他语言 ...
- Codeforces Round 906 (Div. 2)A-E1
A. Doremy's Paint 3 记数组中数的种类数为\(k\),当\(k=1\)时,答案为\(yes\):当\(k=2\)时,记两个种类的数的个数差为\(d\),当\(d≤1\)时,答案为\( ...
- 华企盾DSC防泄密:有一个文件申请解密失败,提示拒绝访问(密钥不对)
解决方法:将文件拖到加密进程中提示密钥不对,找到原来的数据库还原解密
- Android中使用Gson
Gson是一个Java库,可用于将Java对象转换为它们的JSON表示.它还可以用于将JSON字符串转换为等效的Java对象.Gson可以处理任意Java对象,包括您没有源代码的已有对象. 一.简单使 ...
- Oracle数据库运维场景下,智能运维如何落地生根?
简介: 「智能运维大数据平台」是一款开箱即用的运维监控平台,通过特有的平台功能可以将企业的基础架构.应用程序.日志管理结合在一起,提供统一采集.统一存储.关联分析.统一监控企业业务保障能力,保障企业业 ...
- python异步编程之asyncio低阶API
低阶API介绍 asyncio中低阶API的种类很多,涉及到开发的5个方面.包括: 获取事件循环 事件循环方法集 传输 协议 事件循环策略 本篇中只讲解asyncio常见常用的函数,很多底层函数如网络 ...
- Odoo16—级联删除
我们在odoo中构建业务系统模块的时候,通常会使用one2many.many2one或many2many将模型进行关联,由此产生的数据也会通过外键发生关联.那么在odoo中删除数据的时候,如何关联删除 ...