Containers vs Serverless:本质区别是什么?

Containers vs Serverless:本质区别是什么?

在云核算领域,容器和无服务器核算现已占有了展开前列。

作者 | Emra Samdan

翻译 | bocloudresearch

一点前史

在不久从前,应用程序的开发、安置和维护要比现在凌乱得多,耗时也多。在开端,维护不只需求批改应用程序的代码,还需求批改对物理机器的支撑。坚持服务器、硬件和软件的更新也是非常要害的任务。

在本世纪初,一种名为“基础设施即服务(IaaS)”的新模式灵敏盛行起来。IaaS供应了从第三方供应商租赁远程服务器和虚拟机的或许性,这些供应商可以完全担任处理硬件、网络和预订。

IaaS出现之后,消除开发人员的全部非编码责任来简化开发人员作业,这一主见推动了新方法、模型和服务的立异。

容器是什么?

Docker的官方网站供应了以下简略而典雅的定义:“容器是一个标准的软件单元,它将代码及其全部依托项打包,从而使应用程序在不同的核算环境之间快速、可靠地工作。换句话说,通过运用容器,开发人员能确保他们的应用程序可以在任何云途径或本地服务器上工作。在某些方面,容器类似于虚拟机,比方两者都是隔绝资源。但是,虚拟机仿照物理设备,而容器创建应用程序层的抽象。

无服务器核算是什么?

在无服务器核算中,整个应用程序或应用程序的一部分被解耦为多个函数,每个函数都照应比方HTTP央求、新消息抵达消息队伍、或在存储中保存或批改新方针等时间触发的。途径可以在特定的时间或周期工作这些函数,这对cron jobs(守时任务)很有帮忙。

要使此系统作业,开发人员只需编写功用代码,并将其及其依托项打包到zip文件中,然后将该zip文件发送到无服务器端点,由供应商担任供应和扩展。

无服务器的要害特性之一是“按需付费”模型,在这种模型中,公司仅按函数的实践履行时间付费。现在,AWS Lambda应该是最受欢迎的无服务器供应商。

容器和无服务器有什么共同之处吗?

是的。现在,无服务器和容器都很盛行,它们容许开发人员专注于自己的代码而不是基础设施,这极大地提高了开发速度。容器和 serverless 都很适合于微服务和依据组件的系统结构。在运用它们时,安置和扩展一般比运用传统的单体架构更快、更具本钱效益,由于你操作的是应用程序的一小部分,而不是整个应用程序。虽然容器和serverless 有这些共性,但是每种技术都有自己的优势、害处和用例。

容器化的优势

容器的第一个优势是可移植性。由于容器现已包括了它需求工作的全部内容,因此只需放置一台安装了容器引擎的机器即可工作。容器与途径无关,因此它们可以工作在Linux、Windows、macOS、Mesos、Docker、Swarm或Kubernetes上。它们还可以在另一个容器中工作。

在核算资源运用方面,容器也比虚拟机更高效。虽然容器和虚拟机都是虚拟化的,但是虚拟机遇运用自己的操作系统来仿照整个核算机,因此会消耗更多的资源。另一方面,容器可以同享同一操作系统,从而使操作系统更小,更快地发起和关闭。

容器的另一个利益是容许开发人员完全控制应用程序。虽然这在某种程度上预示着有必要手动配备系统设置,但这也代表着具有实在的灵活性。这在serverless上是无法结束的,由于无服务器的全部内容都是由云供应商处理的。

容器的用例

当我们想要将一些大型的单体应用程序重构为更小的独立部分, 以便迁移到微服务系统结构并获得更好的功用、可检验性和扩展速度时,容器确实是很有帮忙的。例如,将从前的大型应用程序拆分为几个独立的服务:其间一个担任用户处理,另一个担任转化媒体文件等。每个服务都可以轻松扩展,以便在其责任规划的负载添加时供应更好的功用。但这关于单体应用程序来说是不或许结束的,在单体应用程序中,需求向整个系统添加新实例,这既宝贵又耗时。

因此,容器适合于长时间工作的应用程序,以及具有特定系统需求的应用程序,假定没有对系统的完全控制,这些应用程序很难设置。

Serverless的优势

由于上面提到的“按需付费”模型,保管无服务器应用程序的本钱或许比运用任何其他方法都要低得多。无需为功用的空闲时间付费,假定没有流量,那么每月的账单上就不会有费用。几乎全部无服务器的供应商都有免费层,这中心还包括每月固定数量的央求和履行时间。正常的情况下,所供应的数量足以使小网站或草创公司免费工作。

关于容器,将应用程序分发到部件或微服务是要害过程。在serverless中,它是将应用程序或其各个部分分发到单个函数中,每个函数担任特定的逻辑段。工程师更简略了解和开发单个功用的逻辑,这极大地提高了开发和安置速度。与安置整个应用程序比较,安置一小部分功用的风险更小。

无服务器的另一个巨大优势是自动弹性。无服务器的函数在供应者控制下的小型、无情况的暂时容器中工作。供应者对照应负载峰值的扩展承担全部责任,并且可以在几秒钟内发起数百个实例。并且,仍然只需求为全部函数的总履行时间付费。

何时运用无服务器比较好?

Serverless的工作驱动特性使得它关于不总是需求工作的应用程序(或其部分)非常有用。

假定你正在为一个现有的应用程序开发媒体处理功用。新模块虽然不会常常运用,但是仍然需求满意的核算才能来结束它的任务。将其放如应用程序中或许需求切换到更健壮的实例——这是一个冒险的行为,由于假设一起工作一些深重的任务,或许会导致其他全部用户的推延。在这种情况下,还需求支付更多的费用,并且仍然面临由上述瓶颈所导致的一些问题。

相反,假设选择了serverless,那么媒体处理功用将与应用程序的其余部分隔绝。当它不被运用时,就不需求为此付费,并且可以一向确保它不或许影响到应用程序的其他部分。

容器的害处

即使没有人运用应用程序,也至少有一个承载容器的虚拟机实例一向在工作。由此导致容器比无服务器更宝贵。

即使容器可以在同享核算机中快速扩展,但由于需求对核算机本身进行扩展,因此其他扩展也不很快。 但是,将容器与业务流程系统(如Kubernetes或AWS ECS)一起运用可以使扩展更智能。

无服务器的害处

关于大多数开发人员来说,serverless最可怕的部分是供货商确认。当你提交到serverless时,实践上的意思就是在单个云供应商上进行库房。这些函数中运用的无服务器应用程序和 api 的系统结构因不同的供应商而不一样,因此更改供应商或切换到内部解决方案的本钱或许很高。虽然如此,有一些专家并不附和这个观念,他们声称厂商确认实践上并不是一个问题。

运用无服务器方法不简略结束可查询性、监督和调试。由于应用程序可以被松散到多个部分,而每个部分都有自己的 bug 和差错,所以控制和查看全局变得很重要。

容器和无服务器可以一起操作吗?

容器和无服务器可以一起操作,答案是必定的。将首要应用程序功用作为一个容器化的微服务来工作,一起将无服务器运用于某些后台操作或很少运用的功用(但占用CPU),或许会非常有用。

另一个幽默的组合是AWS Fargate供应的。该服务结合了无服务器和容器的利益,容许你更好地控制你的应用程序,而不必担忧弹性难题。

结论

容器和无服务器一般被认为是相互竞争的技术。但细心查询就会发现它们只是不同的技术,当在同一个项目中运用时,它们实践上可以补偿相互的缺陷。重要的是要记住,“旧的”并不代表“过期”,“新的”并不代表“更好”。解决方案的有用性取决于特定的用例、项目需求、团队阅历和团队偏好。