Serverless是什么?

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 进行实战开发的文章:

如果想看更详细的内容,可以参考: