本文作者:杨苏博
解读 Serverless
Serverless 是一种云计算模型,它使开发人员能够构建和运行应用程序而无需为服务器基础架构或运行时环境管理任何资源。相反,开发人员只需编写应用程序代码,将其上传到云提供商的服务中,然后该服务会负责根据请求的需要自动扩展或缩小应用程序。在 Serverless 模型中,开发人员只需为实际使用的应用程序资源付费,而不是为预配或闲置的资源付费,这使得 Serverless 模型更加经济高效。Serverless 不是没有服务器的意思,而是指开发人员不需要管理服务器。
Serverless 的优势
- 降低成本:Serverless 在应用部署中,只需要根据实际使用情况付费,无需像传统的云服务器一样预先购买资源,从而降低了成本。
- 自动扩容:Serverless 可以根据应用的实际使用情况自动扩容,无需手动干预,从而提高了应用的可扩展性。
- 减少维护工作:Serverless 服务由云服务提供商负责维护和管理,用户无需关注底层基础设施的管理和维护工作,从而节省了时间和精力。
- 更高的可靠性:Serverless 服务由云服务提供商负责管理和监控,可以提供更高的可靠性和可用性。
- 更快地部署:Serverless 应用可以很快地部署和更新,因为无需关注底层基础设施的管理和维护工作,从而提高了应用的部署速度。
Serverless 的挑战
Serverless 让应用的托管变得简单,但是也存在一些挑战,其中,最大的两个挑战是 Serverless 应用的可移植性和冷启动问题。
不同的 Serverless 平台无论是工具,还是开放接口都存在不少的差异。对于开发者来说,在开发应用之前,必须得先决定用哪个 Serverless 平台。因为 Serverless 应用的开发细节往往会与特定的 Serverless 平台耦合。而对于冷启动问题,是一个非常有挑战的事情。不同的 Serverless 平台也在这方面做了很多努力,比如通过预留实例、单实例多请求、通过机器学习预测流量前准备资源等等;在开发侧,也可以通过对代码的构建、打包、压缩等方式减少代码的体积,从而加快应用的部署上传过程和应用的冷启动时间(因为减少了代码拉取和应用启动的时间)。
DeployKit 的诞生
我们发现应用的开发到部署这个过程,存在很大的优化空间,特别是在 Serverless 技术背景下。因为 Serverless 已经让应用变得足够简单了。所以我们能做这么一个工具:帮忙开发者将自己的应用一键部署到 Serverless 平台。而且这个过程应该是简单且快速,以满足应用高频部署的需求。
DeployKit 的愿景
DeployKit 的愿景是希望帮助开发者把任意应用部署到任意平台,所以 DeployKit 的口号是 Deploying Anything Anywhere。
DeployKit 的挑战
要想实现我们的目标,我们需要解决两个挑战:如何适配各式各样的应用?如何适配各式各样的平台?
我们将应用生命周期做了一层抽象,定义了一套统一的应用适配规则。DeployKit 会根据适配规则构建、编译和部署当前应用。为了简化部署,实现一键部署能力。DeployKit 对市面上常见的前后端框架的应用做了预先定义,当 DeployKit 识别当前应用为某个特定的框架应用时,自动匹配合适的规则并应用上。这样就可以做到零配置,一键部署。这些框架的适配规则是开源的,社区其他人员也可以适配自己想要的框架。目前支持 30+ 款框架,以及 6 个部署平台。
单单只有适配规则还不够,我们需要实现相关的功能来解释这些规则。为了能够满足应用和平台的多样性需求。DeployKit 设计了一种组件化机制。将对不同平台的适配实现为一个个组件,然后根据规则激活响应的组件共同完成应用的部署操作。这些功能组件可以提前预置好,也可以按需下载安装然后使用。
DeployKit 设计与实现
- DeployKit 架构图
DeployKit 以组件作为原子能力,根据匹配到的框架、平台和语言激活需要的组件,通过这些激活的组件共同完成一次部署操作。未来满足不同场景下使用 DeployKit 的部署能力,采用 CLI 方式提供接口。这样可以方便与 VS Code 编辑器、代码仓库的持续集成工具结合使用。
为了适配任意应用和部署到任意平台,DeployKit 抽象了一套通用的部署规则,开发者可以根据自己业务应用情况,使用 deploy.yml 配置文件自定义部署规则。同时,DeployKit 默认预置了很多常用开发框架的部署规则,这些常用框架,我们可以做到零配置,一键部署。
DeployKit 智能适配过程
为了简化部署,实现零配置,一键部署能力。DeployKit 预置了对常用主流框架和主流的部署平台做了默认适配。正如上图所示,一个开发者先选择了一个部署平台,如腾讯云云函数,本质是激活了一个腾讯云部署的一个模式;然后 Deploy 根据项目代码特征智能识别出当前是一个什么框架,上图识别出是一个 vite 框架,DeployKit 则认为这是一个静态站点项目,会自动激活 static 模式;最后 DeployKit 会根据腾讯云和 static 这个模式共同作用域运行时,并激活相应的组件和配置,共同完成部署任务。
其中,模式本质就是一组配置项,DeployKit 会将常用的配置预定义好,我们只需要简单通过一个模式配置就能完成一组复杂的原子能力。
DeployKit 支持的框架与平台
目前 DeployKit 支持 30+ 前后端主流开发框架,以及 6 个部署平台。开发框架如 Next.js、Koa.js、Malagu、Nest.js、Vite、Vue、React、Angular、Flet、UmiJS 等等前后端框架;部署平台有腾讯云云函数、阿里云函数计算、Azure Functions(正在开发中)、AWS Lambda、Vercel 平台、云服务器。
DeployKit 效果演示
DeployKit 未来规划
DeployKit 未来将向两个方向演进:支持更多的前后端框架,以及支持更多 Serverless 平台。如今,市面上框架很多,以后也会有越来越多的新框架出现,对于部署平台也是一样情况。我们希望借助于社区开发者的力量,一起来共建,让 DeployKit 能够支持更多框架和平台。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。