无服务器计算和容器是用来减少云托管应用开销的两种架构。不过它们在许多重要的方面都有所不同。容器比虚拟机“轻”,而无服务器部署比容器更“轻”,并且更容易扩展。在本文中,我们将和您讨论无服务器计算和容器之间的区别,以及该如何进行选择。
无服务器
在传统的应用开发实践中,为了将程序部署到服务器上,以供用户使用,我们往往需要经历规划容量,采购硬件,安装软件,以及准备应用等环节。这些通常需要一周到几个月的时间。再加上应用的初期运营,这可谓既耗时又费力。
随着按需使用的云服务广泛流行,我们解决问题的能力逐渐增强。虽然资本性支出(CAPEX)和运营性支持(OPEX)仍会产生成本,但是我们在容量规划、部署时间、以及硬件管理上的花销将大幅减少。其中,最典型的云计算应用便是无服务器。
无服务器可以被定义为一种方法。该方法用短暂的计算能力代替了长时间运行的计算提供机制。此类临时计算力只是按需而存在的,并且会在使用完毕后立即消失。
当然,无服务器并不意味着真的没有服务器,而是我们不需要管理服务器。也就是说,由于我们在由AWS、Google或Azure等云计算供应商,所提供的硬件上运行自己的服务,因此,我们将服务器的维护委托给了第三方(通常是云计算供应商),由它们根据需求将资源分配到服务器上,以便我们专注于开发运行所需的服务。
实际上,无服务器计算是一种执行模型。在该模型中,硬件是由云计算供应商管理的。无服务器无需预定义的硬件,只要在执行时触发和获取硬件资源,并在执行完成后停止已获取的硬件,直到触发另一个动作为止。例如,某个内容管理应用可以让用户将图像上传到自己撰写的文章中。如果我们处于使用了AWS Lambda来构建的无服务器架构中,那么图像将首先被上传到S3存储桶处,并触发一个事件。该触发器会调用一个用多种编程语言编写的AWS Lambda函数,来调整图像的大小,并对其进行压缩,以适合多种设备的显示。可见,由触发事件调用的AWS Lambda代码或功能,会在云计算提供商所提供的硬件上执行。完毕后该硬件会处于停止状态,并等待其他的触发器。
功能即服务(Faas)
为了能够动态创建和管理服务器,开发人员需要以功能函数的形式编写应用代码。也就是说,根据无服务器计算的Faas概念,软件开发人员可以无需编写基础架构的代码,而只专注于编写和部署那些单独的、能够在毫秒内处理请求的各种功能、操作、以及业务逻辑。而让云计算提供商调配与管理服务器,以及代为执行的功能代码。
值得注意的是:在部署功能时,我们需要以一种事件的形式来进行调用。该事件可以是来自API网关(HTTP请求)的任何时间、另一个无服务器功能的事件、或是S3之类另一个云计算的事件。
无服务器提供商
目前,大多数主流云计算提供商都拥有自己的无服务器产品。其中,AWS Lambda于2014年率先推出了首款成熟的无服务器框架。它不但支持诸如Node.js、Java、Python和C#等多种编程语言,而且能与许多其他AWS服务相集成。
当然,您也可以选用Google Cloud Functions、Microsoft的Azure功能、IBM的OpenWhisk(开源的无服务器平台),以及Iron.io和Webtask等。
无服务器的优缺点
我们首先来看看无服务器能够为开发人员提供的优点:
当然,无服务器计算也存在着如下缺点:
容器
容器是操作系统虚拟化的一种方法,可以让用户在资源隔离的进程中,运行某个应用程序及其依赖项。其中,容器包含了应用程序及其需要正常运行的所有依赖项,即:系统库、系统设置和其他文件。因此,无论在何处托管的应用,容器化应用都能够以相同的方式运行在容器中。
软件从一个计算环境轻松地转移和部署到另一个计算环境时,容器能够保障其可靠地运行。这种转移既可能是从开发人员的笔记本电脑到测试环境,也可能是从过渡环境到生产环境,还可能是从数据中心的物理机到私有或公共云中的虚拟机。
由于容器需要硬件才能运行,因此构建硬件并在其上部署容器便是我们的责任。具体说来,容器会通过在机器上划分出单独的用户空间,以便在每个环境中仅运行一个应用。而多个用户空间环境则可以共享主机的内核与硬件。也就是说,主机的内核将负责为容器提供必要的内存、CPU和其他硬件。
容器使您可以轻松地将应用代码、配置和依赖项,打包到那些易用的构建块中,以提高环境的一致性、运营效率、开发人员生产力、以及版本控制。容器可以对资源进行精细化的控制,从而提高整体架构的效率。
容器的优点
容器的缺点
无服务器与容器
无服务器和容器纵然有着许多共同点,下面我们来看看它们之间的主要区别:
选择哪种架构?
总的说来,无服务器和容器并不构成竞争关系,它们同属云计算动态架构,都可根据不同的需求,用于部署微服务。
何时该使用容器?
容器最适合用于运行较长的流程。在这些流程中,您需要对环境进行高度控制,并且拥有足够的资源来设置和维护应用程序。同时,云容器也是迁移单体式传统式(monolithic legacy)应用的最佳方法。我们可以将这些应用分解成为容器化的微服务,然后使用kubernetes或swarm等引擎进行编排(orchestrate)。
何时使用无服务器?
无服务器适合于那些按需执行,却无需维持任务运行的应用程序。当团队关注的是开发速度和成本最小化,而并非管理扩展性和架构问题时,无服务器是理想的选择。
简而言之,当您需要灵活性或迁移旧服务时,请选择容器和容器编排。当您注重开发速度、自动扩展、并要显着降低运行时成本时,请选择无服务器。
无服务器和容器能协同工作吗?
毫无疑问,无服务器和容器是可以协同工作的。两者互为补充。我们可以使用基于容器的微服务架构,来构建大型、复杂的应用程序,并处理诸如数据传输、文件备份、触发无服务器功能警报等后端任务。
值得一提的是,Fargate是一种适用于Amazon ECS(Elastic Container Service)和EKS(Elastic Kubernetes Service)的计算引擎,它使我们能够运行容器,而无需管理服务器。Fargate有效地将容器的便携性,以及无服务器的灵活性与易用性相结合。您可以在无需添加、配置或扩展虚拟服务器的情况下运行容器。
原标题:Serverless Computing vs Containers: How to Choose,作者:Jagadish Manchala
网页名称:该选用无服务器计算还是容器
网站网址:http://www.shufengxianlan.com/qtweb/news15/476865.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联