无服务器架构与函数即服务(FaaS)是云计算领域的热门趋势。除了微软和亚马逊以外,还有很多其他厂商提供FaaS。本文是一个无服务器架构的简短介绍,我将尝试解释无服务架构是什么以及为什么需要它。
云的演变
在其演变过程中,云计算经历了多个模式及抽象层次。
如上图所示:数据中心,无论是本地部署还是由服务商做为服务提供,都是我们今天所了解的云计算的第一个演化阶段。它抽象了物理主机环境,以硬件为单元进行环境扩展;而后,随着虚拟化的发展,我们开始在云环境中托管虚拟机,抽象硬件并且使用操作系统作为扩展单位;紧接着,我们为云建立了托管环境,同时抽象了操作系统。此时新的扩展单位是应用程序;但是,这并不是旅程的终点,因为现在我们已经转向了函数或无服务器架构。
对不同的云模式我们面临着不同的任务。拥有本地数据中心意味着我们对所发生的一切负全责。当转移到云端后,随着云计算的每一步进化,我们所应对的任务也越来越少。
无服务器架构实际上比软件即服务出现的晚,但是在上图中它出现在软件即服务之前,是因为在软件即服务的场景下,消费者不去控制应用程序或基础结构。
函数是无服务器架构中的扩展单位,它抽象了语言的运行时环境。我们不关心我们需要多少CPU,需要多少RAM,甚至任何一个函数运行所依赖的资源。我们只讨论运行该函数的时长。所有其他指标不应该扰乱我们。我们编写我们的函数,将它们发布到云中,并且只为这些函数运行的时长付费。
无服务器架构并不严格规定我们的函数在技术上必须是什么。这只是我们想要完成的任务的一些工作单位。函数可以通过多种方式触发。它可以是定时运行一个函数的定时器,但也可以是HTTP请求或某些相关服务中的事件。
Mike Roberts在他的经典文章《无服务器架构》中针对“函数即服务”提出了以下六点:
Adrian Cockroft在他的推文中清楚地定义了“无服务器”:
如果您的PaaS可以在20ms内有效启动运行半秒的实例,则可以称其为无服务器。
由此我们可以得出结论:长时间运行的工作流程和其他大规模的任务场景不适用无服务器架构。
已经有公司将函数作为服务运行。以下是其中几个:
还有许多其他服务可用,所有这些服务都因技术能力和实现而有所不同。
无服务器架构允许我们构建一些有某些功能的代码片段,同时快速运行而不消耗大量的服务器资源。这并不意味着函数即服务只能在小的场景中使用。以一个函数为例,尽管函数是一个小单元,但是每秒可以调用数百万次。问题是我们应该将哪些小功能从应用的组件或层中转化为函数。