对于网站代码托管,目前有两种方式,一种是 docker 容器部署,一种是无服务器计算部署。
那么对于一个企业应该选择哪种方案呢?无服务器计算和容器之间有哪些重要的区别呢?接下来我们简单谈论一下。
什么是无服务器?
使用无服务器计算,工作负载实际上运行在承载幕后功能的服务器上。但是,服务器不由开发人员管理。更准确地说,是开发人员考虑的事情里面是没有考虑到关于服务器的相关概念。
无服务器函数通常是具有单一目的的小型、轻量级的编程函数。这个单一的目的可以是任何东西,比如从数据库中获取客户的详细信息,发送邮件,上传图片,裁剪图片等。
大多数云提供商都提供无服务器计算功能,他们将其称为功能即服务 (FaaS)。领先的产品是 AWS Lambda、Azure Functions 和 Google Cloud Functions,Aliyun Function Compute,每一个产品都在相关的生态系统中进行了许多功能集成。它们非常适合提供 API 接口或微服务。
什么是容器?
容器可以简单地比喻成在海上运输货物的集装箱,它们彼此是独立的。
容器是一种独立的、轻量级的虚拟化技术。它们与虚拟机 (VM) 类似,不同之处在于它们仅虚拟化来宾操作系统 (OS) 和应用程序,而不是整个计算机。容器比虚拟机设置起来更快、更容易。
一旦有人构建了一个容器,他们就可以使用 Docker 等服务来部署和运行它。大多数情况下 DevOps 团队最常将容器部署到 Kubernetes 集群。
容器是将现有的单体应用程序转换为云原生应用程序的最佳方法之一。为了尽可能高效,容器还应该将应用程序分成更小的部分。
无服务器 vs 容器
在大多数情况下,无服务器功能和容器都不需要开发人员担心服务器或托管其应用程序的基础设施。主机硬件和操作系统与来宾应用程序和操作系统分开。DevOps 团队不需要考虑无服务器功能或容器使用什么硬件。
通过简单地配置更好的硬件(例如更强大的 CPU、更多内存或更快的网络能力),这两种托管选项都是可扩展的。
将容器与本地基础设施一起使用时例外。在这种情况下,硬件配置是一个手动过程,通常由专门的基础架构团队处理。
还可以根据流量等需求进行扩展。Kubernetes 是一个开源编排系统,可以在几秒钟内水平扩展容器。同样,许多 FaaS 产品可以根据路由到应用程序的请求数量等重要指标进行自动扩展。
无服务器和容器都是弹性的,因此它们可以在需要时进行伸缩。然而,使用容器的 DevOps 团队需要像 Kubernetes 这样的容器编排软件来根据给定的标准自动扩展。
无服务器计算通常是具有单一职责的小型、独立的功能块。它们通常是短暂的,只运行几分钟,如果它们是面向客户的,则运行几秒钟。同时,容器最适合更广泛、长时间运行的应用程序或具有多种职责的应用程序。
当需要摆脱传统的本地基础架构,使现有的单体应用程序部署到云上,并且希望容器实例可以全天候运行的时候,这个时候选择容器会更好。
而对于一些不需要始终运行,只需要请求的时候进行运行计算的服务则更推荐使用无服务计算。
容器让您保持供应商中立。这种中立性的副作用是容器支持任何语言,而无服务器应用程序仅限于少数语言选择。此支持的语言列表因每个提供商而异。
当您决定无服务器还是容器最适合您的应用程序时,最好将上面列出的所有因素都考虑在内。但是,您的应用程序架构的大小和结构应该是影响您决策的主要因素。并确保在您的决定中包括其他因素,例如定价。
您可以部署一个小型应用程序,或者我们可以轻松地将其拆分为多个较小的微服务作为无服务器应用程序。另一方面,更大、更复杂的应用程序可能更适合作为容器化应用程序。紧密耦合、不易分解为小型微服务的服务集是容器的有力候选者。
由于无服务器产品的限制,容器部署可能是某些应用程序的更好选择。
但您也不一定非要选择其中一个。无服务器和容器不是相互排斥的。您可以在需要的地方使用容器,在有意义的地方结合无服务器,并享受两全其美的体验。正如我们之前提到的,甚至还有用于托管容器的无服务器产品,旨在弥合这两种选择之间的差距。
结论
无服务器和容器都是创建可扩展云原生应用程序的不错选择,可让您更快地进行创新。
几乎所有无服务器解决方案都支持事件触发器,这意味着它们非常适合管道和顺序工作流。
无服务器总是依赖于第三方供应商,因此更换云提供商可能会让人头疼。
其实本质上也可以通过 docker 容器来构建一个无服务器 serverless 平台,这两种服务都用于开发微服务,但适用于不同的需求。如果你想减少应用程序管理并且不关心架构,那么 Serverless 是最好的选择。如果您想在特定系统架构上部署应用程序并对其进行控制,那么 Docker 容器是最佳选择。