Serverless介绍

云计算服务从IaaS到PaaS到如今炙手可热的Serverless,服务对象始终是计算资源使用者。Serverless是一种让开发者无需关心基础设施(服务器等),而是专注到应用程序业务逻辑上的计算服务模型。

加州大学伯克利分校在论文中尝试给出Serverless的定义:Serverless computing = FaaS + BaaS。

Serverless 包含两个组成部分 BaaS(后端即服务)和 FaaS(函数即服务)。对象存储、关系型数据库以及 MQ 等基础支撑服务属于BaaS。FaaS为开发人员提供了一种运行应用的抽象方式,在层次上更靠近应用程序开发者。

FaaS理解

FaaS为开发人员提供了一种运行应用的抽象方式,可以在无需管理服务器的情况下响应事件。例如,上载文件可触发自定义代码,从而将文件转码为各种格式。

FaaS通过事件驱动执行,它会随时待命,但不需要任何服务器进程在后台持续运行。当请求到来时,FaaS在毫秒内启动服务并处理各个请求,当请求减少时,FaaS会自动减少服务副本数量甚至关停服务。

动态扩缩容使FaaS在成本效益上颇具弹性空间,提供商可以仅对使用的资源收费,而不对空闲时间收费。

FaaS平台设计

从服务形态看,FaaS平台需要实现几个关键部分:

  • 函数环境与执行
  • 从0到N动态扩缩容
  • 事件驱动框架

函数环境可以分两个点,系统环境和函数依赖,系统环境主要指系统平台、RootFS等,函数依赖是用户代码本身依赖的第三方库等。函数执行需要为用户代码分配计算实体,具体可以是进程、容器、虚拟机、Wasm等等。

动态扩缩容是FaaS平台对函数状态感知到反馈的一个体现,可以收集函数执行环境和依赖的服务指标来实现,比如采集CPU、内存、带宽、IOPS等等指标判断函数负载采取扩缩容行为。

函数执行依靠事件驱动,事件框架是事件采集、传输的关键。所以设计FaaS平台事件框架需要考虑扩展性,事件传输效率,事件采集协议等等问题。

开源函数计算平台Refunc

先上项目地址: https://github.com/refunc/refunc

Refunc是一个基于Kubernetes的开源函数计算平台,架构如下图:

基于Kubernetes开发实现,核心的CRD包括:

  • Funcdef 函数定义
  • Funcinsts 函数实例
  • Xenv 运行环境
  • Trigger 触发器

工作原理概括为,基于Funcdef和Xenv解决函数环境与执行,定义的Trigger收集事件通过基于Nats的事件框架传递到Funcinsts驱动函数执行并返回结果,核心Operator扩展了Kubernetes的HPA实现了从0到N的函数动态扩缩容。

Refunc拥抱AWS Lambda生态,函数Runtime完全兼容Lambda,基于Lambda的Runtime生态支持各种编程语言,平台接口API兼容Lambda核心接口,完全可以使用aws官方cli工具。