独立简单的功能使开发更容易,事件驱动的执行使操作性价比更高!
开发人员花费无数个小时用代码解决业务问题。 然后轮到ops团队花费无数个小时,首先弄清楚如何获得开发人员在任何可用计算机上编写和运行的代码,然后确保这些计算机顺利运行。第二部分真的是一项永无止境的任务。 为什么不将这部分留给别人呢?
在过去二十年中,IT的许多创新:虚拟化,云计算,容器 ,一直专注于确保不必过多考虑代码运行的底层物理机器。无服务器计算是一种越来越流行的范式,它将这种愿望用于其逻辑结论:使用无服务器计算,你无需了解代码运行的硬件或操作系统,因为服务提供商都会为你提供服务。
什么是无服务器计算?
无服务器计算是云的执行模型,云提供商在其中动态分配,然后仅为执行特定代码片段所需的计算资源和存储向用户收费。当然,仍然涉及服务器,但它们的供应和维护完全由提供商负责。亚马逊无服务器的倡导者Chris Munns在2017年的会议上表示,从团队编写和部署代码的角度来看,“根本没有服务器可以管理或配置。这包括没有裸机,没有虚拟,没有容器,任何涉及你管理主机,修补主机或在操作系统级别处理任何东西的东西,都不是你应该做的事情。这就是无服务器的世界。”
正如开发人员Mike Roberts所解释的那样,该术语曾被用于所谓的后端即服务场景,其中移动应用程序将连接到完全托管在云中的后端服务器。但是今天,当人们谈论无服务器计算或无服务器架构时,它们意味着功能即服务产品,其中客户编写的代码只解决业务逻辑并将其上传到提供商。该提供程序负责所有硬件配置,虚拟机和容器管理,甚至是多线程等通常内置于应用程序代码中的任务。
无服务器函数是事件驱动的,这意味着只有在请求触发时才会调用代码。提供商仅对该执行所使用的计算时间收费,而不是维护物理或虚拟服务器的固定月费。这些功能可以连接在一起以创建处理管道,或者它们可以作为更大应用程序的组件,与在容器中或在传统服务器上运行的其他代码交互。
无服务器计算的优点和缺点
从该描述中,无服务器计算的两个最大好处应该是明确的:开发人员可以专注于他们编写的代码的业务目标,而不是基础设施问题;组织只需要以非常精细的方式支付他们实际使用的计算资源,而不是购买物理硬件或租用大多数闲置的云实例。
正如Bernard Golden指出的那样,后一点对事件驱动的应用程序特别有益。例如,你可能有一个大部分时间处于空闲状态的应用程序,但在某些条件下必须同时处理许多事件请求。或者,你可能拥有一个应用程序来处理从具有有限或间歇性Internet连接的IoT设备发送的数据。在这两种情况下,传统方法都需要配置一个能够处理峰值工作能力的强大服务器,但是大多数时候服务器都未得到充分利用。使用无服务器架构,你只需为实际使用的服务器资源付费。无服务器计算也适用于特定类型的批处理。无服务器架构用例的规范示例之一是上载和处理一系列单个图像文件并将它们发送到应用程序的另一部分的服务。
也许无服务器功能最明显的缺点是,它们是故意短暂的,正如AlexSoft所说,“不适合长期任务。”大多数无服务器提供商不会让你的代码执行超过几分钟,当你启动一个函数,它不会保留以前运行的实例中的任何有状态数据。一个相关的问题是,无服务器代码可能需要几秒钟才能启动,对于许多用例而言不是问题,但是如果你的应用程序需要低延迟,则需要发出警告。
正如Rohit Akiwatkar和Gary Arora所指出的,许多其他缺点都与供应商锁定有关。尽管有可用的开源选项,但无服务器市场由大型商业云提供商主导,我们将在稍后讨论。这意味着开发人员通常最终会使用其供应商提供的工具,这使得如果他们变得不满意就很难切换。而且,根据定义,在供应商的基础架构上进行了大量无服务器计算,将无服务器代码集成到内部开发和测试管道中可能很困难。
无服务器供应商:AWS Lambda,Azure Functions和Google Cloud Functions
无服务器计算的现代时代始于2014年基于亚马逊云服务的AWS Lambda的推出。微软于2016年推出了Azure Functions。自2017年以来一直处于测试阶段的Google Cloud Functions终于达到了生产状态,这三种服务的局限性,优势,支持的语言和做事方式略有不同。 Rohit Akiwatkar对这三者之间的区别进行了详细而详细的描述。运行中还有IBM Cloud Functions,它基于开源的Apache OpenWhisk平台。
在所有无服务器计算平台中,AWS Lambda是最突出的,显然已经有最多的时间来发展和成熟。
无服务器堆栈
与许多软件领域的情况一样,无服务器世界已经看到了软件堆栈的发展,这些软件堆叠了构建无服务器应用程序所需的不同组件。每个堆栈都包含一个你要编写代码的编程语言,一个为你的代码提供结构的应用程序框架,以及一组平台将理解并用于启动代码执行的触发器。
虽然你可以混合使用这些类别中的不同特定产品,但根据你使用的供应商存在一些限制,但存在一些重叠。例如,对于语言,你可以在AWS Lambda上使用Node.js,Java,Go,C#和Python,但只有JavaScript,C#和F#在Azure Functions上工作。在涉及触发器时,AWS Lambda拥有最长的列表,但其中许多都是特定于AWS平台的,如Amazon Simple Email Service和AWS CodeCommit;同时,Google Cloud Functions可以由通用HTTP请求触发。保罗·贾沃斯基(Paul Jaworski)深入研究了三大产品中的每一个产品的堆栈。
无服务器框架
这个方程式的框架部分有点遗憾,因为这将很好地定义了如何最终构建应用程序。亚马逊有自己的原生产品,即开源的无服务器应用程序模型(SAM),但也有其他产品,其中大多数是跨平台的,也是开源的。其中最流行的是无服务器,并且强调它为每个支持的平台提供相同的体验,即AWS Lambda,Azure Functions,Google Cloud Functions和IBM OpenWhisk。另一个受欢迎的产品是Apex,它可以帮助某些提供商无法使用某些语言。
无服务器数据库
正如我们上面提到的,使用无服务器代码的一个怪癖是没有持久状态,这意味着局部变量的值不会在实例化中持续存在。你的代码需要访问的任何持久性数据必须存储在其他位置,并且主要供应商的堆栈中可用的触发器都包含你的函数可以与之交互的数据库。
其中一些数据库本身是无服务器。这意味着它们的行为与我们在本文中讨论的其他无服务器函数非常相似,但显而易见的例外是数据无限期存储。但是,配置和维护数据库所涉及的大部分管理开销都被抛弃了。正如开发人员Jeremy Daly所说,“你需要做的就是配置一个集群,然后为你自动处理所有维护,修补,备份,复制和扩展。”与功能即服务产品一样,你只需支付实际使用的计算时间,并根据需要调高和调低资源以满足需求。
三大无服务器提供商各自提供自己的无服务器数据库:亚马逊拥有Aurora无服务器和DynamoDB,微软拥有Azure Cosmos数据库,Google拥有Cloud Firestore。
无服务器计算和Kubernetes
容器有助于为无服务器技术提供动力,管理它们的开销由供应商负责,因此对用户不可见。许多人认为无服务器计算是一种在不必处理其复杂性的情况下,获得容器化微服务的许多优点的方法,甚至开始谈论后容器世界。
实际上,容器和无服务器计算几乎肯定会在未来许多年内共存,无服务器功能可以与容器化微服务存在于同一应用程序中。Kubernetes是最受欢迎的容器编排平台,也可以管理无服务器基础架构。使用Kubernetes,可以在单个集群上集成不同类型的服务。
无服务器的离线
你可能会发现无服务器计算开始的前景有点令人生畏,因为你似乎需要与供应商签约才能玩,并了解它是如何工作的。但不要担心:有些方法可以在你自己的本地硬件上脱机运行无服务器代码。例如,AWS SAM提供了一个本地功能,允许你脱机测试Lambda代码。
原文链接:
https://www.infoworld.com/article/3406501/how-serverless-computing-makes-development-easier-and-operations-cheaper.html