写点什么

看完这篇你就知道什么是无服务器架构了

2019 年 12 月 25 日

看完这篇你就知道什么是无服务器架构了

Gartner 最近的一份报告表明,到 2020 年,全球将有 20%的企业部署无服务器架构


这说明无服务器架构不只是一个流行语,而是一种众所周知的云计算趋势,并且已经在软件世界掀起一场革命。大型厂商(如亚马逊、微软和谷歌)已经在无服务器架构领域重资投入,追赶革命的浪潮。


与其名字相反,无服务器架构实际上并没有把服务器去掉。那么,究竟什么是无服务器架构?


什么是无服务器架构?

无服务器架构是指应用程序使用第三方 Function 和服务,但不需要管理服务器。无服务器架构主要包含了两个方面:


  • FaaS(Function as a Service,Function 即服务):包含服务器端业务逻辑的无状态 Function。这些 Function 运行在独立的容器里,基于事件驱动,并由第三方厂商托管,如 AWS Lambda 或者 Azure Functions。

  • BaaS(Backend as a Service,后端即服务):使用第三方服务(如 Firebase、Auth0)来达成目的。使用 BaaS 的应用程序通常是富客户端应用程序,如 SPA 或移动 App。客户端负责处理大部分的业务逻辑,其他部分则依赖外部服务,如认证、数据库、用户管理,等等。


无服务器架构包含了 BaaS 和 FaaS,不过这篇文章着重关注 FaaS。


无服务器架构的特点

  • 不需要管理服务器;

  • 无状态;

  • 自动伸缩;

  • 没有运营成本;

  • 成本由事件驱动;

  • 处理第一个事件需要一些启动时间;

  • 因为运行时小,所以具有较高的安全性。


无服务器的生命周期

下图描述了一个 Function 的生命周期。



无服务器应用程序架构示例

假设有一个简单的线上汽车拍卖应用程序,用户可以登录并出价,拍卖时间结束时价高者得。


传统上,架构里会包含一个部署了应用程序和前端的单体服务器。



上述架构采用的是瘦客户端方式,所有的业务逻辑(如认证、回话管理、车辆管理等)都部署在服务器端。


那么,在一个无状态的微服务架构中,这个应用程序又会是什么样子?



原来的单体应用程序被拆分成了多个服务器端组件。


  • 认证 Function:这是一个用于管理用户认证(登录)的 Function(Function,FaaS)。

  • 车辆管理服务:一个处理与车辆相关操作的微服务,如列出车辆、查看车辆信息、比较车辆,等等。这个服务可以使用任意的语言或框架来开发,它与数据库通信,并且独立运行。

  • 车辆出价 Function:这是另外一个 Function,也与数据库通信,录入用户出价记录。

  • API 网关:所有服务的入口点和反向代理。来自客户端的请求会先到达网关,网关根据路由规则将请求重定向到特定的服务。


在将服务拆分成微服务或 FaaS 时,需要考虑到业务逻辑、负载、规模等方面的因素。


上述的例子描述了无服务器架构和基于无服务器架构设计微服务时的大致过程。


无服务器架构与 PaaS

平台即服务(Platform as a Service)是另一个不需要开发人员管理服务器(包括硬件和软件)的架构莫斯。正因为如此,开发人员容易把无服务器架构和 PaaS 混为一谈。接下来,我们来看一看它们之间的相似点和不同点。


相似点

  • 开发人员不需要管理服务器。

  • 开发人员只要关注应用程序代码本身。


不同点

  • PaaS 提供了更为可控的部署方式,而无服务器的部署则更为严格。

  • 无服务器架构可以自动伸缩,而 PaaS 的伸缩需要进行配置。

  • 无服务器架构的成本是由事件驱动的,而 PaaS 是固定的。

  • PaaS 应用程序在部署之后会一直运行,并马上开始处理请求,而无服务器需要等待第一个事件,具体取决于事件的发生频率。


用例

无服务器的应用应该不仅限于某个领域、业务或架构。在进行应用程序架构时,你需要考虑多个因素,这些因素同样适用于无服务器架构。


  • 成本——无服务器架构非常节约成本,具体取决于实际的负载。

  • 服务器管理——无服务器架构可以极大地降低用于管理服务器的运营成本。

  • 伸缩——无服务器架构可以自动伸缩。

  • 响应时间——FaaS 需要一些初始化时间。如果负载很小(比如一个小时只有一个事件),每个请求都会经历冷启动,导致整体响应变慢。

  • 更快的发布周期——因为这些 Function 都是很小的单位,发布周期就变得很短。


以下是一些常见的用例


  • Web 应用程序;

  • 批处理和调度;

  • 移动和 IOT 后端;

  • 聊天机器人。


为什么要采用无服务器架构?

使用无服务器架构和 FaaS 有以下这些好处。


  • 减少服务器管理成本;

  • 减少运营成本;

  • 自动伸缩;

  • 比不间断运行的服务更安全;

  • 成本由请求或事件数来决定;

  • 更简单的打包和部署流程;

  • 缩短发布周期;

  • 开箱即用的监控。


无服务器架构的限制

与其他任何一种技术架构一样,无服务器架构也存在同样的限制。


  • 启动延迟;

  • 厂商锁定,对服务器缺乏控制;

  • 性能优化局限于代码内部;

  • 执行时间限制(AWS Lambda 的执行时间限制为 15 分钟);

  • 成本不可预测;

  • 开发环境和生产环境不一样;

  • 测试和调试更为复杂。


总结

无服务器架构是一种架构风格,通过 FaaS 将业务逻辑从长期运行的组件中移到临时的 Function 里。它可以解决很多架构和运营问题,简化开发者和运维人员的工作。


与其他解决方案一样,无服务器架构并不是银弹。它无法直接取代现有的组件,在决定是否要采用无服务器架构之前需要先分析一下自己的业务和技术需求,通盘考虑各种优点和缺点。


英文原文

Serverless Architecture- Why and How It’s a Smart Choice?


2019 年 12 月 25 日 10:548519
用户头像
小智 前 InfoQ 主编

发布了 402 篇内容, 共 321.4 次阅读, 收获喜欢 1773 次。

关注

评论 1 条评论

发布
用户头像
平台即服务(Platform as a Service)是另一个不需要开发人员管理服务器(包括硬件和软件)的架构莫斯。

“架构莫斯”-错别字
2020 年 01 月 15 日 10:45
回复
没有更多了
  • 无服务器架构 3/3

    无服务器是软件架构世界中的热门话题。在这一领域我们已经看到很多书籍、开源框架、大量不同类型的供应商和产品,甚至专门的会议活动。但无服务器到底是什么,为什么值得(或不值得)考虑该技术?希望这一系列文章能为你提供一些启发。 这一系列文章共三篇,本文是第三篇。

  • 如何通过 Node.js 实现一套最简单的信令系统?

    本文为你讲解了如何实现一套最简单的 WebRTC 信令服务系统。有了它,你就能真正地体验到 WebRTC 的强大之处了。

    2019 年 8 月 8 日

  • TriggerMesh 开源用于多云环境的 Knative Event Sources

    TriggerMesh发布了最新的开源项目Knative Lambda Sources(KLASS)。

  • 总是在说 MVC 分层架构,但你真的理解分层吗?

    分层,更关键的是,提供抽象。这种分层抽象在计算机领域无处不在,无论是编程语言,还是网络协议,都体现着分层抽象的价值。

    2019 年 4 月 1 日

  • 无服务器架构 1/3

    无服务器是软件架构世界中的热门话题。在这一领域我们已经看到很多书籍、开源框架、大量不同类型的供应商和产品,甚至专门的会议活动。但无服务器到底是什么,为什么值得(或不值得)考虑该技术?希望本文能为你提供一些启发。这是系列文章的第一篇,主要将介绍无服务器架构的概念。

  • ServerlessConf 2017 大会的十大看点

    ServerlessConf 2017大会于4月26日至4月28日在美国德克萨斯州奥斯汀举行,spotinst的联合创始人兼CEO Amiram Shachar参加了此次大会。会后,他在博客上分享了一些有关这次大会的内容,并表达了对无服务器架构的一些看法。

  • 无服务器计算的未来

    现在是2017年,距离两年前无服务器计算革新只取得了少许进展(你听见人们在唱歌吗?)。这次变革并不是像Docker那样突飞猛进地前进,而是采用了相对平稳的发展节奏。Amazon新发布了Web Services的Lambda特性,产品保持了一个有规律的发布节奏,另一个重要的第三方(微软)正在一个接一个地发布生产环境版本,也有一些新的开源项目频繁地加入这场盛宴。

  • 为什么我们管 Yarn 叫作资源调度框架?

    在我们开始聊Yarn的实现原理前,有必要看看Yarn发展的过程,这对你理解Yarn的原理以及为什么被称为资源调度框架很有帮助。

    2018 年 11 月 17 日

  • Autodesk 无服务器微服务架构样例

    在题为“什么比微服务更好?无服务器微服务”的网络直播中,Alan Williams(Autodesk)、Asha Chakrabarty(Amazon)和Alan Ho(Apigee)讨论了一个无服务器微服务的架构。其中,该微服务的构建使用了AWS lambda函数和运行在AWS上的Apigee端点。

  • Serverless:我还是一个大孩子

    无服务器计算在这里,并将继续存在。我们将看到无服务器服务越来越接近这里描述的理想化的情景。但是,虽然Serverless已经成熟了,但我们还有一段路要走。为了真正实现无服务器计算的理想,我们需要审慎地重新思考当前的计算和安全模型。虽然挑战是巨大的,但回报更大,因此我们可能比我们想象的更快实现这个理想。

  • Serverless 架构的五大优势

    在了解了何为Serverless,各种服务组件之后,如何将服务组件组合成完整的应用程序? 基于Serverless开发的应用架构什么样子?与传统非Serverless应用程序架构相比,Serverless有哪些优势?本文将回答这些问题。

  • Serverless 掀起新的前端技术变革

    最近关于 Serverless 的讨论越来越多。看似与前端关系不大的 Serverless,其实早已和前端有了渊源,并且将对前端开发模式产生变革性的影响。

  • 无服务器架构 2/3

    无服务器是软件架构世界中的热门话题。在这一领域我们已经看到很多书籍、开源框架、大量不同类型的供应商和产品,甚至专门的会议活动。但无服务器到底是什么,为什么值得(或不值得)考虑该技术?希望这一系列文章能为你提供一些启发。 这一系列文章共三篇,本文是第二篇。

  • GitLab 发布 11.6 版本,支持无服务器功能部署

    GitLab的最新版本能够使用Knative和Kubernetes来构建、部署和管理无服务器工作负载(利用FaaS模型)。

  • 微服务:Java EE 的掘墓人

    应用开发的风格这几年一直在变化,而微服务变得越来越流行。大公司把大型应用拆分成可以单独部署的小型应用,这些小型应用被部署在云端的容器里。开源微服务框架Light Java为这些运行在容器里的微服务提供了很多特性,它支持设计驱动,开发者只需要把注意力专注在业务逻辑上,剩下的事情可以由框架和DevOps流程来处理。

  • 与 Web 开发不同(二):进程间通信

    2020 年 1 月 16 日

  • 第 194 讲 | 刘俊强:2019 年云计算趋势对技术人员的影响

    学会有条理的梳理工作、对数据安全敏感、持续学习等良好的工作习惯,相信面对云计算带来的挑战也将游刃有余。

    2019 年 3 月 27 日

  • 为“无服务器”正名

    本文讨论“无服务器”的缺点和优点,并为其改变构建应用程序的方式带来的好处进行辩护——进一步向无服务器架构发展。

  • 无服务器计算:追求极致效率的多面手

    无服务器计算技术,以其简洁、易用、高效的特点,通过极致的抽象,完全屏蔽了底层基础设施,让用户可以专注业务逻辑的实现。

    2020 年 4 月 6 日

发现更多内容

《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 RabbitMQ

zhisheng

大数据 flink 流计算

如果你想做汽车开发,请先看看这篇。

水滴

自动驾驶 软件开发 开发

露营之美,在乎山水之间也

李冬梅

北大学子手写实现《统计学习方法》书中全部算法!

GitHubDaily

人工智能 GitHub 学习 程序员

《从0到1学习Flink》—— Flink JobManager 高可用性配置

zhisheng

大数据 flink 流计算

Flink 从0到1学习—— Flink 不可以连续 Split(分流)?

zhisheng

大数据 flink 流计算

2020年4月云主机性能评测报告

博睿数据

云计算 百度云 ucloud 性能测试 公有云

DDD 实践手册(番外篇: 事件风暴-实践)

Joshua

领域驱动设计 DDD 事件风暴 事件驱动 Event Storming

Flink 从0到1学习—— 分享四本 Flink 国外的书和二十多篇 Paper 论文

zhisheng

大数据 flink 流计算

游戏夜读 | 数据整理的难题?

game1night

重学 Java 设计模式:实战工厂方法模式

小傅哥

设计模式 小傅哥 重构 架构设计 工厂模式

职场“潜”规则(二)

俊毅

职场 感悟 个人提升 人才

如何参与开源项目

郭旭东

GitHub 开源

Deno会在短期内取代Node吗?

Geek_Willie

node.js SpreadJS deno

Neo4j执行计划

脚动两轮男之漂流小王子

那个业务大拿死在了这个地方

小眼睛聊技术

Java 学习 高效工作 程序员 个人成长

k8s上运行我们的springboot服务之——k8s 1.16.0安装

柠檬

k8s

k8s上运行我们的springboot服务之——在linux安装docker并搭建docker私服

柠檬

Docker k8s

《从0到1学习Flink》—— Flink parallelism 和 Slot 介绍

zhisheng

大数据 flink 流计算

Flink 从0到1学习 —— 如何使用 Side Output 来分流?

zhisheng

大数据 flink 流计算

Jenkins 插件开发之旅:两天内从 idea 到发布(上篇)

donghui

DevOps jenkins jenkins-plugin

Jenkins 插件开发之旅:两天内从 idea 到发布(下篇)

donghui

DevOps jenkins jenkins-plugin

JVM源码分析之堆内存的初始化

猿灯塔

【迁移】撸论文系列之——Bigtable

罗琦

论文阅读 bigtable

聊一聊采访外籍人员时需要注意的几点事项

李冬梅

态度 体验 感悟

招联金融助力经济复苏 致力成为“智慧生活的消费金融专家”

极客编

一文搞懂RSA算法

somenzz

《从0到1学习Flink》—— 你上传的 jar 包藏到哪里去了?

zhisheng

大数据 flink 流计算

你不知道的JSON.stringify(上)

前端黑板报

Java json

1分钱秒杀!疫情季,如何为孩子的升学保驾护航?

极客编

k8s上运行我们的springboot服务之——上传服务到docker私服

柠檬

Docker springboot

看完这篇你就知道什么是无服务器架构了-InfoQ