关键要点
当运行一小段业务逻辑时,无服务器是可取的,该逻辑可以在几毫秒内启动并完成其工作
当运行数据摄取等长期进程或需要等待响应的交互时,容器是必经之路
无服务器函数具有可以并行运行的软容量,以及预留/预置容量,在规模方面控制起来有点棘手
不同的云提供商以不同的方式实例化功能,但通常这些是生存期较短的操作系统容器,或 AWS 情况下的微型虚拟机。
由于功能本质上是极其短暂的,因此存储也应该通过直接方法处理,像 EFS 这样的多连接设备可能是有益的,但是当涉及到数据库时,应该小心处理连接池,最好考虑到代理
在科技行业,遇到云计算、容器、无服务器框架等行话是很常见的。
但什么是云计算?容器如何工作?函数如何成为无服务器函数?
这篇文章将尝试解码这些技术,并探讨开发人员应该如何考虑其技术堆栈中的容器或无服务器功能。
例如,如果您的应用程序具有较长的启动时间,则容器将更适合需求。
需要大规模扩展和缩减的高效无状态函数将从运行无服务器函数中受益。
容器如何工作?
容器是一个打包的应用程序,其中包含代码以及必要的库和依赖项,可以在任何环境中执行,而不考虑操作系统。它可以帮助开发人员轻松构建、交付、部署和扩展应用程序。
以前,当容器不太流行时,开发人员习惯于在单独的虚拟机中部署应用程序以实现隔离。每个虚拟机都有一个来宾操作系统,需要物理硬件中的一些确定的 CPU 和内存。这会导致虚拟机耗尽应用程序所需的资源。
随着容器的采用,不再需要来宾操作系统,因为容器引擎可以与一个或多个容器共享物理操作系统。与虚拟机相比,这是一个巨大的优势,因为现在可以将更多资源专用于应用程序。
在基本级别,容器映像由开发人员创建,其中包含有关容器应如何运行的说明。然后,可以使用此容器映像来启动运行实际应用程序的容器。它包含可以在完全隔离的环境中运行的可执行代码。应用的库和依赖项也打包在映像定义中。Docker、Amazon ECS、Kubernetes 和 GCP Autopilot 是主要的容器化平台。
什么是无服务器函数?
顾名思义,无服务器计算是计算机科学中的一种范式,开发人员不自己管理服务器。相反,第三方提供服务来管理服务器,以便开发人员可以更多地关注应用程序逻辑,而不是运行应用程序的服务器的维护。 一般来说,无服务器函数是从容器和引擎盖下的进一步抽象;两者都使用相同的底层技术。
无服务器计算如何工作?
如果不使用实际的服务器,就不可能进行无服务器计算 - 只是开发人员不需要与它们进行交互,因为供应商(通常是AWS,Azure或GCP等云提供商)承担服务器管理。通常,无服务器基础结构下有容器。在AWS的案例中,他们开源了他们的Rust项目,该项目处理函数的实例化(Firecracker)和他们用于托管容器的节点(bottlerocket)的轻量级操作系统。在此范例中,为开发人员提供了一个可以编写和提交代码的环境。该平台负责执行,分配物理内存、CPU 和输出。然后,向用户支付应用程序运行的持续时间以及内存和 CPU 消耗的费用。这是一个巨大的好处,因为与运行或管理自己的基础设施相比,它大大降低了成本。需要注意的重要一点是,无服务器函数还利用了底层容器,这对于开发人员来说是抽象的。启动无服务器函数时,云提供商会启动一个在其中执行应用程序的容器。因此,底层技术是相似的。但是,环境的部署、扩展和使用方式是不同的。
容器和无服务器之间的根本区别
下面,您可以看到容器和无服务器函数之间的一些主要区别。
使用案例
容器和无服务器计算有几个日常用例。某些解决方案可以通过使用容器或无服务器函数来实现。尽管如此,主要区别在于容器和无服务器功能的定价方式,与云中其他应用程序和服务的集成,以及它们根据负载进行扩展的能力。
例如,如果应用程序是基于 IP 地址查找地理位置的短期进程,则它可以是无服务器的。随着请求数量的增加,无服务器函数将自动纵向扩展,无需任何手动干预。如果应用程序是需要长时间保持正常运行的 Web 应用程序,则容器可能最适合。
此外,需要更快访问存储的进程可以使用容器来容纳,因为它们可以与文件系统集成。例如,集成在 Amazon ECS 上运行的容器,这些容器可以使用高度可扩展的 EFS 或 Azure 文件存储进行存储。
以下决策树可能有助于您决定是选择容器还是无服务器函数。
尽管两者之间可能存在重叠,但下面将讨论容器和无服务器函数的一些常见用例。
器皿
编程语言支持
将应用程序打包到容器中时,它将独立于平台。无服务器函数支持一些最常见的运行时环境,如Java,Python,Go等。但是,如果无服务器函数的运行时不支持应用程序编程语言,则容器将是理想的解决方案。容器可以使用任何容器编排平台(例如 Kubernetes)进行部署。
托管长期应用程序
容器使设置需要始终作为服务运行的长期 Web 应用程序变得更加容易。例如,可以通过容器部署跟踪网站上用户行为的跟踪应用程序。根据生成的事件,可以纵向扩展或缩减容器。容器也可以通过利用流行的技术(如Kubernetes,AWS Fargate等)进行编排。
无服务器
接口端点
组织可以使用无服务器应用程序为 Web 或移动服务器部署 API 终结点。这些 API 可以是无状态的,也可以是短期的,可以根据事件触发。
物联网处理
随着家庭和工业自动化的增加,物联网设备的使用显着增加。这些 IoT 设备可以通过在触发时运行函数来利用无服务器计算的强大功能。
事件流
在需要根据特定条件丰富或筛选事件的实时事件流式处理方案中,开发人员可以使用短期无服务器函数。然后,您可以使用这些功能检查事件是否有效,通过查找人口统计信息来丰富事件等。
终审判决
容器和无服务器应用程序都是与云无关的工具,使开发人员受益。根据经验,容器提供隔离和灵活性,而无服务器有助于开发,并帮助你以最低的运行时成本自动缩放。
选择使用容器还是无服务器应用程序取决于用例。例如,如果需要构建一个提供快速、短期响应的 API 服务器,则无服务器框架会更好。另一方面,如果应用程序需要始终可用并启动并运行,则容器化应用程序是要走的路。
作者简介: 奥马尔·哈默曼
Omer Hamerman是 Zesty.co 的首席DevOps工程师。在本古里安大学获得计算机科学学士学位和申卡尔学院工业工程与管理学士学位后,Omer 开始了他的 DevOps 职业生涯,并且从未回头。Omer喜欢学习新技术和更好的方法来合并Dev和Ops。他目前与妻子和女儿住在伦敦,喜欢登山、远足和其他户外活动。在业余时间,他在Medium和博客上写下他在各种技术方面的经验。