Serverless 概念的诞生由来已久,但至今仍然没有清楚的定义。这个词首次出现大概是在 2012 年,云基础设施服务提供商 Iron.io 的副总裁 Ken Fromm 在一篇文章中阐述了为什么他认为 Serverless 是软件的未来(事实上,Iron.io 自 2012 年以来就支持这种概念和框架)。紧接着,在 2014 年,亚马逊发布 AWS Lambda,在这之后,Serverless 开始变得流行起来,国内外各大云厂商都争相跟进。
2016 年 8 月, martinfowler.com 上的一篇文章对 Serverless 做了详细阐述。简单来说,Serverless 主要用来描述两个互相有重叠的概念:
- Serverless 最早用于描述那些大部分或者完全依赖于第三方(云端)应用或服务来管理服务器端逻辑和状态的应用,这些应用通常是富客户端应用(单页应用或者移动端 App),他们建立在云端服务生态之上,包括数据库(Parse、Firebase)、账号系统(Auth0、AWS Cognito)等。这些服务最早被称为 “(Mobile) Backend as a Service”,下文将对此简称为 “BaaS”。
- Serverless 还可以指代这种情况:应用的一部分服务端逻辑依然由开发者完成,但是不像传统架构那样运行在一个无状态的计算容器中,而是由事件驱动、短时执行(甚至只有一次调用)、完全由第三方管理。对此有一个叫法是 Functions as a service(FaaS)。AWS Lambda 是目前的热门 FaaS 实现之一。
为了进一步了解 Serverless 的概念,InfoQ 记者对亚马逊中国研发中心首席架构师蔡超进行了采访,同时,蔡超也将会在 10 月 17 日举行的 QCon 全球软件开发大会上分享相关话题,欢迎关注。
InfoQ:可否用通俗易懂的语言谈谈什么是 Serverless?
蔡超:Serverless 还处在一个比较初期的阶段,目前也没有权威和官方的定义。顾名思义,Serverless 就是指应用的开发不再需要考虑服务器这样的硬件基础设施,基于 Serverless 架构的应用主要依赖于第三提供的后端服务(BaaS, Backend as a Service) 和应用逻辑运行容器(FaaS Container,Function as a Service)。
打个形象的比方,假如你想卖一些自己的产品,那你就需要买或者租一个店面。但无论是买的还是租的,你都要做一些基本店面布置和维护工作,比如布置柜台、清扫店面,这就好比传统的应用架构,你需要设计,部署和维护硬件基础设施。当然现在你也有另外一种选择,就是在“疯果盒子”这样的店面里,直接租一个放你的产品的盒子,委托“疯果盒子”来销售你的产品。这就像 Serverless,你利用第三方的服务和设施来实现你的业务。
InfoQ:Serverless 的诞生到底是想解决什么问题?
蔡超:我想这个问题可以从 Serverless 的主要优势来看:
1. 降低硬件基础设施的部署和维护成本。
2. 降低应用扩展(scaling)成本。目前的 Serverless 运行平台如 Amazon AWS,都可以支持动态的自动扩张。
这些无疑都有助于让开发者专注自身应用的开发,更快地发布他们的应用。Serverless 可以让开发者不必担心基础架构的伸缩性(scalability)是否能支撑未来的业务扩张,同时减少由于访问量变化而带来的硬件资源浪费。
InfoQ:Serverless 和微服务之间是什么关系?
蔡超:微服务和 Serverless 架构都实现了细粒度的部署,维护和伸缩(scaling)。 目前的 Serverless 实现通常会依赖 FaaS,那么粒度就由 Service 变成了更细粒度的 Function。
InfoQ:Serverless 架构与 FaaS 概念是一回事吗?FaaS 与 PaaS 又有什么区别?可以理解 FaaS 是 PaaS 的升级版本吗?
蔡超:Serverless 和 FaaS 本质上不是一回事。例如,一个简单的 Serverless 应用可以仅仅依赖于 BaaS(比如 AWS SQS、DynamoDB)。目前,大家一提到 Serverless 就会自然的想到 FaaS,主要是因为 Serverless 这个词是在 2014 年 AWS Lambda(Amazon 的 FaaS Container)发布以后才开始变得流行开来的。
我认为 FaaS 和 PaaS 关键的区别在于 Scaling,PaaS 无法像 FaaS 那样在很短的时间内启动或停止一个实例,所以无法实现 FaaS 的按请求动态伸缩,用户必须提前考虑 PaaS 基础设施对于访问量变化的影响。我认为 FaaS 不是 PaaS 的升级,目前看各有特点适用于不同的场合。
InfoQ:要使用 Serverless 架构,是不是就意味着必须上云?
蔡超:至今 Serverless 没有十分官方和明确的定义。目前的 Serverless 应用都依赖于第三方提供的后端服务(BaaS)和逻辑运行容器(FaaS Container),所以目前的人们认为的 Serverless 的确是运行在云上的。
InfoQ:我们应该如何构建 Serverless 架构?有哪些需要注意的点?
蔡超:这个问题其实蛮大的,Amazon 给出了一些 Serverless 架构的模版大家可以参考。和其他技术,尤其是新技术一样,在实践中你会遇到不少问题和陷阱,所以值得注意的地方不少,我总结了一些我们的实践经验将在 QCon 演讲中分享给大家。
这里我就提一下最重要的一点,就是首先判断一下 Serverless 架构是否适合于你的应用。例如,如果你的应用是实时性要求很高的,就目前来看是不适合的(关于 AWS BaaS 及 FaaS 的限制你可以参照 AWS 的各服务的官方文档有关于限制的部分),当然你要考虑因素还应包括开发团队和成本等。
评论