Serverless = Faas Baas。它代表的是无(少)服务器架构开发,从而使得开发者的精力主要放在了系统架构和软件开发上。
全文一览:
- ?️ 什么是 Faas、Baas?
- ?️Serverless 执行过程是怎样的?
- ?️Serverless 技术特点是什么?
- ?️Serverless 优缺点与应用场景?
什么是 Faas、Baas?
Faas 是 Function-as-a-service 的缩写。这里指的是“云函数运行平台”。开发者可以拆分业务逻辑,并将其上传到云函数平台,配置函数触发条件、路由等。
Baas 是 Backend-as-a-service 的缩写。这里指的是“后端服务组件”,例如文件存储、数据库、实时通信等等。
Fass 和 Bass 共同组成了 Serverless。
Serverless 执行过程是怎样的?
根据我自己的使用情况,Serverless 的执行过程主要途径三个主体:Client => Function => Backend。
举个例子,如果想在腾讯云云开发中,用超级管理员的身份对云数据库进行读写,根据文档,超级管理员只能在 Function 中通过 SDK 使用。因此,整个处理逻辑是:
- 微信开发者工具调用编写好的云函数
- 云函数进行鉴权
- 鉴权成功后,启动容器,加载 sdk,执行逻辑
- sdk 通过 HTTP API 的方式调用云数据库服务
- 云数据库的运行结果原路返回给微信开发者工具
除此之外,有时候可能的调用流程是:Client => Function,这种情况可能是为了不影响用户体验,而将复杂计算放入了云函数中。
有时候可能的调用流程是:Client => Backend。比如在微信开发工具内,内置了云开发 SDK,可以直接调用云开发后端组件,大大降低了开发难度。
Serverless 技术特点是什么?
事件驱动
这里的“事件”含义比较丰富,包括 http 请求等各种方式的调用。只有当事件发生时,云函数才会执行,后端服务组件才会开始计算。完成后,结果返回给用户,相关容器会被销毁。
弹性扩缩
云计算厂商会根据实际使用的资源量(调用次数、云函数运行内存、云存储空间等等)来进行计费。
并且在业务量激增的情况下,云计算厂商会自动调度资源进行分配,开发者无需关心高并发的情况(只要充钱,就能变强)。
无状态与有状态
云函数是无状态的,在事件发生时计算,计算后相关资源会被释放。
而状态是存放在后端服务组件中,例如云数据库。
这点和传统的服务器开发有区别。
Serverless 优缺点与应用场景?
优点
- 免运维,自动弹性扩容
- 快速开发,不需要自建后端服务
- 开发者关注点集中在业务上
缺点
- 调试成本高:目前的解决方法主要是通过查看调用/报错日志。体验上,和本地开发工具调试有差距。
- 启动时间长:目前的解决方法是对于经常性任务采取“热启动”,对用到的第三方库提前缓存,减少网络调用链路上的节点。
应用场景
- 交互体验:将计算放入云函数,避免影响用户体验
- AI 计算:直接调用云计算厂商提供的 AI 服务
- IoT:设备不具备计算能力(大小、电池)
推荐阅读
目前国内做的比较成熟的平台有:小程序·云开发、腾讯云·云开发、leancloud。因为网络问题,没怎么用过国外的 Serverless 服务。
之前写过基于 Serverless 进行实战开发的文章:
- Serverless 开发一款极简网页计数器
- Serverless 开发:实时对战五子棋小游戏
如果想看更详细的内容,可以参考:
- 给前端工程师的 Serverless 入门
- Serverless - 云原生时代的应用架构