孤立的简单功能使开发更容易,而事件驱动的执行使操作更便宜

开发人员花费无数小时来解决代码的业务问题。然后轮到操作团队花大量时间,首先弄清楚如何获取开发人员编写的代码并在可用的任何计算机上运行,然后确保这些计算机运行顺畅。第二部分确实是一项永无止境的任务。为什么不把那部分留给别人呢?

在过去的二十年中,虚拟机,云计算,容器等IT领域的许多创新都集中在确保您不必对代码所基于的底层物理机进行过多考虑。无服务器计算是一种越来越流行的范例,它可以将这种愿望变成逻辑上的结论:有了无服务器计算,您无需了解代码运行的硬件或操作系统,因为服务提供商会为您全力以赴。

 

1.1 什么是无服务器计算?

无服务器计算是云的执行模型,其中云提供商动态分配(然后向用户收费)仅执行特定代码所需的计算资源和存储。自然地,仍然涉及服务器,但是提供商的服务完全由服务器负责。亚马逊倡导无服务器技术的克里斯·芒恩斯(Chris Munns)在2017年的一次会议上表示,从团队编写和部署代码的角度来看,“根本没有服务器可以管理或配置。这其中不包含任何可能成为裸机的内容,不包含虚拟的内容,也不包含作为容器的内容,而涉及您管理主机,修补主机或在操作系统级别上进行任何处理的任何事情,都不是您必须要做的事情。无服务器的世界。”

 

正如开发人员Mike Roberts解释的那样,该术语曾经用于所谓的“后端即服务”方案,在该方案中,移动应用程序将连接到完全托管在云中的后端服务器。但是今天,当人们谈论无服务器计算或无服务器体系结构时,它们的意思是功能即服务产品,其中客户编写仅处理业务逻辑并将其上载到提供商的代码。该提供程序负责所有硬件供应,虚拟机和容器管理,甚至是通常内置于应用程序代码中的多线程之类的任务。

 

无服务器功能是事件驱动的,这意味着仅在请求触发时才调用代码。提供程序仅按执行所用的计算时间收费,而无需为维护物理服务器或虚拟服务器支付固定的月费。这些功能可以连接在一起以创建处理管道,也可以用作较大应用程序的组件,并与在容器中或常规服务器上运行的其他代码进行交互。

1.2 无服务器计算的优缺点

从该描述中,应该清楚无服务器计算的两个最大好处:开发人员可以专注于他们编写的代码的业务目标,而不是基础架构的问题;组织仅以非常精细的方式支付实际使用的计算资源,而不是购买物理硬件或租用大部分闲置的云实例。

 

正如Bernard Golden指出的那样,后一点对于事件驱动的应用程序特别有用。例如,您可能有一个长时间处于空闲状态的应用程序,但在某些情况下必须同时处理许多事件请求。或者,您可能拥有一个应用程序,该应用程序通过有限或间歇性的Internet连接处理从IoT设备发送的数据。在这两种情况下,传统方法都需要配置强大的服务器来处理高峰工作容量,但是大多数时间该服务器的使用率均未得到充分利用。采用无服务器架构,您只需支付实际使用的服务器资源。无服务器计算也将适合特定种类的批处理。无服务器体系结构用例的一个典型示例是一项服务,该服务上载和处理一系列单独的图像文件,并将它们发送到应用程序的另一部分。

无服务器功能最明显的缺点可能是它们是短暂的,并且正如AlexSoft所说,“不适合长期任务”大多数无服务器提供程序都不会让您的代码执行超过几分钟,并且当您启动一个函数时,它不会保留以前运行的实例中的任何有状态数据。一个相关的问题是,无服务器代码的启动可能需要长达几秒钟的时间,这在许多情况下都不是问题,但是如果您的应用程序要求低延迟,则应警告。

 

正如Rohit Akiwatkar和Gary Arora所指出的那样,许多其他缺点与供应商锁定有关。尽管有可用的开源选项,但无服务器市场仍由大型商业云提供商主导,我们将在稍后讨论。这意味着开发人员通常最终会使用其供应商提供的工具,这使得如果他们不满意就很难进行切换。而且,按照定义,由于大量无服务器计算是在供应商的基础架构上进行的,因此很难将无服务器代码集成到内部开发和测试管道中。

1.3 无服务器供应商:AWSLambda,Azure Functions和GoogleCloud Functions

无服务器计算的现代时代始于2014年基于亚马逊云服务的平台AWS Lambda的发布。微软于2016年推出了AzureFunctions。自2017年以来一直处于测试阶段的GoogleCloud Functions终于进入生产状态于2018年7月推出。这三种服务的局限性,优势,支持的语言和处理方式略有不同。 RohitAkiwatkar对这三者之间的区别有详尽而详尽的描述。还在运行中的是基于开放源代码ApacheOpenWhisk平台的IBM Cloud Functions。

 

在所有无服务器计算平台中,AWSLambda是最杰出的,并且显然拥有最多的时间来发展和成熟。 InfoWorld涵盖了过去一年中向AWS Lambda添加的更新和新功能。

1.4 无服务器堆栈

与许多软件领域一样,无服务器世界见证了软件堆栈的发展,这些软件将构建无服务器应用程序所需的不同组件整合在一起。每个堆栈都包含您将要用来编写代码的编程语言,为代码提供结构的应用程序框架,以及平台将理解并用于启动代码执行的一组触发器。

 

虽然您可以在每个类别中混合使用不同的特定产品,但是有一些限制,具体取决于您使用的供应商。例如,对于语言,您可以在AWS Lambda上使用Node.js,Java,Go,C#和Python,但是只有JavaScript,C#和F#才能在Azure函数上本地运行。关于触发器,AWS Lambda拥有最长的列表,但其中许多是特定于AWS平台的,例如Amazon Simple Email Service和AWS CodeCommit。同时,Google Cloud Functions可以由通用HTTP请求触发。 Paul Jaworski深入研究了三大产品中的每一个。

 

1.5 无服务器框架

值得在等式的框架部分稍作停留,因为这将在很大程度上定义您最终如何构建应用程序。亚马逊拥有自己的本地产品,即开源的无服务器应用程序模型(SAM),但也有其他产品,其中大多数是跨平台的,也是开源的。最受欢迎的一种被称为(通常称为Serverless),并且强调它为每个受支持的平台(AWS Lambda,Azure Functions,Google Cloud Functions和IBM OpenWhisk)提供相同的体验。另一个受欢迎的产品是Apex,它可以帮助使某些提供商无法使用的某些语言陷入困境。

1.6 无服务器数据库

如上所述,使用无服务器代码的一个怪癖是没有持久性状态,这意味着局部变量的值不会在实例化过程中持久化。您的代码需要访问的任何持久数据都必须存储在其他位置,并且主要供应商在堆栈中可用的触发器都包括您的函数可以与之交互的数据库。

 

其中一些数据库本身称为无服务器。这意味着它们的行为与我们在本文中讨论的其他无服务器功能非常相似,但明显的例外是数据是无限期存储的。但是,调配和维护数据库所涉及的许多管理开销却被搁置了。正如开发人员杰里米·戴利(Jeremy Daly)所说,“您所需要做的就是配置集群,然后为您自动处理所有维护,修补,备份,复制和扩展。”与“功能即服务”产品一样,您只需要为实际使用的计算时间付费,并且资源可以根据需要上下旋转。

 

三大无服务器提供商均各自提供自己的无服务器数据库:亚马逊拥有Aurora Serverless和DynamoDB,微软拥有Azure CosmosDB,谷歌拥有Cloud Firestore。但是,这些并不是唯一可用的数据库。 Nemanja Novkovic拥有有关更多产品的信息。

 

1.7 无服务器计算和Kubernetes

容器可以帮助无服务器技术在后台运行,但是管理它们的开销由供应商负责,因此对于用户而言是不可见的。许多人将无服务器计算视为在无需处理其复杂性的情况下获得容器化微服务的许多优势的方法,甚至开始谈论后容器世界。

 

实际上,容器和无服务器计算几乎肯定会在未来许多年中共存,并且实际上,无服务器功能可以与容器化微服务存在于同一应用程序中。 Kubernetes是最流行的容器编排平台,也可以管理无服务器基础架构。实际上,借助Kubernetes,您可以在一个集群上集成不同类型的服务。

1.8 无服务器离线

您可能会发现无服务器计算入门的前景有些令人生畏,因为您似乎需要与供应商签约才能体验它的工作原理。但不要担心:有多种方法可以在自己的本地硬件上脱机运行无服务器代码。例如,AWS SAM提供了本地功能,可让您离线测试Lambda代码。而且,如果您使用的是无服务器应用程序框架,请查看无服务器离线版,该插件可让您在本地运行代码。实验愉快!

 

 

扩展阅读:https://developer.aliyun.com/article/771264

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐