无服务器将像智能手机终结PC时代带来革命变化! -ACM


无服务器Severless计算尽管在不断发展,但是在定义其抽象和实现方面都存在许多悬而未决的问题。我们(大胆地)总结了下一个十年对无服务器计算的五种预测:

  1. 当今的FaaS和BaaS分类将消失,让位于更广泛的抽象,我们将其归类为通用无服务器计算或特定于应用程序的无服务器计算。
  2. 新的通用无服务器抽象能够支持几乎所有用例。它们将支持状态管理以及用户建议或自动推断的优化,以实现与服务器计算相当或更高的效率。
  3. 随着不断的发展和普及,几乎任何应用程序(无论是小型应用程序还是大规模应用程序)使用无服务器计算都不会花费更多费用,反而可能更少。
  4. 机器学习将在无服务器实现中扮演关键角色,从而允许云提供商在提供简单的编程接口的同时优化大规模分布式系统的执行。
  5. 用于无服务器计算的计算机硬件将比当今为其提供支持的传统x86服务器更加异构。

如果这些预测成立,则无服务器计算将成为云时代的默认计算范例,在很大程度上取代有服务器的计算,从而结束客户端-服务器C/S时代,就像智能​​手机带动了PC时代的终结一样。
 
无服务器计算的抽象模型
无服务器提供一种隐藏服务器的抽象,从而简化了编程和运营模型。
传统现有的云计算几乎没有改变程序员的工作方式,尤其是与它对运营商的影响相比,在云中运行的许多软件与在传统数据中心中运行的软件完全相同。将当今最需要的编程技能与10年前所需的编程技能进行比较,您会注意到,即使随着特定技术的出现和发展,核心技能集的变化也很小。
相比之下,运维工作发生了巨大变化。安装和维护服务器,存储和网络已经成为过去,而不再是通过云提供者API来管理虚拟化基础架构,而是被DevOps运动所取代,后者着重于变更管理的技术和组织方面。
是什么使得在云中进行编程变得困难?
大多数云编程实际变成了分布式系统编程。在编写分布式系统时,程序员必须考虑数据中心的空间范围,各种局部故障模式以及所有安全威胁。这些关注表示“意外复杂性”,它是由实现环境引起的,与“基本复杂性”形成对比,后者是应用程序提供的功能中固有的。
当初高级语言正在取代汇编语言,从而使程序员无需再考虑复杂的机器详细信息,例如寄存器分配或内存中的数据布局。就像高级语言隐藏了CPU工作方式的许多细节一样,无服务器计算也隐藏了构建可靠,可伸缩且安全的分布式系统所需要花费的许多细节。
 
云计算的两个阶段
简而言之,云计算第一阶段的目标是简化系统管理员工作,第二阶段的目标应该是针对程序员。这一变化要求云提供商承担良好运行应用程序所需的许多运营职责。
  1. 自己租车和打出租车比较云计算两个阶段:要参加远程会议,您可以租用汽车或呼叫出租车来从机场到达酒店。自己租车就像服务器计算一样,无论您使用多少,都必须排队等候,签订合同,在整个逗留期间预订汽车,自己开车,前往酒店,支付停车费并填满汽车在返回之前先加油。
  2. 打出租车就像无服务器计算一样,您只需要提供酒店名称并付费即可。出租车服务提供训练有素的驾驶员,他们可以导航,乘车收费并给油箱加油。出租车可以简化交通,因为您无需知道如何操作汽车即可到达酒店。此外,出租车比出租汽车获得更高的利用率,从而降低了出租车公司的成本。

在无服务器计算中,程序员使用云提供商提供的高级抽象来创建应用程序。例如,他们可以定义云函数,一种“无状态”函数,可以选择语言如JavaScript和Python编程,然后指定函数如何运行,无论是在响应Web请求或触发事件。他们还可以使用无服务器对象存储、消息队列、键值存储数据库或移动客户端数据同步等等,这些服务集合称为后端即服务(BaaS)。托管云函数服务也称为函数即服务(FaaS),如今统称为无服务器云计算= FaaS + BaaS
 
无服务器抽象模型的应用
让我们研究大数据处理中的一个示例:一个可能在电子商务环境中出现的简单查询:使用从一百万个类别派生的权重计算平均超过100亿条记录。这种工作负载具有大量并行性的潜力,因此它受益于无限资源的无服务器。
我们提供了两种适合该示例的特定于应用程序的无服务器产品,并说明了该类别如何提供多种方法:
  1. 可以使用AWS Athena大数据查询引擎(一种使用SQL(结构化查询语言)编程的工具)对对象存储中的数据执行查询。SQL特别适合于分析,并且可以用一条语句来表示此计算。
  2. 或者,可以使用Google Cloud Dataflow提供的框架。这样做需要编写一个简单的MapReduce样式,使用Java或Python的程序,具有两个功能:一个功能为某些数据块计算加权平均值,另一个功能为单独的数据块将加权平均值合并为一个联合值。该框架负责将数据管道传入和传出这些功能,以及自动缩放,可靠性和其他分布式系统问题。与基于SQL的工具相比,此抽象可以运行任意代码,从而使其适合于更广泛的分析问题。

为我们的大数据示例提供高性能解决方案的通用无服务器抽象尚不存在。云函数似乎可以提供一种解决方案,因为它们允许用户编写任意代码,并且对于某些工作负载,但由于限制,它们的性能有时会比其他方法差很多。
如果我们使用云函数,而不是使用特定应用的框架,例如云数据流实现我们的榜样。借助云函数,提供商无需考虑应用程序的通信模式即可在各种VM实例之间分配工作,从而简化了自动扩展,但增加了网络流量。
 
云函数增强
我们建议了两种增强云函数的途径,以便它们在更广泛的应用程序中良好运行,有可能将它们转变为通用的无服务器抽象。
首先,我们假设程序员可能需要如何获得更好的性能。可能需要描述应用程序通信模式(例如,广播或全部减少),或建议任务放置关联。这种方法在编译器中具有先例(例如,分支预测,对齐和预取提示)。
其次,更令人信服的是,我们设想通过自动优化来消除效率低下的问题。在我们的示例中,云提供商可能会承诺从观察到的通信模式中推断出位置优化。在某些情况下,也可以基于对程序的分析来静态地进行此类推断。在单机环境中,这在现代编译器和语言运行时所做的工作中已有很多先例,并且人们可能会认为这种形式的无服务器计算是对分布式系统的语言支持。