云计算、FaaS与无服务器架构

无服务器Serverless架构和函数即服务Functions-as-a-Service(FaaS)已经成为云计算领域非常流行的概念。本文从云计算演变角度讨论无服务器架构的内在逻辑关系。


云计算之初是从数据中心开始,它抽象了物理主机环境,可以对硬件进行扩展,随着虚拟化的发展,我们开始在云环境中托管的虚拟机。将硬件和操作系统抽象为一个可扩展的单元,这就是IaaS,能够基于操作系统进行扩展,将硬件隐藏包装抽象起来;这之后不久,我们将主机托管环境建设到云上,能够直接基于应用进行扩展,将操作系统隐藏包装抽象起来了这就是PaaS。但这不是旅程的终点,现在我们已经迁移到函数或无服务器架构,这时基于函数进行扩展,同时将语言运行runtime封装隐藏起来了。


不同的云模型规定了不同职责,数据中心意味着我们可以完全负责所有事情,从硬件到应用都需要亲自参与;而当迁移到云时,我们需要所做的事情就越来越少。

函数是作为无服务器架构的抽象单元,隐藏了语言运行特性。我们不关心会耗费多少CPU或RAM来运行一个函数,我们只关注这个函数需要运行时间。所有其他指标都不应该打扰我们。我们编写函数功能,将其发布到云上,只需支付这些函数运行时间费用。

无服务器架构并不严格指定我们的函数在技术上必须是什么。它只是一个工作单元。函数能被以很多方式触发。它也可以是一个定期运行的计时器,也可以是一些相关HTTP请求或服务中的事件。

Serverless Architectures一文中,Mike Roberts提出了functions-as-a-service六个特点:
1. 从根本上说,FaaS无需管理你自己服务器系统和服务器应用就可以运行后端代码。

2. FaaS无需使用框架和库包,FaaS函数就是带有语言和环境的正常应用。

3. 既然我们没有服务器应用需要运行,部署就非常不同于传统的系统,我们上传代码的FAAS供应商,它就做剩余的事情。

4. 水平扩展是完全自动的,弹性的,并由供应商管理。

5. FaaS是由供应商定义的事件类型触发的函数。

6.大多数供应商也允许函数对HTTP请求触发相对应的响应,通常以某种API网关形式实现。

Adrian Cockroft在其Tweet定义“无服务器”概念是:

如果你的PaaS可以在20ms内启动实例,并运行半秒,那么它就可以称为无服务器。

由此,我们可以得出这样的结论:长期运行的工作流程和其他大量的任务并不适合无服务器架构。


以下是一些供应商提供FaaS:
微软Azure函数
亚马逊——AWS Lambda
Auth0–Webtask
Iron.io–IronWorker
Planet Rational–WebScript

无服务器架构允许我们构建的代码做一些有用的事情,并同时,跑得很快又不消耗大量的服务器资源。这并不意味着FaaS只适用小场合。虽然函数是一个小的单元,它可以每秒被调用数百万次。

A Short Introduction to Serverless Architecture -