【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

FaaS、PaaS 和无服务器体系结构的优势

  • 2016-06-26
  • 本文字数:2935 字

    阅读完需:约 10 分钟

本文介绍了无服务器技术,并将其与 PaaS 和 SpaaS 进行了对比,同时介绍了无服务器体系结构的收益和成本,还有框架方面的需求。

最开始,“无服务器”意在帮助开发者摆脱运行后端应用程序所需的服务器设备的设置和管理工作。这项技术的目标并不是为了实现真正意义上的“无服务器”,而是指由第三方供应商负责后端基础结构的维护,以服务的方式为开发者提供所需功能,例如数据库、消息,以及身份验证等。这种服务基础结构通常可以叫做后端即服务(Backend-as-a-Service,BaaS),或移动后端即服务(Mobile Backend-as-a-service,MBaaS)。

但 Amazon 在 2014 年发布的 AWS Lambda 让“无服务器”这一范式提高到一个全新的层面,为云中运行的应用程序提供了一种全新的系统体系结构。至此再也不需要在服务器上持续运行进程以等待 HTTP 请求或 API 调用,而是可以通过某种事件机制触发代码的执行,通常这只需要在 AWS 的某台服务器上运行一个简单的功能。

使用这一范式的开发者无需考虑服务器细节,只需要负责编写发生某些事件后所需执行的代码。云供应商将负责提供用于运行这些代码的服务器,并在必要时对服务器进行缩放。执行完毕后,承担这些功能的容器会立刻停用,并且执行过程以 100 毫秒为单位进行度量,用户只需为运行代码过程中所消耗的资源付费。一些人将这种模式叫做功能即服务(Function-as-a-Service,FaaS),另一种“即服务”(Yet-Another-as-a-Service,YassS),自从云计算技术登场后这样的称呼越来越多了。

Amazon 并不是唯一的 FaaS 供应商。其他厂商,例如 Google Cloud Functions Microsoft Azure Functions IBM OpenWhisk ,以及 Iron.io Webtask 等各种开源实现都提供了类似的服务。

无服务器体系结构很适合搭配NanoService 使用。如果说微服务(MicroService)是为了提供相对小规模的业务能力,那么可以认为NanoService 提供的是这种能力的碎片。例如,可以通过微服务代表为某个客户执行所有CRUD 操作所需的代码,而NanoService 可以代表客户所要执行的每个操作:创建、读取、更新,以及删除。当触发“创建帐户”事件后,将通过AWS Lambda 函数的方式执行相应的NanoService。但这种时候很少使用NanoService 这样的称呼,大部分人更愿意将其称为微服务,或者就叫做“服务”。

一些人认为 FaaS 就是另一种形式的 PaaS ,但 Intent Media 的工程副总裁 Mike Roberts有自己的不同看法

大部分 PaaS 应用无法针对每个请求启动和停止整个应用程序,而 FaaS 平台生来就是为了实现这样的目的。…

FaaS 和 PaaS 在运维方面最大的差异在于缩放能力。对于大部分 PaaS 平台,用户依然需要考虑缩放,例如在使用 Heroku 时需要考虑到底需要运行几个 Dyno。但是对于 FaaS 应用,这种问题完全是透明的。就算将 PaaS 应用设置为自动缩放,依然无法在具体请求的层面上进行缩放(除非提供非常具体的流量塑形配置文件),而 FaaS 应用在成本方面效益就高多了。

Roberts 并不认为大家都需要抛弃 PaaS 转为拥抱 FaaS,原因有几个:“工具,以及 API 网关的完善程度可能是最大的问题。此外 PaaS 中实施的 12-Factor Apps 可能会使用应用内只读缓存以优化性能,这种情况就不适合使用 FaaS 功能。”

自称为资深思想家和“话痨”的 Camille Fournier 发布了一条推文质疑说:“如果无服务器服务将成为类似存储过程那样的重要概念,一个本来挺好的想法可能很快就会产生大量技术债。”作为对这个问题的回应,Roberts 认为,只有在无服务器功能仅仅是“一小段用于对数据库的访问进行封装(Wrap)”的情况下,FaaS 才能称之为SpaaS(Stored-Procedures-as-a-Services,存储过程即服务)。但FaaS 的功能还可以用于其他很多用途,因此不适合这样进行类比。Roberts 同时还补充说,与存储过程不同,无服务器的功能不依赖具体的语言或框架供应商,可以轻松实现测试和版本控制等功能。

谈到无服务器体系结构,ThoughtWorks 公司的开发者Badri Janakiraman补充了 FaaS 导致的一种变革:长久以来,用于包含大部分逻辑的服务器流程可以拆解为大量专有的,以及第三方服务,同时对应用程序的控制转移到了客户端:

无服务器应用程序通常需要借助大量第三方服务实现原本由自己的服务器所承担的任务。这些服务相互交织组成了丰富的服务生态系统,例如 Amazon AWS Azure ,或者也可以通过“大包大揽”的方式通过一个服务提供一系列能力,例如 Parse Firebase 。这些服务所提供的抽象可以是基础结构层面的(例如消息队列、数据库、边缘缓存…),也可能是高级别的(例如联合身份、角色和能力管理、搜索…)。

对于常规用途的基于服务器的 Web 应用程序,其主要职责之一在于控制请求响应周期。服务器端的控制程序负责处理输入,引用相应的应用程序行为,构建动态的响应,这一过程通常需要使用模板化的引擎。在无服务器应用程序中,应用程序的行为与第三方服务交织在一起,客户端的控制流和动态的内容生成取代了服务器端的控制程序。富 JavaScript 应用程序、移动应用(以及越来越多的电视机或嵌入式物联网应用)通过调用 API 并使用客户端 UI 框架生成动态内容,借此对不同服务之间的交付进行协调。

对于实施无服务器应用程序所能获得的收益,Janakiraman 认为包括:成本大幅降低,开发者不需要为云中运行的整个服务器付费,只需要为执行代码过程中消耗的资源付费;可缩放能力,可以通过事件触发的方式轻松地对不同服务进行缩放,而无须考虑基础结构的运维和维护。在成本方面 Janakiraman 认为“将一个应用程序拆分为相互交织的不同服务,观念上的负担会非常大,所用服务的种类越多这种负担就会越大”,并且开发测试工作的复杂度会增加。

使用无服务器方法通过 FaaS 创建整个后端系统时还有一项隐含成本, serverless.com 在自己的文档中谈到了这个问题

虽然 AWS Lambda 提供了强大的应用程序开发 / 运行新方法,但在完全基于 AWS Lambda 开发首个项目时我们意识到自己急需一种新的结构。对 Lambda 所引入的所有容器进行管理这是一项困难的任务。对于包含多名开发者、多种阶段,或需要为多个区域提供支持的团队,很快就会开始变得手忙脚乱。

为此 Serverless Inc. 制订了 Serverless Framework ,希望借助这个开源项目帮助开发者通过 FaaS 顺利构建 Web、移动,以及物联网应用程序。该框架目前可适用于 AWS Lambda,但框架的创建者预计未来还将支持其他供应商。这个框架提供了多种功能,包括在本地或远程运行和测试 Lambda 函数,部署 Lambda 函数,将 REST API 部署至 AWS API 网关,部署 Lambda 事件,为多个 AWS 地区提供支持等。目前可支持的语言包括 JavaScript/Node.js,对 Python 和 Java 的支持正在开发中,稍后可能还会增加对其他语言的支持。

其他无服务器框架还包括 Apex ,该框架具备类似的功能,可支持 JavaScript/Node.js、Go、Java 和 Python,未来还计划支持其他供应商。

对于希望进一步了解无服务器体系结构的人,amazon.com 的 CTO Werner Vogels 发布了一系列使用 AWS Lambda 构建应用程序的参考体系结构。他还提供了各种指南,帮助开发者创建移动后端、实时文件处理能力、Web 应用程序、物联网后端,以及基于 Kinesis 的实时流处理能力。这些参考体系结构中体现的基本原则也适用于其他 FaaS 供应商,不过具体使用到的服务可能会有所变化。

2016-06-26 19:028453
用户头像

发布了 283 篇内容, 共 101.9 次阅读, 收获喜欢 61 次。

关注

评论

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

【ClickHouse】 核心特性

LeifChen

Clickhouse 8月日更

百度世界2021|重构AI世界,百度大脑7.0重磅来袭

爱极客侠

加油站借力光伏发电转型碳中和 推广复制仍待破题

CECBC

微博评论系统高性能高可用计算架构-模块5

小牧ah

架构实战营

阿里架构师花近十年时间整理出来的Java核心知识pdf(Java岗)

编程菌

Java 编程 程序员 面试 计算机

阿里P8整理的《百亿级并发系统设计》实战教程,实在是太香了

编程菌

Java 编程 程序员 阿里 计算机

没有捷径的中国AI“直道超车”之路:百度世界大会2021的智能时代启示录

脑极体

面试必考:秒杀系统如何设计?

苏三说技术

系统设计 高并发 秒杀

PaaS厂商该如何面对方兴未艾的通信云To B市场

融云 RongCloud

Chai 和 Mocha 为API编写测试

devpoint

JavaScript 单元测试 8月日更

QDS curl 安装

耳东@Erdong

curl 8月日更 qds

有了阿里人的并发图册+JDK源码速成笔记,我终于不慌内卷了

编程菌

Java 编程 程序员 面试 计算机

架构实战营第五周作业——微博评论高性能高可用

发酵的死神

架构实战营

腾讯云数据库开源再突破:TDSQL PG版查询性能提升百倍

腾源会

腾讯云 开源 腾讯 tdsql TBase

Flink 和流式应用运维(十-中)

数据与智能

flink 调度 检查点

Python Web 菜谱项目再次前进一步,从应用层了解内置用户认证系统

梦想橡皮擦

8月日更

前端之算法(八)贪心算法

Augus

算法 8月日更

架构实战营模块五作业

袁小芬

从零开始的SRC挖掘

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

Jira Automation 探索与实践

GrowingIO技术专栏

项目管理 自动化 Jira

【SpringCloud技术专题】「Feign技术专区」从源码层面让你认识Feign工作流程和运作机制

洛神灬殇

OpenFegin spring-cloud Fegin 8月日更

真的香!Github一夜爆火被各大厂要求直接下架的面试题库也太全了

编程菌

Java 编程 程序员 面试 计算机

模块五作业

king

大一被调剂到计算机,对电脑根本不了解,只会上网聊天,如何杜绝

hanaper

c++ 数据结构算法

干货来袭!阿里技术官甩出的内部首推分布式系统开发笔记太顶了

编程菌

Java 编程 程序员 面试 计算机

Nacos-spring-boot 0.2.10 发布,全面支持 Nacos2.0

阿里巴巴中间件

云计算 开源 云原生 中间件

Flutter Android 端 FlutterView 相关流程源码分析

工匠若水

flutter android 8月日更

我的架构设计方法论

南冥

从0开始的TypeScriptの十一:模块和命名空间

空城机

typescript 大前端 8月日更

【大咖直播】Elastic Security 安全管理实战工作坊

腾讯云大数据

大数据 elasticsearch

网络攻防学习笔记 Day109

穿过生命散发芬芳

网络安全 8月日更

FaaS、PaaS和无服务器体系结构的优势_Google_Abel Avram_InfoQ精选文章