Serverless vs Container

Serverless 是云计算中资源抽象的极致体现:用户专注于业务逻辑,而无需关注基础设施

  1. Container
    • 给予了用户很大的定制空间,按需对应用进行拆分和封装
  2. Serverless
    • 完全屏蔽了计算资源,引导用户不再关注基础设施,只需遵循标准的方式编写业务代码即可
    • 更细的拆分粒度
      • FaaS:将每一个具有独立功能的函数,作为一个单独的服务进行部署和运行

计费机制

  1. 底层没有固化的资源,一般会按照调用次数调用时长来计费,可以精确到毫秒
  2. 成本上,非常适合那些偶尔触发短时间运行的工作负载

事件模型

事件模型是 Serverless 的核心编程模型运行逻辑,非常适合基于事件驱动的开发场景

  1. 上游:触发器
    • Serverless 一般都会提供多种触发器:API 触发器、OSS 触发器、MQ 触发器、定时触发器等
  2. 下游
    • 函数内访问其他云服务(如 RDS、MQ 等外部存储
    • Serverless Computing 本身是无状态的,所有持久化需求都需要借助外部存储来实现
  3. 架构范式
    • FaaS + MQ:关注数据流,是数据的传递流向
      • 当 MQ 中有新消息进入,MQ 触发器会触发云函数,并将消息作为事件参数传递给云函数
      • 云函数进行及时处理,处理结果还能再进入另一个 MQ,进而触发另一个云函数
      • 最终形成一个流式数据的处理管道,实现数据的实时处理和分发
    • Workflow:关注控制流,定义事件发生的先后次序条件依赖
      • 按照业务逻辑的控制处理流程,以工作流的方式,进行云函数等事件处理单元组合编排
      • 高层调度框架:用配置文件或者图形化的方式,来设置一个复杂的事件处理步骤和逻辑
      • 工作流服务每次的运行都会自动维护一个状态机,用来记录和跟踪状态

限制

  1. 客观限制:冷启动的延时、内存的限制、云函数的运行时长并发上限
  2. 应用的可迁移性 : 厂商绑定