无服务器计算如何节省时间和成本
2019-09-05JoshFruhlinger
Josh Fruhlinger
独立的简单函数可以让开发工作变得更加容易,同时由事件驱动的执行可让操作变得更加便宜。
开发人员往往需要花费大量的时间编写代码以解决业务问题。随后,运营团队又要花费大量精力搞明白开发人员编写的代码,并让它们在所有的计算机上运行,然后还要确保这些计算机能够顺利运行。这可以说是一项永远没有尽头的任务,那么为什么不将这部分工作留给别人去做呢?
在过去的二十年里,虚拟机、云计算、容器等众多IT创新一直专注于确保让用户不必过多地考虑运行代码的底层物理机器。如今无服务器计算正变得越来越受青睐,原因在于在使用无服务器计算时,用户不需要了解运行代码的硬件或操作系统,因为服务提供商都会为他们代劳。
什么是无服务器计算?
无服务器计算是一种云执行模型,由云服务提供商动态分配执行特定代码片段所需要的资源和存储,然后根据使用情况向用户收费。当然,这仍然涉及服务器,但是它们的供应和维护完全由服务提供商负责。亚马逊无服务器计算的倡导者Chris Munns在2017年的会议上就曾表示,站在编写和部署代码的团队的角度,“根本没有服务器可以管理或配置。这里面既没有裸机,也没有虚拟服务器和容器。在无服务器领域中,不需要你管理主机、修补主机或是在操作系统层面处理任何东西。”
开发人员Mike Roberts称,“无服务器”这一术语曾被用于描述所谓的“后端即服务”场景,在这种场景中移动应用程序将连接完全托管在云中的后端服务器。如今当人们谈论无服务器计算或无服务器架构时,往往是指“功能即服务”产品,在这种场景中用户编写的代码只用于业务逻辑并上传至服务提供商那里。该服务提供商负责配置所有的硬件、虚拟机和容器管理,甚至包括通常内置于应用程序代码中的多线程这类的任务。
无服务器函数是事件驱动的,这意味着只有在请求触发时才会调用代码。服务提供商仅根据计算时间对该次执行进行收费,而不是每月对维护物理或虚拟服务器等工作收取固定费用。这些函数可以连接在一起以创建处理管道,或者作为规模更大的应用程序的组件,与运行在容器中或在传统服务器上的其他代码交互。
无服务器计算的优缺点
对于这个问题,无服务器计算的两个最大好处是:开发人员可以专注于代码的业务目标,而不是基础设施问题,公司只需要支付他们实际使用的计算资源,而不用购买物理硬件或租用云实例,因为往往这些硬件和实例在购买或租下后大部分会处于闲置状态。
Navica公司的CEO Bernard Golden认为,后一点对于由事件驱动的应用程序特别有益。例如,应用程序可能大部分时间处于空闲状态,但是在某些情况下又必须同时处理许多事件请求。亦或者,应用程序只需要处理物聯网设备定期性或间歇性发送过来的数据。在这两种情况下,传统方法都需要配置一个能够处理峰值负载的强大服务器,但是大多数时候服务器都没有得到充分利用。如果使用的是无服务器架构,那么你只需为实际使用的服务器资源付费。
无服务器计算也适用于特定类型的批处理。无服务器架构用例的经典实例之一是上传和处理一系列单个图像文件并将它们发送到应用程序的另一部分。
无服务器函数最明显的缺点可能是,它们是短暂的,并不适合长期任务。大多数无服务器服务提供商不会让代码执行超过几分钟,在启动函数时,他们也不会保留之前实例的任何状态数据。问题在于,无服务器代码可能需要几秒钟才能启动,虽然这对于许多用例而言并不是问题,但是如果应用程序需要低延迟,那么这就成了问题。
正如一些业界专家所指出的那样,许多其他缺点都与供应商锁定有关。尽管有可用的开源选项,但是大型商业云服务提供商在无服务器市场占据了主导地位。这意味着开发人员往往最终会使用他们的服务提供商的工具,这导致即便他们不满意也很难换用其他服务提供商的产品。而且大量的无服务器计算都是在服务提供商的基础设施上进行的,因此将无服务器代码集成到本地开发和测试管道中会变得可能很困难。
无服务器服务提供商:AWS Lambda、Azure函数和谷歌云函数
无服务器计算时代始于2014年,其标志是基于亚马逊云服务的AWS Lambda的推出。微软在2016年也推出了Azure函数。自2017年以来一直处于测试阶段的谷歌云函数(Google Cloud Functions)也终于达到了生产状态。这三种服务在局限性、优势、支持的语言和工作方式方面略有不同。业内专家Rohit Akiwatkar对这三者之间的区别曾进行过详细介绍。此外,处于运行状态的还有基于开源Apache OpenWhisk平台的IBM Cloud Functions。
在所有无服务器计算平台中,AWS Lambda是最突出的,发展时间最长和也最为成熟。
无服务器堆栈
与许多软件领域的情况一样,无服务器世界也看到了软件堆栈的发展,这些软件堆栈可为构建无服务器应用程序提供所需的不同组件。每个堆栈由编程语言、应用程序框架和一组触发器组成。其中,应用程序框架可为代码提供架构,触发器可帮助平台理解并启动代码执行。
虽然用户可以混合使用这些类别中的不同产品,但是服务提供商方面存在一些限制。例如,在语言方面,用户可以在AWS Lambda上使用Node.js、Java、Go、C#和Python,但只有JavaScript、C#和F#可在Azure函数上工作。在触发器方面,虽然AWS Lambda的产品列表最长,但是其中的许多产品都是特定于AWS平台的,如Amazon Simple Email Service和AWS CodeCommit。谷歌云函数则可以由通用HTTP请求触发。
无服务器框架
框架部分值得我们多说两句,因为它们很好地定义了如何最终构建应用程序。除了自己的原生产品,即开源的无服务器应用程序模型(SAM)外,亚马逊还有一些其他产品,这些产品大多数都是跨平台的,也是开源的。其中最为流行的是Serverless,它强调为AWS Lambda、Azure 函数、谷歌云函数和IBM OpenWhisk等每个支持的平台提供相同的体验。另一个深受欢迎的产品是Apex,可帮助提供一些服务提供商无法提供的语言。
无服务器数据库
正如我们上面提到的,使用无服务器代码工作的一个弊端是没有“持久状态”,这意味着局部变量的值不会在实例化中持续存在。代码需要访问的所有持久性数据都必须存储在其他位置,并且堆栈中的触发器要包含函数与之交互的数据库。
其中一些数据库被称为“类无服务器”。这意味着它们的行为与我们在本文中讨论的无服务器函数非常相似,不过一个明显区别是数据可以被无限期存储,但是涉及配置和维护数据库的大部分管理开销都被消除了。正如开发人员Jeremy Daly所说,“你需要做的工作就是配置一个集群,然后它们为你自动处理所有维护、修补、备份、复制和扩展。”与“函数即服务”产品一样,你只需支付實际使用的计算时间,并根据需要调高或调低资源以满足需求。
三大无服务器提供商各自拥有自己的无服务器数据库:亚马逊的为Aurora无服务器和DynamoDB,微软的是Azure Cosmos数据库,谷歌的是Cloud Firestore。
无服务器计算和Kubernetes
容器可带动无服务器技术。由于管理它们的开销由服务提供商负责,因此用户无需担心这部分开销。许多人认为通过无服务器计算享受到容器化微服务的诸多优点,同时又可免去烦琐的操作。有些人甚至已经开始谈论“后容器”时代。
实际上,容器和无服务器计算在未来许多年内几乎肯定会共存,因为无服务器函数可以与容器化微服务共同存在于同一应用程序当中。作为最受欢迎的容器编排平台,Kubernetes能够管理无服务器基础设施。通过Kubernetes,用户可以在单个集群上集成不同类型的服务。
脱机(离线)运行无服务器
在开启无服务器计算之旅前用户可能会感到有些不安,因为他们需要与服务提供商签约才能使用,并且需要了解它们是如何工作的。不过不要担心:用户可以通过一些方法在自己的本地硬件上脱机运行无服务器代码。例如,AWS SAM提供了一个本地功能,允许用户脱机测试Lambda代码。如果用户正在使用Serverless 应用程序框架,那么他们可以点击“无服务器-脱机”选项,这是一个允许用户在本地运行代码的插件。
本文作者Josh Fruhlinger为自由撰稿人兼编辑,现居美国洛杉矶。
原文网址
https://www.infoworld.com/article/3406501/how-serverless-computing-makes-development-easier-and-operations-cheaper.html