即学即会 Serverless | 如何解决 Serverless 应用开发部署的难题?
本文节选自《Serverless 开发速查手册》,关注Serverless 公众回复 手册 即可获得下载链接

作者 | 江昱(阿里云 Serverless 产品经理)
破局:工具链体系匮乏之困
在前篇《即学即会 Serverless | 初识 Serverless》一文中,我们提到 Serverless 正在改变未来软件开发的模式和流程,并被预测将引领云计算的下一个十年,但尽管如此,开发者在选择使用 Serverless 时仍有诸多担忧,这其中最受关注的无疑就是工具链体系的匮乏。
所谓工具链的匮乏:一方面表现在市面上工具链不完善,这导致开发和部署难度大,进而增加成本;另一方面表现在,缺乏相关的工具链在体验层将 Serverless 体验进一步规范,优质工具链的匮乏导致本来就担心被厂商绑定的 Serverless 开发者变得更难与厂商解绑。
2020 年 10 月,中国信息通信研究院发布国内首个《云原生用户调查报告》明确指出在使用 Serverless 架构之前,49% 的用户考虑部署成本,26% 的用户考虑厂商绑定情况,24% 的用户考虑相关工具及完善程度,这些数据背后透露的实际上是:开发者对于完善工具链的强烈需求。
尽管,有一些开发者认为入门 Serverless 架构,通过白屏化的操作相对来说会更容易入门,在一定程度上通过各个云厂商的控制台进行函数的创建、更新,也会更加地方便。但是不可否定的是,Serverless 开发者工具在一定程度上其实有着更为重要的价值和作用,譬如:
- 通过脚手架,能够快速创建 Serverless 架构的应用;
- 在开发过程中,通过开发者工具可以进行应用的调试等;
- 在开发完成之后,通过开发者工具能够将应用一键部署到线上(可能包括多个函数以及相对应的 BaaS 类产品);
- 项目运维阶段,使用开发者工具进行项目的可观测以及问题定位等;
若需要实现科学部署,通过某些 CI/CD 平台/工具发布 Serverless 架构的应用,通常是离不开开发者工具的;但是就目前来看,Serverless 领域的开发者工具复杂多样,且诸多功能并不完善,基本表现在:
并没有绝对统一 & 一致的 Serverless 开发者工具,每个厂商都有自己的开发者工具,而且使用形式、行为表现并不相同,这就导致了开发者在开发前的调研、开发中的调试、部署后的运维等多个层面面临很严峻的挑战;
绝大部分的 Serverless 开发者工具更多是资源编排、部署工具,并不能真正意义上称之为开发工具、运维工具,尤其在开发态的调试如何保证线上线下环境的一致性;
如何在运维态可以快速的对业务进行调试;如何更简单的排查错误,定位问题......等方面并没有统一的、完整的方案,这就导致 Serverless 架构的学习成本、使用成本对开发者来说会变的非常高;
综上所述,出现一个可以提升 Serverless 应用开发效能,降低 Serverless 架构使用难度的 Serverless 工具链体系建设,显得尤为重要,也正是因为此,Serverless Devs 应运而生。
Serverless Devs 是一个开源开放的 Serverless 开发者平台,致力于为开发者提供强大的工具链体系。通过该平台,各位开发者不仅可以一键体验多云 Serverless 产品,极速部署 Serverless 项目,还可以在 Serverless 应用全生命周期进行项目的管理,能够非常简单快速的将 Serverless Devs 与其他工具/平台进行结合,进一步提升研发、运维效能。
Serverless Devs 的特点
无厂商锁定:得益于功能的可插拔特性,可以非常简单的支持不同云厂商的项目部署,或者一键部署到不同云平台。目前 Serverless Devs 已经支持了阿里云函数计算、AWS Lambda 、百度智能云函数计算 、华为云函数工作流 、腾讯云云函数等多云的 FaaS 产品;
开源形式建设:项目通过开源代码,开放生态进行建设,开发者可以随时查看和参与 Serverless Devs 开发者工具的贡献,也可以随时随地进行相关组件和应用的贡献。当然,除了这种开源开放的形态,我们也鼓励一些企业级团队,通过 Serverless Registry Model 建设自己的私有 Registry 以定制化某些不便公开的自定义组件;
关于如何快速完成 Serverless Devs 应用开发并发布到 Regsitry 可查阅相关文档:
https://github.com/Serverless-Devs/Serverless-Devs/discussions/439
简单快速上手:通过开放 Serverless Registry 的模型/规范,该项目可以通过应用的模式,为开发者提供多种形式,多种领域以及多种场景的上手案例,帮助开发者快速了解、学习、深入、上手 Serverless 架构,例如新手引导中的 Serverless:Hello World;人工智能:目标检测;传统框架:基于 Django 的博客项目等项目;

场景体验地址:
https://developer.aliyun.com/adc/expo/serverless
功能灵活可插拔:Serverless Devs 开发者工具本身,不具备任何业务能力,所有的业务能力均是通过组件化的形式,进行可插拔式使用,并且每个组件可以根据需要,自定义相对应的命令和功能;开发者可以在一个应用中,选择不同的组件完成对应的业务能力,以满足对不同模块的诉求;
应用全生命周期管理:通过组件化的支持,Serverless Devs 可以在应用的全生命周期发挥重要作用,以阿里云函数计算的 FC 组件为例,开发者可以在项目创建、项目的开发、调试、可观测性等多个层面进行项目的建设和管理;
良好的集成与被集成性:项目具有非常好的集成性与被集成性,可以通过组件化的支持,非常简单的与传统的生态进行有机结合。同时,Serverless Devs 开发者工具也可以非常简单的被集成到海量的自动化流程中,例如 CI/CD 文档中,就举例了与 Github Action 的集成、与 Gitee Go 的集成、与 Jenkins 的集成等平台集成的案例;
总的来说,Serverless Devs 是一个开源开发的 Serverless 领域的工具链项目,它不仅仅表示单纯的某个命令行工具,更在一定程度上指的是一个完整的工具链体系。
社区网址一览(可滑动):
社区官网:http://www.serverless-devs.com/
项目仓库:https://github.com/Serverless-Devs/Serverless-DevsServerlessDesktop
桌面客户端:https://serverlessdevs.resume.net.cn/zh-cn/desktop/index.htmlServerless
应用开发者套件:http://serverless-dk.oss.devsapp.net/docs/tutorialdk/intro/react
Serverless Devs CLI:https://serverlessdevs.resume.net.cn/zh-cn/cli/index.html
Serverless Hub应用中心 :https://serverlesshub.resume.net.cn/#/hubs/special-view
Serverless Devs 的成长之路
- 2020年10月23日,Serverless 开发者平台 Serverless Devs 正式开源;
- 2020年11月,Serverless Devs 被 CNCF Landsacpe 收录, 成为国内首个进驻的 Serverless 工具;
- 2020年11月,入围 InfoQ 评选 2020 年度十大开源新锐项目;同年,Serverless Developer Meetup 首召开,成 Serverless 开发者技术新渠道;
- 2020年12月,ServerlessDevs 下载次数突破 5000,组件 & 应用累计使用次数突破 1w+;
- 2021年4月,Serverless Developer Meetup 在上海召开,并正式发布 Serverless Devs 2.0 版本;
- 2021年7月,Serverless Developer Meetup 在杭州召开,阿里云函数计算团队在会上正式发布端云联调、桌面客户端等功能;
- 2021年8月,Serverless Devs 下载次数突破 2w+;
- 2021年10月,在 2021 OpenInfra Days China 会议上,Serverless Devs 带来了《Serverless Devs:Serverless 全生命周期的工具链建设》的主题演讲;
- 2021年12月,Serverless Developer Meetup 在深圳召开,并尝试性的对外展示了 Serverless Devs Model;
Serverless Devs 的设计哲学
Serverless Devs 的模型设计原则,是希望可以通过更加简单、科学、规范的 Serverless 工具链体系,让开发者更专注于业务逻辑,提升 Serverless 应用开发、部署、运维效率。
通过该模型,开发者可以通过一种更灵活、更通用的方法使用不同云厂商以及开源的 Serverless 产品,进而更高效、更简洁、更便利的实现 Serverless 应用管理。在 Serverless Devs 中,通常拥有两个角色:
开源贡献者:开源贡献者将按照 Serverless Package Model 进行组件/应用的开发,并将内容发布到 Serverless Hub 中,即可以被更多人所使用;
Serverless 开发者:通过开发者工具 (包括命令行工具以及桌面端等工具),进行应用的初始化,以及组件的使用;通过开发者工具,将业务按照预期部署到线上。

在这样一个 Serverless Devs 的应用框架上,不难发现可以和其他任何一种模式/生态,具有相似的命名以及模块:
Serverless Hub:类似于一种组件、应用、案例中心;类似于 Docker Hub 等;
Serverless Registry:类似于一种组件、应用的管理工具或者规范模型;类似于 Python 生态中的 Pypi,类似于 Node.js 生态中的 NPM;
下面我们再详细地介绍一下,在 Serverless Hub 中,其实是有两种形态的 Package (组件和应用),同时通过上图也可以看到两个比较明显的词汇:Component 和 Application:
Component:指的是组件;是由 Package developer 开发并发布的符合 Serverless Package Model 规范的一段代码,通常这段代码会在应用中被引用,并在 Serverless Devs 开发者工具中被加载,并按照预定的规则进行执行某些动作。例如,将用户的代码部署到 Serverless 平台;将 Serverless 应用进行构建和打包;对 Serverless 应用进行调试等;
Application:指的是应用,可以由 Package Developer 公开发布到 Registry,以供更多人学习和使用,例如某位贡献者贡献了一个猫狗识别的案例到 Registry;也可以由 Serverless Developer 开发,例如某人开发了一个人脸识别的应用;通常情况下一个应用可以引用一个或者多个组件,并通过 Serverless Devs 开发者工具部署到 Serverless 平台,例如我开发了一个猫狗识别的应用,在这个应用中引用了 Lambda 组件帮助我将部分业务逻辑部署到 FaaS 平台,同时我也引用了 Website 组件帮助我把前端业务代码部署到对象存储中。
如果说 Serverless 提升了传统应用的开发效能,那么 Serverless Devs 开发者工具就是提升了 Serverless 应用开发的效能。随着时间的发展,Serverless Devs 也从 1.0 版本 到了 2.0 版本。
结语
本篇介绍了 Serverless Devs 的前世今生,实际上,我们一直希望可以通过 Serverless Devs 的工具链模式和思路,让各位通过该平台能够一键体验多云 Serverless 产品,极速部署 Serverless 项目;为应用的开发,传统项目上 Serverless 架构提供巨大的便利和更科学的管理。在下篇文章中,我们会带领各位一起实现 Serverless Devs 的基础入门,十分简单,并会就一些功能案例进行刨析解读,欢迎关注 Serverless 公众号(serverlessdevs)连续订阅该系列。
更多内容关注 Serverless 微信公众号(ID:serverlessdevs),汇集 Serverless 技术最全内容,定期举办 Serverless 活动、直播,用户最佳实践。
即学即会 Serverless | 如何解决 Serverless 应用开发部署的难题?的更多相关文章
- 云开发如何解决serverless对端的最后一公里问题
前端圈从来不缺少新的技术.点子和话题,有些留下来了而有些则转瞬即逝.在决定一种新技术是否能够长久的所有因素里,最核心的必然是自身实力过硬能够经受住实践检验.而除此之外,这项技术所解决问题的广泛程度.受 ...
- Serverless 工程实践 | Serverless 应用优化与调试秘诀
作者|刘宇 前言:本文将以阿里云函数计算为例,提供了在线调试.本地调试等多种应用优化与调试方案. Serverless 应用调试秘诀 在应用开发过程中,或者应用开发完成,所执行结果不符合预期时,我 ...
- 重磅 | 阿里开源首个 Serverless 开发者平台 Serverless Devs
Serverless 从概念提出到应用,已经走过了 8 个年头,开发者对 Serverless 的使用热情不断高涨.为帮助开发者实现一键体验多云产品,极速部署 Serverless 项目,10 月 2 ...
- Serverless 初体验:快速开发与部署一个Hello World(Java版)
昨天被阿里云的这个酷炫大屏吸引了! 我等85后开发者居然这么少!挺好奇到底什么鬼东西都是90.95后在玩?就深入看了一下. 这是一个关于Serverless的体验活动,Serverless在国内一直都 ...
- Serverless Kubernetes 和 Serverless on Kubernetes 的区别
什么是 Kubernetes? Kubernetes 是一个可移植的.可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化. 什么是 Serverless ? 无服务器是一种云原 ...
- IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法IIS上部署MVC网站,打开后500错误
IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法 IIS上部署MVC网站,打开后500错误:处理程序“ExtensionlessUrl ...
- 借助AMD来解决HTML5游戏开发中的痛点
借助AMD来解决HTML5游戏开发中的痛点 游戏开发的痛点 现在,基于国内流行引擎(LayaAir和Egret)和TypeScript的HTML5游戏开发有诸多痛点: 未采用TypeScript编译器 ...
- 杨学明老师推出全新课程--《敏捷开发&IPD和敏捷开发结合的实践》
课时:13小时(2天) 敏捷开发&IPD和敏捷开发结合的实践 讲 师:杨学明 [课程背景] 集成产品开发(IPD).集成能力成熟度模型(CMMI).敏捷开发(Agile Developmen ...
- 解决多人开发时使用window.onload的覆盖问题
通用型小函数:解决多人开发时,同时使用window.onload事件所出现的后面的window.onload函数覆盖前面一个window.onload函数的问题. function addLoadEv ...
- 解决django配合nginx部署后admin样式丢失
解决django配合nginx部署后admin样式丢失 1. 在项目的settings.py文件里添加以下内容: STATIC_URL = '/static/' STATICFILES_DIRS = ...
随机推荐
- mysql数据库数据同步几种通用方法?
MySQL数据库数据同步的几种通用方法包括以下几个方面: 一.基于主从同步 主从同步是 MySQL 数据库最为常见和基本的同步方式,即其中一台 MySQL 服务器作为主服务器(Master),另外一台 ...
- Kylin Linux Advanced Server V10 上安装 Nacos详细步骤
要在 Kylin Linux Advanced Server V10 上安装 Nacos,可以按照以下进行操作:1.安装 Java JDK:首先确保已在 Kylin Linux Advanced Se ...
- LR(1)分析法
SLR(1)方法的出现,解决了大部分的移进和规约冲突.规约和规约的冲突.并且SLR(1)其优点是状态数目少,造表算法简单,大多数程序设计语言基本上都可用SLR(1)文法来描述. 但是仍然有一些文法,不 ...
- 一文搞定K8S监控告警平台选型
公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享 前言 最近在搞K8S的监控告警平台选型,对比了目前比较流行两款开源平台kube-prometheus.夜莺,也踩了一些坑分享 ...
- 一键打包,随时运行,Python3项目虚拟环境一键整合包的制作(Venv)
之前我们介绍了如何使用嵌入式 Python3 环境给项目制作一键整合包,在使用嵌入式 Python 环境时,通常是作为另一个应用程序的一部分,而Python3虚拟环境是为了在开发过程中隔离项目所需的 ...
- 首次引入大模型!Bert-vits2-Extra中文特化版40秒素材复刻巫师3叶奈法
Bert-vits2项目又更新了,更新了一个新的分支:中文特化,所谓中文特化,即针对中文音色的特殊优化版本,纯中文底模效果百尺竿头更进一步,同时首次引入了大模型,使用国产IDEA-CCNL/Erlan ...
- k8s环境设置-pod下载及重启策略
k8s环境设置 在我们开始使用k8s之前,我们可以先做一些环境配置,使k8s更加的方便使用 第一个要做的就是kubectl命令的补全 在使用kubectl的时候你会发现参数你是Tab不出来的,这时候我 ...
- IPv6实现内网穿透,极低成本保姆级教程
摘要 一直想实现内网穿透从而达到随时随地可以连接到自己电脑的目的.尝试过使用一些付费的现成方案,但是价格偏高,而流量少得可怜,只能开放几个固定端口. 实现内网穿透的最大难点就在于拥有一个公网IP,但是 ...
- Java 并发编程(四)同步工具类
本文使用的 JDK 版本为 JDK 8 基本同步工具类 闭锁(CountDownLatch) 闭锁是一种工具类,可以延迟线程的进度直到其到达终止状态.闭锁的作用相当与一扇门:在闭锁的状态到达之前,这扇 ...
- Docker本地部署Firefox火狐浏览器并远程访问
Docker本地部署Firefox火狐浏览器并远程访问 Firefox是一款免费开源的网页浏览器,由Mozilla基金会开发和维护.它是第一个成功挑战微软Internet Explorer浏览器垄断地 ...