大数据和AI不分家,AI助力低代码和智能运维落地,AI智能体的探索实践,本届AS会议一站聚齐!>>> 了解详情
写点什么

容器与无服务器,是竞争对手还是队友?

作者:Omer Hamerman

  • 2023-04-13
    北京
  • 本文字数:2282 字

    阅读完需:约 7 分钟

容器与无服务器,是竞争对手还是队友?

在 IT 行业,我们经常会听到诸如云计算、容器、无服务器框架等术语。

 

那么什么是云计算?容器是如何工作的?函数又如何变成无服务器的?

 

本文将尝试解读这些技术术语,并探索开发人员应该如何在技术栈中考虑采用容器或无服务器函数。

 

例如,如果你的应用程序启动时间较长,那么容器可以更好地满足你的需求。

 

需要进行大规模伸缩的高效无状态函数将从运行无服务器函数中受益。

 

容器的工作原理

 

容器是被打包好的应用程序,包含了代码以及必要的库和依赖项,可以在任何环境中运行,不管是哪种操作系统。它可以帮助开发人员轻松地构建、发布、部署和扩展应用程序。

 


图 1 虚拟机与容器之间的比较

 

以前,在容器还不是那么流行的时候,开发人员习惯于将应用程序部署在单独的虚拟机中以实现隔离。每个虚拟机都需要一个客户操作系统,需要物理硬件提供 CPU 和内存,这会导致虚拟机耗尽应用程序所需的资源。

 

采用了容器之后就不再需要客户操作系统了,因为容器引擎可以与一个或多个容器共享物理操作系统。与虚拟机相比,这是一个巨大的优势,因为现在更多的资源可用于应用程序。

 

容器镜像是由开发人员创建的,其中包含了关于容器应该如何运行的指令。然后,开发人员可以使用容器镜像来启动运行实际应用程序的容器。它包含了可以在完全隔离的环境中运行的可执行代码。应用程序的库和依赖项也打包在镜像中。Docker、Amazon ECS、Kubernetes 和 GCP Autopilot 是主要的容器化平台。

 

什么是无服务器函数

 

顾名思义,无服务器计算是计算机科学的一种范式,即开发人员不需要自己管理服务器,而由第三方服务来管理服务器,这样开发人员就可以更多地关注应用程序逻辑,不需要操心与维护服务器相关的问题。无服务器函数,一般来说,是对容器的进一步抽象,两者使用的是相同的底层技术。

 

无服务器计算的工作原理

 

如果没有物理服务器,无服务器计算是不可能实现的——只是开发人员不需要与它们交互,因为供应商(通常是像 AWS、Azure 或 GCP 这样的云供应商)承担了管理服务器的工作。通常,无服务器基础设施中是有容器的。例如,AWS 开源了他们的 Rust 项目,用于处理函数的实例化(firecracker)和用于承载容器节点的轻量级操作系统(bottlerocket)。在这种范式中,供应商为开发人员提供了一个可以编写和提交代码的环境。平台负责执行、分配物理内存、CPU 和输出,并根据应用程序运行的时间以及内存和 CPU 消耗向用户收费。这是一个巨大的优势,因为与自己运行或管理基础设施相比,它大大降低了成本。需要注意的是,无服务器函数也利用了底层的容器。在你启动无服务器函数时,云平台会启动容器,应用程序将在容器中运行。因此,底层技术是相似的,只是环境的部署、扩展和使用方式不同。

 

容器与无服务器之间的基本区别

 

你可以在下表中看到容器与无服务器函数之间的一些关键区别。


 

容器

无服务器函数

环境

用户对虚拟机、操作系统等底层基础设施拥有完全控制权;用户必须负责管理更新和补丁。

云供应商负责管理底层基础设施;用户不需要管理基础设施或补丁。

伸缩性

容器可以使用容器编排平台(如Kubernetes、ECS等)根据工作负载进行伸缩,并配置最小和最大容器数量。

由于无服务器函数更加抽象,因此与容器相比,只需要提供最少的配置。当然,为了进行节流,在用户可以定义允许多少并发调用方面存在一些限制。

启动时间

容器一直在运行应用程序,因此启动时间更短。

无服务器有冷启动和热启动的概念,如果应用程序空闲时间较长,启动时间也将更长。当长时间不使用应用程序时,应用程序会休眠或停止,因此启动时间较长。

运营成本

根据使用时间对用户收取费用——即用即付模式。

根据应用程序运行的持续时间、内存和计算对用户收取费用。内存、CPU和应用程序运行得越多,费用就越高。

 

用例

 

容器和无服务器计算有几种日常的应用场景。有些解决方案可以通过使用容器或无服务器函数来实现。不过,主要的区别在于容器和无服务器函数的定价方式、与云端其他应用程序和服务的集成以及基于负载进行伸缩的能力。

 

例如,如果你的应用程序是一个基于 IP 地址查找地理位置的短时间进程,那么它可以是无服务器的。随着请求数量的增加,无服务器函数将会自动伸缩,无需任何人工干预。如果是 Web 应用程序,需要长时间保持运行,那么容器可能更合适。

 

此外,需要更快访问存储的进程可以使用容器,因为它们可以与文件系统集成。一个例子是集成运行在Amazon ECS上的容器,这些容器可以使用高度可伸缩的EFSAzure Files进行存储。

 

下面的决策树可能有助于决定选择容器还是无服务器函数。

 


图 2 选择容器或无服务器函数的简单决策树

 

两者之间可能存在重叠,下面将讨论容器和无服务器函数的一些常见用例。

 

容器

 

编程语言支持

 

当你将应用程序打包到容器中,它就与平台无关了。无服务器函数支持一些最常见的运行时环境,如 Java、Python、Go 等。但是,如果无服务器函数的运行时不支持应用程序所使用的编程语言,那么容器将是理想的解决方案。容器可以使用任何容器编排平台(如 Kubernetes)进行部署。

 

托管长时间运行的应用程序

 

容器更容易运行需要作为服务长时间运行的 Web 应用程序。例如,跟踪网站用户行为的跟踪应用程序就可以使用容器部署。容器可以根据生成的事件进行伸缩。我们还可以利用 Kubernetes、AWS Fargate 等流行技术来编排容器。

 

无服务器

 

API 端点

 

组织可以使用无服务器应用程序为 Web 或移动服务器部署 API 端点。这些 API 可以是无状态的和短生命周期的,可以根据事件触发。

 

物联网处理

 

随着家庭和工业自动化的发展,物联网设备的使用显著增加。这些物联网设备可以利用无服务器计算的强大功能。

 

事件流

 

在实时事件流场景中,需要根据特定条件填充或过滤事件,开发人员可以使用短生命周期的无服务器函数。然后,你可以使用这些函数检查事件是否有效,或者用人口统计信息来填充事件,等等。

 

总结

 

容器和无服务器应用程序都是可以让开发人员受益的与云无关的工具。根据经验,容器提供隔离性和灵活性,而无服务器有助于开发,并帮助你以最小的运行时成本进行自动伸缩。

 

选择使用容器还是无服务器应用程序取决于具体的用例。例如,如果需要构建一个提供快速、短时间响应的 API 服务器,那么无服务器框架会更好。如果应用程序需要始终可用和运行,那么选择容器化应用程序更合适。

 

原文链接

https://www.infoq.com/articles/containers-serverless-rivals-cohorts/


相关阅读:

通通透透看无服务器计算:由来、场景和问题

无服务器应用程序开发的最新趋势

无需服务器开发,实现设备状态缓存方案——实践类

递归无服务器函数是云端最大的计费风险?

2023-04-13 10:249671

评论 1 条评论

发布
用户头像
不是一个维度的东西。Serverless对应的是有服务架构。容器对标的是传统的虚拟机
2023-04-18 10:19 · 上海
回复
没有更多了
发现更多内容

nodejs实现jwt

coder2028

node.js

HA软件是做什么的?主要作用是什么?

行云管家

高可用 ha 双机热备

上海前端培训课程应该怎么来学习呢?

小谷哥

[力扣] 剑指 Offer 第一天 - 用两个栈实现队列

陈明勇

Go 数据结构与算法 力扣 11月月更

于雨荣获 2022 年度 "OSCAR 尖峰开源人物"

apache/dubbo-go

爱了!阿里技术官亲笔的Java快速面试指南,熬夜啃完剑指大厂

程序知音

Java java面试 java架构 后端技术 Java面试八股文

国有银行发挥普惠金融“头雁”效应,业务成果领跑商业银行

易观分析

普惠金融

杀疯了,GitHub疯传2022Java面试八股文解析+大厂面试攻略

程序知音

java架构 程序员面试 后端技术 Java面试题 Java面试八股文

万物互联,合作共赢:中国物联网行业发展洞察2022

易观分析

物联网 报告

一篇神文就把java多线程,锁,JMM,JUC和高并发设计模式讲明白了

程序知音

Java 高并发 性能调优 java架构 后端技术

一文读懂NodeJs知识体系和原理浅析

coder2028

node.js

如何通过Java代码压缩PDF文档?

在下毛毛雨

Java PDF 压缩PDF

瓴羊Quick BI,自助式报表分析工具让企业运营更高效

巷子

从简历被拒到收割8个大厂offer,我只用了三个月的时间成功逆袭

程序知音

Java java面试 后端技术 Java面试题 Java面试八股文

亚中医疗——数据驱动预算管理升级,引领业务发展

元年技术洞察

数据驱动

python小知识-模块

AIWeker

Python python小知识 11月月更

前端食堂技术周刊第 59 期:GitHub Universe 2022、Rome v10、Parcel v2.8.0、可扩展的 CSS 演变、Solid Start Beta

童欧巴

CSS vim Github Action

零基础学习大数据培训难吗?

小谷哥

大数据培训学习的时候有什么方法吗

小谷哥

元年科技:在数字化浪潮中,为企业建造一艘“方舟”

元年技术洞察

微服务 云原生 容器化 方舟企业数字化 PaaS 平台

webpack配置完全指南

Geek_02d948

webpack

云管平台厂家联系方式谁有?咨询电话多少?

行云管家

云计算 云服务 企业上云 云管平台 云资源

java培训如何入门,怎么选择靠谱机构

小谷哥

亚洲合作资金项目“上合国家软件产业和数据治理合作论坛”在京召开

Geek_2d6073

java程序员可以参加大数据培训吗

小谷哥

聚焦“教-学-评-测-练-管一体化”,推动新型人才培养!

华为云开发者联盟

云计算 后端 华为云

ONES 出席产业互联高峰论坛,分享金融企业研发管理实践

万事ONES

彻底搞懂nodejs事件循环

coder2028

node.js

python小知识-python 文件操作

AIWeker

Python python小知识 11月月更

StarRocks 技术内幕 | 多表物化视图的设计与实现

StarRocks

数据库 数据分析

智慧物流数字孪生系统

申扬科技

智慧物流 数字孪生

容器与无服务器,是竞争对手还是队友?_架构_InfoQ精选文章