低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

如何理解 Serverless?

2017 年 10 月 07 日

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 的各服务的官方文档有关于限制的部分),当然你要考虑因素还应包括开发团队和成本等。

2017 年 10 月 07 日 22:539890
用户头像
郭蕾 做有意思的事情!

发布了 211 篇内容, 共 110.6 次阅读, 收获喜欢 40 次。

关注

评论

发布
暂无评论
发现更多内容

Week9 作业:描述秒杀系统

evildracula

架构师训练营第十三周课程笔记及心得

Airs

盘点2020 | 21 张图总结我的 2020 年

pingan8787

盘点2020

Java并发编程:AQS的原子性如何保证

码农架构

Java java 并发

IoT数据模型设计

soolaugust

物联网 IoT 数据模型 工业物联网 七日更

盘点2020 | 干饭人 cxuan 活下来了

cxuan

学习 总结 盘点2020

工作3年,看啥资料能月薪30K?

小傅哥

Java 面试 小傅哥 七日更 技术成长

训练营第十三周作业 1

仲夏

极客大学架构师训练营

训练营第十三周作业 2

仲夏

点个外卖,我把「软中断」搞懂了

小林coding

Linux 操作系统

LeetCode题解:92. 反转链表 II,递归,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

蚂蚁集团下架互联网存款产品:互联网金融是天使还是魔鬼

石头IT视角

第13周作业

paul

生产环境全链路压测建设历程 15:达成了99.99%,建设了哪些稳定性产品、工具?

数列科技杨德华

全链路压测 七日更

《面试官不讲武德》对Java初级程序猿死命摩擦Http协议

Silently9527

面试 https HTTP 图解https

一文搞懂 CountDownLatch 用法和源码!

cxuan

Java 源码 并发

架构一期第十三周作业

Airs

Cache Design Patterns

邵俊达

盘点2020|从写程序到写文章,一个宅男程序猿到平台写手的心路历程

罗小龙

程序猿 盘点2020 心路历程 宅男 平台写手

阿里 10 年:一个普通技术人的成长之路

阿里巴巴云原生

阿里云 云原生 技术人 自我思考 职场成长

与前端训练营的日子 --Week08

SamGo

学习

JVM 垃圾回收原理

梧桐

Linux 如何实现定时调度任务

Near

Linux Timer 定时调度

算法的时间与空间复杂度

思想者杰克

七日更

第九周-作业一

ray-arch

DeFi平台DAPP软件系统开发

开發I852946OIIO

系统开发

围观|第一代云原生企业米哈游如何让想象发生?

阿里巴巴云原生

阿里云 最佳实践 运维 云原生 游戏开发

第九周总结

小兵

JVM 垃圾回收原理

皮蛋

JVM JVM原理

MySQL修改账号密码方法大全

Simon

MySQL 七日更

快手基于 Apache Flink 的优化实践

Apache Flink

flink

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

如何理解Serverless?-InfoQ