深入浅出Serverless:技术原理与应用实践
上QQ阅读APP看书,第一时间看更新

1.1 什么是Serverless

与云计算、容器和人工智能一样,Serverless是这两年IT行业的一个热门词汇,它在各种技术文章和论坛上都有很高的曝光度。但是和其他技术不同,Serverless是一个不太让人能直观理解其含义的概念。按照英文的字面意思直译的话,Serverless的中文翻译为“无服务器”,听起来很神秘,很多技术圈的朋友一时不能理解其内涵。技术圈中的人们一般称呼Serverless为“无服务器架构”。Serverless不是具体的一个编程框架、类库或者工具。简单来说,Serverless是一种软件系统架构思想和方法,它的核心思想是用户无须关注支撑应用服务运行的底层主机。这种架构的思想和方法将对未来软件应用的设计、开发和运营产生深远的影响。

提示

在专业领域的文章中,笔者比较不倾向于使用翻译后的专有名词,故本书保留使用Serverless一词。

所谓“无服务器”,并不是说基于Serverless架构的软件应用不需要服务器就可以运行,其指的是用户无须关心软件应用运行涉及的底层服务器的状态、资源(比如CPU、内存、磁盘及网络)及数量。软件应用正常运行所需要的计算资源由底层的云计算平台动态提供。

Serverless的这种模式颠覆了我们传统意义上对软件应用部署和运营的认识。到底Serverless架构和传统的软件架构有什么不同呢?

在传统的场景里,当用户完成了应用开发后,软件应用将被部署到指定的运行环境,这个运行环境一般以服务器的方式体现,可能是物理主机,也可能是虚拟机。根据业务场景的需要,用户会申请一定数量、一定规格(包含一定数量的CPU、内存及存储空间)的服务器以满足该应用的正常运行。当应用上线后,根据实际的运营情况,用户可能会申请更多的服务器资源进行扩容,以应对更高的访问量。在这个场景里面,用户需要关心服务器总体的数量,以运行足够的应用实例;需要关心每台服务器的资源是否充足,是否有足够的CPU和内存;需要关心服务器的状态,因为每台服务器上应用的部署都要花费不少时间和精力。因为用户需要花费大量的时间、精力在服务器这一计算资源的计划、管理和维护上。

在Serverless架构下,情况则截然不同。当用户完成应用开发后,软件应用将被部署到指定的运行环境,这个运行环境不再是具体的一台或多台服务器,而是支持Serverless的云计算平台。当有客户端请求到达或特定事件发生时,云计算平台负责将应用部署到某台Serverless云计算平台的主机中。Serverless云计算平台保证该主机提供应用正常运行所需的计算资源。在访问量升高时,云计算平台动态地增加应用的部署实例。当应用空闲一段时间后,云计算平台自动将应用从主机中卸载,并回收资源。在这个场景中,用户无须关心应用运行在哪一台服务器上,也不用关心具体需要几台服务器。原本花费在计划、管理和维护具体服务器上的时间和精力在Serverless云计算平台的帮助下被省去了。具体的服务器不再是用户关注的焦点,不再是效率提升的障碍。

通过上述两种场景的对比可见,在Serverless架构中并不是不存在服务器,而是服务器对用户而言是透明的,不再是用户所操心的资源对象。

你会发现Serverless的实现和软件应用所在的Serverless云计算平台有着很大的关系。用户之所以不用再关注服务器是因为底层的云计算平台完成了大量的自动化工作。这个云计算平台可以是公有云,如Amazon Web Services(AWS)、Microsoft Azure、阿里云或腾讯云,也可以是私有云,如通过OpenStack、Kubernetes结合一些Serverless框架实现。本书将在后面的章节中对公有云和私有环境里Serverless的实现进行详细的介绍。