在 AWS 中使用 Docker 扩展内存消耗高但计算能力低的作业:寻找最佳解决方案
Posted
技术标签:
【中文标题】在 AWS 中使用 Docker 扩展内存消耗高但计算能力低的作业:寻找最佳解决方案【英文标题】:Scale out jobs with high memory consumption but low computing power within AWS and using Docker: finding best solution 【发布时间】:2021-11-15 23:22:30 【问题描述】:满嘴标题,但重点是,我有一些符合这些要求的数据科学管道(基于python
):
-
使用基于服务器的“内部”编排器进行编排
在许多用户/产品/等中运行,其中 N 可能相对较高
我要分发且不受编排服务器束缚的此作业的“负载”
这些作业由 docker 映像支持
这些作业的运行速度相对较快(从 1 秒到 20 秒,数据加载后)
这些作业通常需要大量输入和输出 I/O。
不需要
spark
我希望最大限度地减少扩展/配置/等方面的麻烦
数据(输入/输出)将存储在集群中的HDFS
空间或AWS S3
docker
图像会比较大(包含数据科学堆栈)
我试图了解 (a) 最具成本效益但也是 (b) 快速解决方案来并行化这件事。到目前为止的候选人:
AWS ECS
AWS lambda
支持容器镜像
请注意集群内的所有意图和目的的扩展/计算是不可行的
我的问题是我担心大量数据传输(总体而言)的权衡,多次调用docker
图像的巨大成本,你会花时间在服务器中设置容器,但做任何事情的时间都很短否则,在 lambda 函数出现问题时进行无服务器管理和调试。
这类案件一般如何处理?
【问题讨论】:
嘿 Asher,我要评论下面的 mreferre 答案,因为他说了很多好话,所以我不妨补充一下,而不是开始竞争答案。 【参考方案1】:这是一个很好的问题。首先,我假设您将 Lambda 与 ECS/Fargate 进行比较(更多 here 用于 Fargate 的背景)。虽然 ECS/EC2 的许多考虑因素都适用,但 ECS/Fargate 是更接近 Lambda 的模型。
话虽如此,Fargate 和 Lambda 有很大的不同,如果不考虑它们不同的编程和执行模型(事件驱动与基于服务),很难在两者之间进行苹果对苹果的比较。这并不是说您不能像调用 Lambda 那样调用批处理作业在 Fargate 上运行,而是 1) 执行时间相对较短(1-20 秒)和 2) 以您所暗示的规模到 ... 对每个执行单元按需调用 Fargate 任务可能会造成太大的损失(例如,由于任务大小的粒度有限,并且与 Lambda 的毫秒相比,任务开始时间在 30-60 秒的范围内) .在这种情况下,更好的比较是每个作业的 Lambda 调用模型与可以支持每个任务多个作业的多个正在运行(并且可水平扩展)的 ECS/Fargate 任务。
您在分析中没有提到的是这些作业是否已经存在或存在并且需要针对这些不同模型中的一个或多个进行调整(Lambda 1:1、Fargate 1:1、Fargate 1:many )。一些客户可能决定坚持使用特定模型,因为他们无力调整现有代码库。
一般来说,如果需要从头开始创建软件,Lambda 模型及其不干涉方法似乎更适合此用例。
但就更便宜的情况而言,“理论上”很难做出判断。
【讨论】:
嘿,mreferre,我会回答,但你在正确的轨道上,所以我将把 cmets 放在这里 - 根据他们可以创建自定义 lambda 容器的信息 - 但是 lambda 在你坚持这样的工作所以数据去哪里,如果它是一个数据库并发连接可能会吓坏。这些是对话的想法,而不是答案等 借助 EC2 支持的东西(fargate 等),您可以使用共享 EBS 卷启动实例,从而解决高 IO 问题。 感谢您的详细回答。基本上,这将是我开发并已广泛使用并希望更上一层楼的数据科学管道包的部署选项,这些要求基本上是我用例的 99%。共享的 EBS 卷会以高并发“持有”吗?它们速度很快,但就像 1000 次并发访问一样快?成本当然是必不可少的,因为潜在的 lambda 函数会在效率方面“破坏”您,并且您的预算会被快速削减 小更新:我也倾向于序列化所有内容,因此目前没有数据库压力。我看到共享 EBS 卷对一个可以附加的 EC2 实例的数量有限制。这是一个令人头疼的问题,因为我需要为此设置一种负载均衡器,或者使用多个 EBS 卷并根据需要重定向流量。即使我看到其他应用程序的吸引力,我也会明确避免 我喜欢这个帖子。为了完整起见,Lambda 和 Fargate 都不支持 EBS 卷(如果/当他们这样做时,它不会因为......块存储而被“共享”)。如果您想使用共享存储,您唯一的选择是 EFS(根据“高并发”要求可能会或可能不会工作)。更多信息here for Fargate 和 here for lambda以上是关于在 AWS 中使用 Docker 扩展内存消耗高但计算能力低的作业:寻找最佳解决方案的主要内容,如果未能解决你的问题,请参考以下文章
spring boot 微服务在部署在 ecs aws 的容器中消耗大量内存
减少 ubuntu@aws 微实例上 mysql 的内存消耗
为啥我的 Java 进程在 docker 容器与主机之间消耗两倍的内存