AICon议程上新60%,阿里国际、360智脑、科大讯飞、蔚来汽车分享大模型探索与实践 了解详情
写点什么

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

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

评论 1 条评论

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

鼎茂科技获得阿里云首批产品生态集成认证,携手阿里云共建新合作

阿里巴巴云原生

阿里云 云原生 加速器 企业招募

vue和react的区别有哪些,哪个好

千锋IT教育

大数据 Hadoop 的五大优势

千锋IT教育

一路同行:开发者与华为云的2022

脑极体

云原生网关的可观测性体系实践

阿里巴巴云原生

阿里云 云原生 云原生微服务

Kotlin变量的空安全(Null Safety)

子不语Any

android kotlin 11月月更

直播CDN调度技术关键挑战与架构设计

京东科技开发者

架构 系统架构 直播 CDN加速 CDN技术

JavaScript刷LeetCode拿offer-树的遍历

js2030code

JavaScript LeetCode

Wallys/Introduction of DR9074 series network card/qcn9074/qcn9072/qcn9024/industrial M.2 card

wallysSK

QCN9074 QCN9024 QCN9072

聚焦年轻消费人群 百草味入围最受“Z世代”喜爱品牌TOP10

E科讯

2 分钟,教你用 Serverless 每天给女朋友自动发土味情话

阿里巴巴云原生

阿里云 Serverless 云原生

Spring Boot框架下实现Excel服务端导入导出

葡萄城技术团队

前端 Excel 控件

java Apache poi 对word doc文件进行读写操作

@下一站

编程 原创 word Java core 11月月更

【Redis】Redis AOF持久化

石臻臻的杂货铺

redis 11月月更

扒去Spring事件监听机制的外衣,竟然是观察者模式

程序知音

Java spring ssm Java后端 后端技术

MASA MAUI Plugin (六)集成个推,实现本地消息推送[Android] 篇

MASA技术团队

blazor MASA MAUI Xamarin MASA Blazor

【Go电商实战05】结合项目解答使用Go中间件遇到的问题:中间件的概念和应用

王中阳Go

golang 学习方法 中间件 11月月更 电商实战

前端leetcde算法面试套路之二叉树

js2030code

JavaScript LeetCode

Redis6.0新特性、剖析线程模型(单线程和多线程)

C++后台开发

redis 多线程 后端开发 单线程 C++开发

以用户为导向,vivo打造安全新范式

Geek_2d6073

还在为数据库事务一致性检测而苦恼?让Elle帮帮你,以TDSQL为例我们测测 | DB·洞见#7

腾讯云数据库

数据库 腾讯云 数据一致性 tdsql 腾讯云数据库

java企业级开发中常见的注入方式

千锋IT教育

首批!腾讯云通过金融开源技术服务能力评估

腾源会

开源

JavaScript刷LeetCode拿offer-二叉树层序遍历篇

Geek_07a724

JavaScript LeetCode

用javascript分类刷leetcode3.动态规划(图文视频讲解)

js2030code

JavaScript LeetCode

线性稳压电源和开关电源,到底有什么区别?

元器件秋姐

电源电路 元器件采购 元器件电商 元器件知识 华秋商城

8分钟带你学会SpringBoot整合Redis来实现缓存技术

好程序员IT教育

redis Spring Boot

居民消费价格指数变化新鲜出炉,这类商品同比涨幅最大

前嗅大数据

数据分析 数据采集 居民消费 居民消费指数

10月月更获奖名单出炉啦!快来看看你上榜没有!

InfoQ写作社区官方

热门活动

【倒计时4天】杭州专场-单元测试产品体验样板间,等你加入!

TRaaS

10 分钟部署一个 API 工具

Scar 

开源 Serverless 接口测试 Vercel

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