1.3 Serverless的技术实现

作为一种新的思想和方法论,Serverless可以为企业和用户带来巨大的潜在价值,因此在这几年迅速获得了业界的广泛关注。许多企业和用户都在思考如何能落地和实践Serverless这一思想。

1.3.1 理念与实现

首先要明确的一点是,Serverless是一种软件的架构理念。它的核心思想是让作为计算资源的服务器不再成为用户所关注的一种资源。其目的是提高应用交付的效率,降低应用运营的工作量和成本。以Serverless的思想作为基础实现的各种框架、工具及平台,是各种Serverless的实现(Implementation)。Serverless不是一个简单的工具或框架。用户不可能简单地通过实施某个产品或工具就能实现Serverless的落地。但是,要实现Serverless架构的落地,需要一些实实在在的工具和框架作为有力的技术支撑和基础。

随着Serverless的日益流行,这几年业界已经出现了多种平台和工具帮助用户进行Serverless架构的转型和落地。目前市场上比较流行的Serverless工具、框架和平台有:

❑ AWS Lambda,最早被大众所认可的Serverless实现。

❑ Azure Functions,来自微软公有云的Serverless实现。

❑ OpenWhisk, Apache社区的开源Serverless框架。

❑ Kubeless,基于Kubernetes架构实现的开源Serverless框架。

❑ Fission, Platform9推出的开源Serverless框架。

❑ OpenFaaS,以容器技术为核心的开源Serverless框架。

❑ Fn,来自Oracle的开源Serverless框架,由原Iron Functions团队开发。

上面列举的Serverless实现有的是公有云的服务,有的则是框架工具,可以被部署在私有数据中心的私有云中。每个Serverless服务或框架的实现都不尽相同,都有各自的特点。理论联系实际,在后面的章节里,本书将针对关注度较高的Serverless公有云服务(AWS)及私有云Serverless框架(OpenWhisk、Fission及OpenFaaS)进行详细的介绍。

1.3.2 FaaS与BaaS

目前业界的各类Serverless实现按功能而言,主要为应用服务提供了两个方面的支持:函数即服务(Function as a Service, FaaS)以及后台即服务(Backend as a Service, BaaS)。Serverless实现的构成如图1-1所示。

图1-1 Serverless实现的构成

1.FaaS

FaaS提供了一个计算平台,在这个平台上,应用以一个或多个函数的形式开发、运行和管理。FaaS平台提供了函数式应用的运行环境,一般支持多种主流的编程语言,如Java、PHP及Python等。FaaS可以根据实际的访问量进行应用的自动化动态加载和资源的自动化动态分配。大多数FaaS平台基于事件驱动(Event Driven)的思想,可以根据预定义的事件触发指定的函数应用逻辑。

目前业界FaaS平台非常成功的一个代表就是AWS Lambda平台。AWS Lambda是AWS公有云服务的函数式计算平台。通过AWS Lambda, AWS用户可以快速地在AWS公有云上构建基于函数的应用服务。

AWS Lambda主页:https://aws.amazon.com/lambda/

FaaS是目前Serverless架构实现的一个重要手段。FaaS平台的特点在很大程度上影响了目前Serverless应用的架构和实现方式。因此,有一部分人认为FaaS等同于Serverless,比如很多人将AWS Lambda称为AWS的Serverless,认为AWS Lambda就是AWS Serverless的全部功能。这些年,随着技术的发展,大家对Serverless研究的不断深入,目前业界主流的观点是Serverless和FaaS并不是等同关系,而是包含和被包含关系。FaaS平台是一个完整的Serverless实现的重要组成部分,仅仅通过FaaS平台并不能完全实现Serverless架构的落地。

FaaS为应用的开发、运行和管理提供良好的Serverless基础。将应用部署在FaaS上,用户无须关注应用运行所需要的底层服务器资源。但是当代的应用并不是孤立存在、单独运行的,一个完整的应用系统往往依赖于一些第三方服务,比如数据库、分布式缓存及消息队列等。如果这些服务还是以传统的方式运维,则意味着用户还是需要耗费时间和精力对这些服务所需的服务器资源进行管理。在这种情况下,就应用程序本身而言,这是实现了Serverless化,但是对应用整体系统而言,并没有完全实现Serverless化。因此,在实现应用架构Serverless化时,也应该实现应用所依赖的服务的Serverless化。

2.BaaS

为了实现应用后台服务的Serverless化,BaaS(后台即服务)也应该被纳入一个完整的Serverless实现的范畴内。通过BaaS平台将应用所依赖的第三方服务,如数据库、消息队列及存储等服务化并发布出来,用户通过向BaaS平台申请所需要的服务进行消费,而不需要关心这些服务的具体运维。

BaaS涵盖的范围很广泛,包含任何应用所依赖的服务。一个比较典型的例子是数据库即服务(Database as a Service, DBaaS)。许多应用都有存储数据的需求,大部分应用会将数据存储在数据库中。传统情况下,数据库都是运行在数据中心里,由用户运维团队负责运维。在DBaaS的场景下,用户向DBaaS平台申请数据库资源,而不需要关心数据库的安装部署及运维。AWS的DynamoDB数据库就是DBaaS的一个例子。用户按需申请使用数据库服务,而无须关注数据库的运维和缩扩容。数据库的运维完全由服务提供方AWS负责。

AWS DynamoDB主页:https://aws.amazon.com/dynamodb

DBaaS只是一个例子,通过BaaS平台应用将其所使用的任何第三方后台服务都进行Serverless化,使得用户可以不再关注所依赖的服务底层计算资源的运维,极大地减少了应用运维工作量和成本。

要实现完整的Serverless架构,用户必须结合FaaS和BaaS的功能,使得应用整体的系统架构实现Serverless化,最大化地实现Serverless架构所承诺带来的价值。因此,一个完整的Serverless实现,必须同时提供FaaS和BaaS两个方面的功能。当我们在考察一个Serverless平台或解决方案的时候,应该全面地考察这个平台或方案在FaaS及BaaS两个方面分别提供了哪些支持,以及在多大程度上可以让底层的服务器这一基础架构资源消失在用户的关注列表中。