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

1.5 Serverless的技术特点

为了实现解耦应用和服务器资源,实现服务器资源对用户透明,与传统架构相比, Serverless架构在技术上有许多不同的特点。

1.按需加载

在Serverless架构下,应用的加载(load)和卸载(unload)由Serverless云计算平台控制。这意味着应用不总是一直在线的。只有当有请求到达或者有事件发生时才会被部署和启动。当应用空闲至一定时长时,应用会被自动停止和卸载。因此应用并不会持续在线,不会持续占用计算资源。

2.事件驱动

Serverless架构的应用并不总是一直在线,而是按需加载执行。应用的加载和执行由事件驱动,比如HTTP请求到达、消息队列接收到新的信息或存储服务的文件被修改了等。通过将不同事件来源(Event Source)的事件(Event)与特定的函数进行关联,实现对不同事件采取不同的反应动作,这样可以非常容易地实现事件驱动(Event Driven)架构。

3.状态非本地持久化

云计算平台自动控制应用实例的加载和卸载,且应用和服务器完全解耦,应用不再与特定的服务器关联。因此应用的状态不能,也不会保存在其运行的服务器之上,不能做到传统意义上的状态本地持久化。

4.非会话保持

应用不再与特定的服务器关联。每次处理请求的应用实例可能是相同服务器上的应用实例,也可能是新生成的服务器上的应用实例。因此,用户无法保证同一客户端的两次请求由同一个服务器上的同一个应用实例来处理。也就是说,无法做到传统意义上的会话保持(Sticky Session)。因此,Serverless架构更适合无状态的应用。

提示

别担心,这并不是说Serverless架构下就无法妥善地处理有状态的场景,后续章节将对此进行详细讨论。

5.自动弹性伸缩

Serverless应用原生可以支持高可用,可以应对突发的高访问量。应用实例数量根据实际的访问量由云计算平台进行弹性的自动扩展或收缩,云计算平台动态地保证有足够的计算资源和足够数量的应用实例对请求进行处理。

6.应用函数化

每一个调用完成一个业务动作,应用会被分解成多个细颗粒度的操作。由于状态无法本地持久化,这些细颗粒度的操作是无状态的,类似于传统编程里无状态的函数。Serverless架构下的应用会被函数化,但不能说Serverless就是Function as a Service(FaaS)。前文也提过,在笔者看来,这样的认识并不准确。Serverless涵盖了FaaS的一些特性,可以说FaaS是Serverless架构实现的一个重要手段。关于FaaS的详细信息,我们将在后续的章节中进行深入的介绍和讨论。

7.依赖服务化

当今的应用往往有各种各样的依赖,比如消息队列、数据库、缓存。如果应用只是摆脱了服务器的限制,而其依赖的各种外部服务仍然部署在各种用户管理的服务器之上,那么应用的整体部署、扩展及运营则仍然将受到服务器这一慢资源的制约。因此,在Server-less架构下的应用的依赖应该服务化和无服务器化,也就是实现Backend as a Service(BaaS)。所有应用依赖的服务都是一个个后台服务(Backend Service),应用通过BaaS方便获取,而无须关心底层细节。和FaaS一样,BaaS是Serverless架构实现的另一个重要组件。在后面的章节中,我们将详细介绍和讨论关于BaaS的相关话题。