Nuclio实战及源码分析:基于Kubernetes的Serverless FaaS平台
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 Serverless简介

1.1.1 Serverless的发展背景

软件部署使开发商和开发人员常常需要花费大量的时间来管理和维护服务器基础设施,并且还需要关注应用程序所需的操作系统和配置信息等。软件部署的发展可以划分为四个时期:裸金属时期、虚拟机时期、容器化时期、Serverless时期(无服务器时期)。

1)裸金属时期。此时期的系统管理员要为部署的软件准备物理服务器,这涉及安装操作系统和相关的设备驱动程序、确保有足够的内存/磁盘/处理器可用,还要负责硬件升级等。物理硬件和部署的软件之间存在强烈耦合,相互依赖性很强。在这里,部署单元是一个实际的服务器。

2)虚拟机时期。此时期的物理服务器上托管多个虚拟机,开发人员无须直接部署到给定的硬件,而是提供给一个虚拟机(Virtual Machine, VM)。这给升级和迁移带来了很大的灵活性,使得部署更加可重复和灵活,而此时软件与硬件开始分离。如果出现硬件故障,系统管理员可以将虚拟机迁移到其他硬件并避免出现问题。在这里,部署单元是虚拟机。

3)容器化时期。这个时期诞生了许多容器化技术,如Docker、OpenVZ、LXC、FreeBSD Jail和Solaris zones等。这些技术使系统管理员能够“分割”操作系统,在同一系统上运行不同的应用程序,而不会相互干扰。它们还可以让开发人员拥有与生产环境紧密匹配的轻量级环境,从而使不同环境之间的操作更加一致。此外,此时期还开发了许多工具来简化容器的创建和维护,许多公司使用它们来加快开发和部署的节奏。在这里,部署单元是一个容器。

4)Serverless时期。开发人员不需要考虑服务器,只需要专注自己的业务逻辑。一切服务器的配置均交给平台执行。业务执行是按需收费的,这让计算资源从固定成本变为了可变成本。这对于那些流量波动大的业务来说很有吸引力。

从软件部署层面看,在这几个时期,都有软件在“他处”执行的概念,无论是在本地物理服务器上,还是在云主机的虚拟机上或者是容器上。此外,无服务器从另一个方面给出了一个抽象层次:代码本身。有了这种新的抽象层次,就不必担心代码托管在“哪里”。图1-1所示是软件部署发展历史的一个缩略图。

图1-1 软件部署发展历史