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