wufm
作者wufm·2021-02-25 12:22
工程师·abc

业界Serverless云开发工具调研

字数 6085阅读 2804评论 0赞 0

摘要:

随着云平台技术能力的不断发展,基于Serverless理念的云开发也逐渐进入开发者的视线。本文介绍了Serverless 架构,阐述了Serverless云 开发 理念 , 并 对业界 各类 云开发工具进行了深入调研 及分析。
关键字:云开发、开发工具、Serverless

1 云开发背景

在传统开发模式下,新建一个应用不仅要关注自身业务逻辑,还需考虑应用安全级别、系统资源申请、集群并发处理能力、后期运维等一系列问题,这对研发人员提出了较高要求,也造成了研发效率下降,软件交付周期变长。
随着云计算技术的不断发展,Serverless应运而生。Serverless 云平台提供高可用、自动弹性扩缩的后端云服务,包含计算、存储、托管等Serverless 化能力,具有免运维、按需付费等优点,由云平台统一管理后端服务及资源,避免了开发过程中繁琐的 集群 搭建及 系统 运维工作, 提升 了 整体 资源 利用率的 同时, Serverless 还能够 帮助开发者聚焦业务逻辑,降低应用开发难度,提升软件研发效率 。 因此 , 越来越多的公司和个人 开始 使用Serverless 平台 ,完成 轻量化 业务 应用 搭建 。

2 什么是Serverless

2.1 Serverless架构
Serverless即无服务器架构,是云计算时代一种革命性的架构模式,它是一种全新的软件架构思想和方法,其核心思想是 开发者 无需关注支撑应用服务运行的底层服务器的状态、资源(比如CPU、内存、磁盘及网络等)及数量。软件应用正常运行所需的计算资源由底层的云计算平台动态提供,其目的是提高应用交付的效率,降低应用运营的工作量和成本。
Serverless涵盖了很多技术,主要分为以下两类:

1)FaaS(Function as a Service函数即服务)
开发者可以直接将服务业务逻辑代码以函数的形式进行部署,运行在服务提供方无状态计算容器中。开发者只需编写业务代码即可,无需关注服务器。函数即服务把计算能力进行了进一步的抽象。

2)Baas(Backend as a Service 后端即服务)
开发者可以直接使用第三方提供的数据库服务、缓存服务、消息队列、对象存储等服务。由于这些服务能够在云上提供开通即服务、开通即使用的能力,开发者在使用时不需要关注服务对应的服务器状态、位置等运维信息。

为了实现解耦应用和服务器资源,实现服务器资源对 开发者 透明,与传统架构相比,Serverless架构在技术上有如下特点:
1)事件驱动,按需加载
在Serverless架构下,函数的加载和卸载由Serverless云计算平台控制,只有当请求到达或事件发生时才会部署启动,当空闲一定时长,会被自动停止和卸载,不会持续占用计算资源。

2)单事件处理
一个云函数实例,一次仅处理一个事件,无需考虑高并发可靠性(通过云函数的高并发能力实现业务高并发),开发更简单 。

3)自动弹性伸缩
Serverless应用原生支持高可用,可以应对突发的高访问量。应用实例数量根据实际的访问量由平台进行弹性的自动扩展或收缩,动态的保证有足够的资源对请求进行处理。

4)无状态开发
应用保持无状态,以便于水平伸缩。

5)应用函数化
应用被分解为多个细粒度的函数操作,每一个调用完成一个业务动作。FaaS是Serverless架构实现的重要手段。

Serverless架构为开发者和用户带来了以下的优势和价值:
1)降低运维需求
Serverless使得应用与服务器解耦,业务上线前无需预估资源,无需进行服务器的购买和配置;同时也使得底层运维工作量进一步降低,业务上线后,无需担心服务器运维,这部分工作全部交给云平台服务提供方。

2)降低运营成本
Serverless的应用是按需执行的,在空闲状态下,应用本身并不占用计算资源。用户只需要为处理请求时的计算资源付费,无需为空闲时段支付额外的费用。

3)缩短迭代周期及上线时间
开发者可以将精力集中于业务功能的快速开发和上线;同时拆解后的云函数,也可以进行独立迭代升级,实现更快速的业务迭代,缩短功能升级和上市时间。

4)快速试错
利用Serverless架构的简单运维、低成本及快速上线能力,可以进行业务新形态、新功能的快速尝试。

2.2 Serverless云开发

Serverless云开发,是基于Serverless架构的对端解决方案,提供云原生一体化的开发环境和工具平台,为开发者提供高可用、自动弹性扩缩的后端云服务,包含云计算、存储、托管等Serverless化能力。Serverless云开发是Serverless架构理念的最佳实践之一。由于Serverless架构自身的特点,Serverless云开发与传统的开发模式相比,具有云原生一体化服务、高效、极速、弹性、易用、节约、安全等优势。

Serverless云开发目前的主要应用场景有云端一体化开发多种端应用(小程序、Web应用等),构建静态网站并部署到云端托管,分析海量图片、构建运营管理后台等。帮助开发者统一构建和管理后端服务及各种云资源,可避免应用开发过程中繁琐的服务器搭建和运维,使开发者专注于业务逻辑的实现,降低开发门槛,提高效率。

3 云开发工具调研

Serverless 应用开发区别于传统的应用开发模式,开发者在使用Serverless架构进行本地开发、调试、测试时,必然会面对没有本地开发环境、持续集成、持续发布流程复杂等困难,继续使用传统IDE无法满足开发需求。
为给开发者提供一个良好的开发体验,当前主流云厂商在对外提供云开发能力 的同 时,推出了满足各自Serverless云平台要求的云开发工具 , 为开发人员提供前后端一站式开发、一键发布 上云 、云数据库 、云存储一站式 管理等 众多 开箱即用的 云开发能力, 屏蔽 了 站点资源、后端服务器 资源 、数据库管理、 文件存储管理、网络安全、CI/CD 等 一系列问题 , 进一步降低开发成本 , 提高开发人员的工作效率。

3.1 阿里云开发工具

阿里云 提供了 一款 基于 VS Code插件 的Serverless 云端开发工具。插件结合了函数计算命令行和函数计算SDK的功能,通过该插件,可以 实现 :

1)快速在本地初始化项目、创建函数。

2)运行、调试本地函数,以及部署服务函数至云端。

3)拉取云端的服务函数列表、查看服务函数配置信息、调用云端函数。

4)获得模版文件的语法提示:自动补全、Schema校验、悬浮提示。

在LOCAL RESOURCES面板中,单击函数名称右侧的调试图标或Handler文件中的调试链接,可以在本地调试该函数。
( 资料来源:阿里云 )

在代码文件中插入断点,启动调试后即可看到调试信息。
( 资料来源:阿里云 )

插件会在函数入口文件同目录下创建event.dat文件,可以通过修改该文件设置每次调试函数时触发的事件信息。
( 资料来源:阿里云 )

单击REMOTE RESOURCES面板中函数右侧的执行图标,可以执行云端函数。函数的日志以及结果会输出在TERMINAL中。
( 资料来源:阿里云 )

工具通过YAML格式的模板文件来描述Serverless应用。通过Aliyun Serverless VS Code Extension创建函数时,会使用默认值自动填充模版文件 ,工具对模板文件编写提供了以下几个方面的支持。

1)自动补全 : 支持模版文件template.yml内所有资源配置属性的自动补全。自动补全会依据缩进层级给出精准的提示选项。

2)Schema校验 : 支持模版文件template.yml内所有资源配置信息的校验。在template.yml中会检测资源的配置信息是否符合规格说明。

3)悬浮提示 : 提供模版文件template.yml内所有资源配置的上下文帮助。在template.yml中,将鼠标悬浮在相关资源的键名上,会出现关于该键下可配置字段的悬浮信息展示(字段名、字段类型)。
( 资料来源:阿里云 )

3.2 腾讯云开发工具

腾讯基于其Serverless云服务,对外提供了命令行CLI,VS Code插件,微信小程序开发者工具三种类型的开发工具。

3.2.1 命令行CLI工具

CloudBase CLI 是一个开源的命令行界面交互工具,用于帮助开发者快速、方便的部署项目,管理云开发资源。开发者可通过NPM线上获取该工具,安装完成以后,可在本地命令行界面键入命令以使用各类云开发辅助功能,工具提供用户登录、工程初始化、函数本地运行、函数发布、云端日志获取、云端函数列表查看,文件存储访问等功能。
CLI工具生成的本地函数工程结构如下,开发者可编辑index.js文件,补充个人业务逻辑,也可编辑cloudbaserc.json配置文件,为函数定义云端运行时环境。

3.2.2 VS Code插件

Tencent Serverless Toolkit for VS Code是腾讯云基于VS Code开发实现的Serverless IDE,它具备可视化开发界面,提供工程创建、函数运行、云端发布等功能,同时还支持云端函数断点调试、云端函数测试、云函数列表展示、函数源码下载等功能,能够为开发者提供更好地本地Serverless项目开发体验。

3.2.3 微信小程序开发者工具

微信小程序开发者工具是腾讯专门为小程序开发打造的一款集前端开发和云开发于一体的开发工具,在小程序前端开发方面,工具提供了编辑器、模拟器、调试面板、预览、真机调试等功能;为进一步简化小程序后端开发难度,工具集成了云开发功能。

云开发界面如下,工具提供了云数据库、云存储、云函数、运营分析四个主要功能,通过可视化界面,开发者可以方便的进行函数开发调试、数据管理、文件管理等功能,极大地简化了后端开发难度。

微信开发者工具界面框架采用nw.js实现,编辑模块则扩展自开源编辑器Monaco。同electron一样,nw.js也是一款采用Nodejs技术栈的开源客户端应用开发框架,但由于nw.js存在缺陷较多,社区活跃度低、后期升级维护难等问题,现在已逐渐被electron替代。
目前客户端应用开发框架以微软系Winform、WPF,Java系Swing,C++系QT,Nodejs系electron、nw.js为主,其中微软系开发框架无法做到跨平台,Swing开发的客户端则略显笨重,而electron基于前端开发技术栈,相比QT更兼具简单易学等特点,是开发跨平台应用的明智之选。

3.3 AWS Cloud9云开发环境

AWS Cloud9,是亚马逊为开发人员提供的用于编写、运行和调试代码的云端集成开发环境。开发者可以在浏览器中编写、运行和调试代码 ,它 集成了代码编辑器、调试程序和终端,预封装了适用于JavaScript、Python等常见编程语言的软件和基本工具 ;同时, AWS Cloud9为开发Serverless云应用程序提供了较好的体验,可定义资源、进行调试,以及切换Serverless云应用程序在本地和远程执行 , 还对多人团队共享开发环境进行了优化。

1)功能齐全的编辑器
AWS Cloud9 提供了一个基于浏览器的编辑器,具备实时语法检查、自动缩进、自动补全、代码折叠、拆分窗格、版本控制集成等 功能,同时 支持JavaScript、Python 等 40多种编程语言和应用程序类型 。
( 资料来源:AWS )

2) 集成调试器
AWS Cloud9配备一个集成调试器,可提供常用的功能,如设置断点、单步调试、查看变量等等。
( 资料来源:AWS )

3) Serverless开发集成
AWS Cloud9提供编写和调试Serverless应用程序的完整体验,可以构建Serverless应用程序。开发环境预装了Serverless云开发所需的软件开发工具包、各种工具和库。Cloud9还支持Serverless应用程序模型(SAM),通过SAM模板提供一种简化的方法来定义Serverless应用程序的资源。IDE无需将代码上传到Lambda控制台 即 可在本地编辑和调试AWS Lambda函数。

( 资料来源:AWS )

4) 内置终端
AWS Cloud9提供了一个内置终端,开发者可借助终端运行各种命令,如将代码更改推送到git、编译代码、显示服务器命令输出等等,也可实现从命令行控制AWS服务并与之交互。

5) 持续交付工具链
AWS Cloud9能够为开发者提供应用程序持续交付工具链 ,能够 在AWS 云 上 轻松完成 发布 构建流程 。

6) 文件修订历史记录
AWS Cloud9会将文件的修订历史记录保存在开发环境中,开发者可以查看之前代码更改 历史 ,便于 进行版本管理 。
( 资料来源:AWS )

3.4 总结及分析

为满足云平台发展需求,落地Serverless开发理念,云 厂商推出了各类Serverless云开发工具 , 通过上述调研分析,当今主流云开发工具总体可以分为以下几种类型:
首先是 命令行工具 , 它 能够一定程度上降低云开发难度,降低云端发布等操作的复杂度,但 仍具有可优化的空间 。首先,开发者需熟悉命令行界面,掌握多种云开发命令及使用规则;其次,命令行工具没有代码编辑器,在工程初始化后,开发者需使用其他工具打开工程文件进行本地开发,最后,命令行工具没有本地调试环境 及界面 ,不便于开发者进行函数的本地开发调试。
其次是基于传统主流开发工具打造的云开发辅助工具,以阿里云及 腾讯云 的VS Code云开发插件为例 , 它 在功能上与命令行工具基本相同,具备基本的云开发辅助能力,但在用户及应用管理、本地工程管理、本地调试、应用前端界面开发、云数据库管理、云存储管理等方面支持能力 有待进一步提高 ,在开发体验上尚需优化。
最后是较为复杂的云开发IDE,以微信小程序开发者工具和AWS Cloud 9 为例。它对接底层Serverless云平台,实现了集用户管理、应用管理、一站式开发、功能测试、DevOps、状态监控等功能于一体的全生命周期开发工具,具备良好的使用体验及可用性,覆盖了云开发的主要需求。

4 结语

在Serverless云开发大行其道的今天, 继续使用 传统开发工具 已 无法满足当 下 开发需求,本文 阐述了Serverless云开发的概念,梳理总结了当今主流云开发工具及其主要功能,帮助开发者进一步理解Serverless理念,更好地适应云开发以降低开发难度,提升应用研发效率。

参考文献:

[1] https://help.aliyun.com/video_detail/126086.html
[2] https://aws.amazon.com/cn/cloud9/details/

本文作者为: 农行研发中心 吴方鸣 王腾 杜冲

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

相关文章

相关问题

相关资料

X社区推广