即学即会 Serverless | 如何解决 Serverless 应用开发部署的难题?

网友投稿 215 2022-11-02

即学即会 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 可查阅相关文档:​​Serverless Registry 的模型/规范,该项目可以通过应用的模式,为开发者提供多种形式,多种领域以及多种场景的上手案例,帮助开发者快速了解、学习、深入、上手 Serverless 架构,例如新手引导中的 Serverless:Hello World;人工智能:目标检测;传统框架:基于 Django 的博客项目等项目;​

场景体验地址:​​Devs 开发者工具本身,不具备任何业务能力,所有的业务能力均是通过组件化的形式,进行可插拔式使用,并且每个组件可以根据需要,自定义相对应的命令和功能;开发者可以在一个应用中,选择不同的组件完成对应的业务能力,以满足对不同模块的诉求;​

​​应用全生命周期管理:​通过组件化的支持,Serverless Devs 可以在应用的全生命周期发挥重要作用,以阿里云函数计算的 FC 组件为例,开发者可以在项目创建、项目的开发、调试、可观测性等多个层面进行项目的建设和管理;​

​​良好的集成与被集成性:​项目具有非常好的集成性与被集成性,可以通过组件化的支持,非常简单的与传统的生态进行有机结合。同时,Serverless Devs 开发者工具也可以非常简单的被集成到海量的自动化流程中,例如 CI/CD 文档中,就举例了与 Github Action 的集成、与 Gitee Go 的集成、与 Jenkins 的集成等平台集成的案例;​

​总的来说,Serverless Devs 是一个开源开发的 Serverless 领域的工具链项目,它不仅仅表示单纯的某个命令行工具,更在一定程度上指的是一个完整的工具链体系。​

​​​社区网址一览(可滑动):​​​

社区官网:Devs CLI:Hub应用中心: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#

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mybatis sum(参数) 列名作为参数的问题
下一篇:基于FPGA的交换接口控制器开发
相关文章

 发表评论

暂时没有评论,来抢沙发吧~