第1章 什么是Serverless
随着云计算的普及,在部署应用程序的时候,无须再关心物理意义上的服务器,也不用了解它们所处的机房情况,而只需要申请“虚拟机”即可。由于虚拟机隔离了物理层的设备,我们只需要选择机器配置即可。因此,这种以虚拟方式来提供的计算服务器被称为“云服务器”。
虽然“云服务器”背后实际上隐藏着一系列的计算资源,但在此我们仍然需要明确一个重要问题:我们需要多少计算资源。这里的计算资源,不仅包含了“云服务器”的数量,也包括其 CPU 的配置、内存的容量、存储空间的大小等。除此之外,在某些场景下,甚至还需要了解“云服务器”的节点选择(即应该在哪些国家的哪些城市进行部署),以满足我们对应用程序性能的苛刻要求。
但是,我们是否同时也考虑过,应用软件的本质是什么?在商业软件的生命周期中,什么才是我们应该关心的内容?我们为什么需要花费这么多的精力在这些非业务的技术细节上?是否有一种更简单的架构,能够帮助我们更聚焦于业务?伴随着这些问题,无服务器架构的计算资源交付模式应运而生。随着近几年容器化技术及配套的容器编排服务(以 Docker 和Kubernetes 为代表)的成熟,我们可以更容易地实现计算资源自动化的动态调度,从而取代了原有对计算资源的手工管理模式。同时随着各种中间件服务的成熟,我们可以更便捷地使用这些特定能力的计算服务(如数据库、缓存、消息队列等)。
Serverless,中文译为“无服务器的”;但这里所说的并不是真实意义上没有服务器的架构,而是针对开发者来说,无须关心服务器。这正如当今另一个流行的理念 NoOps 一样,NoOps 的意思并不是真的没有运维;而是通过自动化运维的理念来取代原有的手工运维模式,让开发者无须关心运维。从以前的专职运维工程师,变成了如今的自动化运维,一切由平台自行调度。在此,“Serverless”指的是,包括服务器的资源情况、部署情况、操作系统以及依赖软件等在内的所有细节,开发者均无须关注,这一切由平台完成,开发者只需要专注于业务实现。
那么,什么样的服务才是“Serverless”的呢?我们可以从“广义上的 Serverless”和“狭义上的 Serverless”这两个角度来讨论。正如上面所说,从广义上来说,我们认为 Serverless 是一种理念,即指对开发者来说,那些无须关心计算资源就可以直接使用的服务,都可以算作一种 Serverless 服务。而从狭义上来说,它指提供给开发者的标准化能力,即 FaaS 和 BaaS。关于 FaaS 和 BaaS,我们将在后续章节中讨论,本章先介绍作为一种理念被提出的 Serverless。