写点什么

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

  • 2019 年 12 月 25 日
  • 本文字数:2029 字

    阅读完需:约 7 分钟

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

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:549224
用户头像
小智 前 InfoQ 主编

发布了 408 篇内容, 共 347.4 次阅读, 收获喜欢 1905 次。

关注

评论 1 条评论

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

“架构莫斯”-错别字
2020 年 01 月 15 日 10:45
回复
没有更多了
发现更多内容

聊聊我对技术一些性质的认识

Tanzv

技术 思考 新人

一文带你看清HTTP所有概念

cxuan

HTTP

Python3.6.1官方文档练习——初入江湖(二)

小匚

Mac 使用笔记

FeiLong

程序员小白的个人思考

程序员小岑

程序员 职场 思考 感悟

LeetCode 781. Rabbits in Forest

liu_liu

LeetCode

LeetCode 513. Find Bottom Left Tree Value

liu_liu

LeetCode

玄铁重剑,我用过最贵重的键盘

池建强

ipad 苹果 键盘

VSCode 集成 Haskell 环境

liu_liu

vscode haskell hie Haskell Language Server

工作原则:决策要基于数据的支撑

Janenesome

高效工作 思考 原则

Redis实现热卖商品排行榜

北漂码农有话说

redis

Android | Tangram动态页面之路(二)介绍

哈利迪

android

《零基础学 Java》 FAQ 之 6-Java里Bean这个名字怎么来的

臧萌

Java spring

Java新技术:封闭类

范学雷

Java 架构 编程语言

谈谈控制感(5):怎么破控制感损失的局

史方远

职场 心理 成长

《零基础学 Java》 FAQ 之 5-如何在IntelliJ IDEA里配置JDK

臧萌

Java jdk intellij

不要做软件开发团队中打破窗户的那个人

程序员小岑

程序员 思考 感悟 软件开发 团队

十大经典排序算法总结

淡蓝色

Java 算法 计算机基础 排序

“我XXXX,还能学编程吗?”

三号无名指

编程 程序员 工具 入门

克服恐惧,勇于分享

孙苏勇

程序员 分享 工作

Web3极客日报#129

谢锐 | Frozen

区块链 独立开发者 技术社区 Rebase Web3 Daily

修改网桥默认地址

奔跑的菜鸟

Docker

要做医生,不要做卖药的

Janenesome

高效工作 思考 沟通

面试官:小伙子,听说你看过ThreadLocal源码?(万字图文深度解析ThreadLocal)

一枝花算不算浪漫

源码 并发编程 ThreadLocal

松哥手把手带你入门 Spring Security,别再问密码怎么解密了

江南一点雨

Java spring Spring Boot spring security

webpack入门系列之二——插件使用及热更新打包

子铭

Web

Web3极客日报#141

谢锐 | Frozen

区块链 独立开发者 技术社区 Rebase Web3 Daily

职涯思考

Kevin Z

职业 思考 工程师思维 硬件 工程师

回“疫”录(18):536公里的路

小天同学

疫情 回忆录 现实纪录 纪实 返程

MySQL常用权限说明

一个有志气的DB

MySQL 用户研究

Rust 与区块链四月月刊

Aimee 阿敏

区块链 rust 加密货币 crypto

看完这篇你就知道什么是无服务器架构了_云计算_Systango_InfoQ精选文章