FaaS,PaaS和无服务器体系结构的好处


1
2
3
note:
    faas:功能即服务
    paas:平台即服务

本文讨论无服务器是什么,将其与PaaS和SPaaS进行比较,无服务器体系结构的优点和成本以及对框架的需求。

最初,无服务器意味着开发人员不必关心设置和管理运行其后端应用程序的服务器。不是说没有涉及服务器,而是后端基础架构是由第三方提供者维护的,所需的功能是作为服务提供的,包括数据库,消息传递,认证等。这个服务基础结构通常被称为后端即服务(Backend-as-a-服务(BaaS)或移动后端即服务(MBaaS)。

但是,当亚马逊在2014年宣布AWS Lambda时,将无服务器模式推向了另一个层次,为云中运行的应用程序引入了新的系统架构。没有永久进程在服务器上运行,等待HTTP请求或API调用,而是一个触发AWS服务器上的一段代码(通常只是一个函数)的事件机制。

使用这种范例时,不必考虑服务器。重要的是写一段代码在某个事件发生时被执行。云提供商负责查找运行代码的服务器,并在需要时扩展。一旦执行结束,用于运行这些功能的容器就会退役。并且执行以100毫秒为单位计量,用户仅对代码运行时消耗的资源收费。一些人称这种功能即服务(FaaS)为“另一种服务”(YAssS),这是云计算首次亮相后出现的众多功能之一。

亚马逊并不是唯一的FaaS提供商。其他还包括Google Cloud Functions,Microsoft Azure Functions,IBM OpenWhisk开源实现,Iron.io和Webtask。

无服务器体系结构适合纳米服务。如果微服务是一个旨在解决相对较小业务能力的过程,则纳米服务将处理相应能力的一小部分。例如,一个微服务可以用一个帐号来执行所有CRUD操作所需的代码,而每个帐号操作都有一个nanoservice:创建,读取,更新和删除。当触发“创建帐户”事件时,相应的nanoservice将作为AWS Lambda函数执行。很少使用术语nanoservice,最喜欢微服务甚至只是服务。

有人认为FaaS只是另一个PaaS,但意向媒体工程副总裁Mike Roberts有另一个意见:

大多数PaaS应用程序并不是为了满足每个请求的整个应用程序,而FaaS平台正是这样做的。 …

FaaS和PaaS之间的关键操作差异在于缩放。对于大多数PaaS,您仍然需要考虑规模,例如用Heroku你想运行多少个Dynos。 FaaS应用程序是完全透明的。即使您将PaaS应用程序设置为自动扩展,您也不会这样做到个别请求级别(除非您拥有非常特殊的流量配置文件),因此FaaS应用程序在成本方面效率更高。

Roberts并没有考虑到每个人都应该抛弃PaaS并开始使用FaaS,他们提到了一些原因:“API网关的工具和成熟度可能是最大的。此外,在PaaS中实施的12因子应用程序可能会使用应用程序内只读缓存进行优化,这不是FaaS功能的选项。

自称为高级思想家和Raconteur的Camille Fournier在推特上写道:“如果无服务器的服务将成为像存储过程那样的东西,这个好主意很快就会变成巨大的技术债务。”罗伯茨解决了这个问题,认为FaaS可能是只有无服务器功能只是“包装访问数据库的一小段代码”时,用SPaaS(Stored-Procedures-as-a-Services)代替。但由于FaaS功能可用于许多其他目的,所以比较是无效的。他还指出,与存储过程不同,无服务器功能不需要特定于供应商的语言或框架,可以对其进行测试,并且可以轻松进行版本控制。

ThoughtWorks开发人员Badri Janakiraman在谈到无服务器体系结构时指出,FaaS引入了一个转变:通常包含大部分逻辑的长期服务器进程被分解为专有服务和第三方服务,而应用程序的流量控制转移到客户:

无服务器应用程序通常广泛使用第三方服务来完成传统上由服务器处理的任务。这些服务可能是互操作的服务的丰富生态系统,例如Amazon AWS和Azure,也可能是单一服务,试图提供一整套功能,如Parse或Firebase。这些服务提供的抽象可以是基础设施(如消息队列,数据库,边缘缓存…)或更高级别(联合身份验证,角色和功能管理,搜索…)。基于通用服务器的Web应用程序的主要职责之一是控制请求 - 响应周期。服务器端的控制器处理输入,调用适当的应用程序行为并构建动态响应,通常使用模板引擎。在无服务器应用程序中,应用程序行为由第三方服务组织在一起,客户端控制流和动态内容生成取代了服务器端控制器。丰富的JavaScript应用程序,移动应用程序(以及越来越多的电视或嵌入式IoT应用程序)通过进行API调用和使用客户端UI框架来协调各种服务之间的交互,从而生成动态内容。关于实现无服务器应用程序的好处,Janakiraman列出大大降低了成本,因为不需要支付在云中租用整个服务器的费用,而只需要在执行期间获得资源消耗。可伸缩性,因为很容易将触发的独立服务按事件进行缩放;缺乏运营和维护基础设施。谈到成本,Janakiraman评论道:“将一个应用程序分解成一系列服务的概念性开销是显着的,随着所使用服务的数量和种类的增加而增加”,以及开发和测试复杂性的提高。在创建基于FaaS的整个后端时,使用无服务器方法存在另一个隐藏成本。 serverless.com在他们的文档中解释说:虽然AWS Lambda提供了开发/运行应用程序的强大的新方法,但是当我们开始基于AWS Lambda构建我们的第一个项目时,我们意识到结构是非常需要的。管理Lambda引入的所有容器是一项艰巨的任务。添加到多开发人员团队,多阶段和多地区的支持,你会很快陷入混乱的局面。为此,无服务器公司已经创建了无服务器框架,一个开源项目,旨在帮助建设网络,移动和物联网应用与FaaS。目前与AWS Lambda合作,该框架的创建者打算在未来支持其他提供商。该框架具有许多功能,包括:在本地或远程运行和测试Lambda函数,部署Lambda函数,将REST API部署到AWS API网关,部署Lambda事件,支持多个AWS区域等。支持的语言是JavaScript / Node.js,Python,他们正在为混合添加Java。其他语言将在稍后添加。另一个无服务器框架是Apex,具有类似的功能,支持AWS,JavaScript / Node.js,Go,Java和Python,并计划在未来支持其他提供商。无服务器体系结构,amazon.com首席技术官Werner Vogels已经发布了许多参考体系结构,用于构建AWS Lambda应用程序。他为创建移动后端,实时文件处理,Web应用程序,物联网后端以及基于Kinesis的实时流处理提供了指导。这些参考体系结构中概述的原则适用于其他FaaS提供商,唯一的变化就是所使用的服务。

原文地址:https://www.infoq.com/news/2016/06/faas-serverless-architecture