什么是容器和无服务器?

无服务器和容器化是近年来 DevOps 最流行的两个流行语,这是有充分理由的。在正确的用例中,两者都可以提高性能并降低成本。然而,尽管它们很受欢迎,但并不是每个人都了解无服务器计算与容器的区别。

什么是容器和无服务器?-南华中天

在这里,为了帮助您开始使用这两种技术,我们将了解每种技术的含义,比较它们,解释它们如何相互补充,并探讨无服务器与容器安全性的关键主题。

什么是容器?

容器是轻量级不可变软件单元,包括运行应用程序的所有依赖项和代码。容器运行在“容器运行时”(有时称为容器引擎)之上,可以在广泛的操作系统和平台上运行。因为容器运行时提供了容器所需的所有系统资源,所以在传统操作系统上部署应用程序的操作复杂性被最小化了。

容器还具有高度便携性。容器运行时存在的任何地方,团队都可以部署容器映像。此外,由于容器仅包含运行应用程序所需的内容,因此与虚拟机等替代方案相比,容器更轻便、速度更快。

容器平台最流行的例子是 Docker。然而,Docker 并不是唯一的容器平台。例如,Linux Container (LXC) 早于 Docker,并且今天仍在使用。此外,还有许多工具可以补充容器,例如用于大规模编排和管理容器部署的Kubernetes (K8s)。

什么是无服务器?

无服务器是一种计算模型,无需配置或管理基础设施即可按需运行代码。尽管顾名思义,无服务器计算涉及服务器。然而,企业根本不必担心服务器基础设施。相反,开发团队只需将他们的代码部署在无服务器平台上,并且仅在该代码运行并消耗服务器资源时才收费。

什么是容器和无服务器?-南华中天

由于企业只需为他们使用服务器资源(例如 CPU)的时间付费,因此无服务器可能是一种很好的方式,可以最大限度地降低部署使用量大幅上升和下降的应用程序的成本。这是运行裸机服务器、虚拟机或容器的根本转变。任何空闲时间都没有成本,只有当应用程序正在积极运行和使用资源时才会收费。

此外,操作复杂性会降低,因为所有基础设施都被无服务器平台提供商抽象化了。DevOps 团队只关注他们的代码。无服务器计算平台的热门示例包括 AWS Lambda、Azure App Service 和 Google 的 Cloud Run。

常见用例

现在我们了解了什么是无服务器计算和容器,让我们来看看它们最流行的一些用例。

流行的容器用例包括:

  • 微服务。容器是微服务架构的构建块。由于容器便携、轻便且易于部署,因此它们非常适合创建松散耦合的微服务。
  • 持续集成/持续交付。容器为 DevOps 团队提供了一种消除开发、QA、暂存和生产部署之间环境差异的方法。因此,它们在持续集成/持续部署 ( CI/CD ) 工作流中非常有用。
  • “随处部署”。大多数现代企业都在混合云和多云环境中运营。无论企业需要在本地还是跨多个云运行应用程序,容器都可以胜任。
  • 遗留应用程序迁移。在许多情况下,遗留的单一应用程序需要迁移到云端。将它们容器化使这个过程更容易。

一些最流行的无服务器用例是:

  • 应用程序接口。REST API 和 GraphQL 实现等应用程序编程接口 (API) 是一种广泛的无服务器计算用例。因为 API 事务是短暂的并且可以快速扩展和缩减,无服务器提供了一个可靠的平台来构建 API 后端。
  • 数据处理。无服务器可以使用简单的功能从多个来源进行数据处理。因此,无服务器计算非常适合需要大规模处理和分析数据但又希望避免基础设施管理的团队。
  • 物联网。无服务器计算为物联网设备和外部系统异步通信提供了一种事件驱动和直接的方式。
  • 动态网站内容。Serverless 的教科书式功能之一就是为静态网站添加动态内容和逻辑。例如,AWS Lambda 通常用于向托管在 S3 上的静态站点添加动态功能。

当然,这些只是容器和无服务器计算可能实现的示例。一般来说,容器在任何需要可靠部署可移植、轻量级和不可变图像的地方都很有用。无服务器计算在各种应用程序中很有用,在这些应用程序中,工作负载变化很大,并且优先考虑最小化基础设施管理工作。

什么是容器和无服务器?-南华中天

无服务器计算与容器:差异以及它们如何相互补充

正如我们所见,无服务器计算和容器有一些高级相似之处。它们消除了复杂性,使团队更容易部署和扩展应用程序。但是,有几个重要的区别需要考虑,包括:

  • 成本结构。有了容器——无论是在企业上还是在云中运行——只要它们在运行,企业就会为它们付费。通过无服务器计算,企业只需为他们使用的东西付费。对于具有一致需求的工作负载,这可能没有太大区别。对于高度可突发的工作负载,这可以通过无服务器显着节省成本。
  • 可测试性。借助容器,团队可以在任何地方轻松测试您的应用程序。对于无服务器,团队仅限于运行功能的云平台,无法针对无服务器功能执行相同级别的测试。
  • 部署。要向上或向下扩展基于容器的应用程序,必须以某种方式部署或缩减容器(例如使用 Kubernetes)。借助无服务器,ylcode 仅在供应商提供的“黑盒”平台上执行。
  • 操作复杂性。无服务器的“黑匣子”范式对于希望最小化操作复杂性的团队来说是一个很大的好处。实际上没有可使用无服务器管理的基础设施。使用容器,可以将基础架构管理卸载给提供商,但情况并非总是如此。
  • 供应商锁定。容器可以“随处运行”,但对于无服务器,企业高度依赖于运行代码的平台。例如,使用 AWS Lambda 函数会使应用程序更加依赖 AWS 平台,而使用 Docker 容器可以部署在任何可以运行 Docker 的平台上。

尽管存在差异,但容器和无服务器计算并不一定相互排斥。例如,可以使用Docker 来容器化无服务器函数。此外,像谷歌的 Cloud Run 这样的平台旨在使用按使用付费的无服务器模型来部署容器。

了解无服务器与容器安全

与技术本身一样,无服务器与容器安全性是一个微妙的DevSecOps主题。无服务器确实消除了许多与基础设施管理相关的安全问题,但仍然涉及许多重要的无服务器安全考虑因素。例如,不安全的无服务器权限配置可能会在应用程序中造成漏洞。此外,支持无服务器工作流的更多功能和协议意味着需要保护更多潜在的攻击媒介。复杂性的卸载也伴随着安全权衡:因为服务提供商处理如此多的基础设施,所以对无服务器部署的可见性是有限的。

什么是容器和无服务器?-南华中天

另一方面,容器安全性也有其独特的挑战。例如,仅安全地采购和部署受信任的容器——并为它们打补丁——可能是一项运营挑战。此外,身份和访问管理 (IAM) 和容器配置管理是强大安全态势的重要方面。