Serverless 的使用场景

虽然 Serverless 的应用很广泛,但是其也有局限性,Serverless 比较适合以下场景:

  • 异步的并发,组件可独立部署和扩展
  • 应对突发或服务使用量不可预测(主要是为了节约成本,因为 Serverless 应用在不运行时不收费)
  • 短暂、无状态的应用,对冷启动时间不敏感
  • 需要快速开发迭代的业务(因为无需提前申请资源,因此可以加快业务上线速度)

Serverless 的使用场景示例如:

  • ETL
  • 机器学习及 AI 模型处理
  • 图片处理
  • IoT 传感器数据分析
  • 流处理
  • 聊天机器人

CNCF Serverless Whitepaper v1.0 中给出了诸多 Serverless 使用场景的详细描述。

示例

我们以一个游戏应用为例,来说明什么是 serverless 应用。

一款移动端游戏至少包含如下几个特性:

  • 移动端友好的用户体验
  • 用户管理和权限认证
  • 关卡、升级等游戏逻辑,游戏排行,玩家的等级、任务等信息

传统的应用程序架构可能是这样的:

传统应用程序架构

  • 一个 app 前端,iOS 或者安卓
  • 用 Java 写的后端,使用 JBoss 或者 Tomcat 做 server 运行
  • 使用关系型数据库存储用户数据,如 MySQL

这样的架构可以让前端十分轻便,不需要做什么应用逻辑,只是负责渲染用户界面,将请求通过 HTTP 发送给后端,而所有的数据操作都是有由后端的 Java 程序来完成的。

这样的架构开发起来比较容易,但是维护起来确十分复杂,前端开发、后端的开发都需要十分专业的人员、环境的配置,还要有人专门维护数据库、应用的更新和升级。

Serverless 架构

而在 serverless 架构中,我们不再需要在服务器端代码中存储任何会话状态,而是直接将它们存储在 NoSQL 中,这样将使应用程序无状态,有助于弹性扩展。前端可以直接利用 BaaS 而减少后端的编码需求,这样架构的本质上是减少了应用程序开发的人力成本,降低了自己维护基础设施的风险,而且利用云的能力更便于扩展和快速迭代。