作者
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的各服务的官方文档有关于限制的部分),当然你要考虑因素还应包括开发团队和成本等。
转自 http://www.infoq.com/cn/news/2017/10/how-to-understand-serverless