AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

作者: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:2412888

评论 1 条评论

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

379页满满的精华!2021版“深入骨髓层”JDK源码小册已封神

Java架构追梦

Java 阿里巴巴 架构 面试 jdk源码

Java后端,想找一份20k以上的工作需要掌握哪些知识?

Java架构师迁哥

《面试补习》- 多线程知识梳理

九灵

Java 面试

字节跳动8年老Android面试官经验谈,看完跪了

欢喜学安卓

android 程序员 面试 移动开发

腾讯云EMR基于YARN针对云原生容器化的优化与实践

腾讯云大数据

mapreduce

Ipfs矿机收益Ipfs矿机一天收益

比特币 区块链 IPFS

华为云GaussDB持续技术创新,论文入选SIGMOD2021顶会

华为云数据库小助手

数据库 分布式 GaussDB 华为云数据库

干货!!学习CSRF跨站请求伪造,看这一篇就够了

网络安全学海

网络安全 安全 CSRF 渗透测试 漏洞修复

爆赞:这份Github神仙面试笔记,不愧是上了标星120k+的Java面试手册

Java 编程 程序员 架构 面试

深入解读 Flink SQL 1.13

Apache Flink

flink

图解Git工作原理

Java 程序员 面试

【技术】MediumKube- 快速部署容器云的开发环境

星环科技

云计算 容器 开发工具 开发环境

Pandas高级教程之:category数据类型

程序那些事

Python 数据分析 pandas 程序那些事

flutter_bloc使用解析---骚年,你还在手搭bloc吗!

小呆呆666

flutter ios android 大前端

同样是初级测试,凭什么他比我薪资高5000块?

程序员阿沐

软件测试 自动化测试

CentOS7 Linux服务器无法远程ssh登陆故障处理

Liyuanjie

Centos 7 linux运维 Linux内核

Gopher China 2021,未来可期

非晓为骁

个人提升 架构师 Go 语言 GopherChina gopher

新思科技按需提供渗透测试服务 帮助MATESO识别业务重大漏洞,降低信息泄露风险

InfoQ_434670063458

渗透测试 新思科技 MATESO

不为人知的网络编程(十三):深入操作系统,彻底搞懂127.0.0.1本机网络通信

JackJiang

TCP 网络编程 即时通讯 IM

maven安装与核心概念全面

IT视界

maven

网络攻防学习笔记 Day58

穿过生命散发芬芳

网络攻防 6月日更

什么是ReadWriteMany?

焱融科技

Docker 容器 云原生 高性能 Kubernetes从入门到精通

Redis——NoSQL数据模型及分类

Java 程序员

推荐5个免费YouTube视频下载方法

资源君

分享 工具软件 教程 youtube视频下载 下载youtube视频

持续交付时代,Scrum中还有必要进行 Sprint Review 么?

万事ONES

项目管理 敏捷开发 持续交付 ONES

Spring Cloud Alibaba 优势在哪?未来会如何演进?

Java架构师迁哥

20位大佬,勾勒出一个中国网络安全江湖

学神来啦

网络安全 信息安全 云技术

以贝叶斯之名寻找规则模型 Falling Rule Lists

索信达控股

金融科技 模型 贝叶斯公式 用户模型 模型开发

提高项目管理效率,技术管理者该怎么做?

万事ONES

项目管理 技术管理 ONES

币安智能链DAPP系统开发

Geek_23f0c3

DAPP系统开发 #区块链# 币安智能链

字节跳动移动架构师学习笔记,一文说清!

欢喜学安卓

android 程序员 面试 移动开发

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