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