【发布时间】:2021-06-11 06:36:22
【问题描述】:
我有一个总体 Bash 脚本,其中有 3 个在脚本中执行的主要进程:
- 启动一个 ec2 实例(比如说 ec2-1),该实例将从私有 s3 存储桶(在同一区域:us-east-1)中提取数据并运行一些程序。
- 启动一个 ec2 实例(比如说 ec2-2),该实例将从公共 amazon s3 存储桶(在同一区域:us-east-1)中提取数据并运行一些程序。
- 启动一个 ec2 实例(比如说 ec2-3),它将从私有 s3 存储桶(与 1 分开)中提取数据,但仍在区域:us-east-1)并运行一些程序。
为了确保每个单独的进程都能正常工作,我分别运行它们。例如,在我的 bash 脚本中,我将只运行进程 1) 并确保它从头到尾完成。完成后,我将测试 2),等待它完全运行,然后测试 3) 以确保完全运行。一切正常,并且一切正常。下载速度超过 25-30 MB/s,这是完美的,因为大量数据正在移入/移出 s3 存储桶。
现在我正处于尝试在同一个 Bash 脚本中同时运行 1、2 和 3 的阶段。注意:所有三个 ec2 实例应该相互独立,因为它们都有自己唯一的 instance-id,但都在同一个区域 (us-east-1)。但是,当我一次运行所有 3 个时,有些东西会导致 s3 存储桶的下载速度变得非常慢 - 从 ~ 25MB/s 到 1 kB/s,有时甚至完全停止。这很有趣,因为 1) 和 3) 正在从私有存储桶中提取数据,而 2) 正在从 Amazon 的公共 s3 存储桶中提取数据,但所有三个实例的下载速度都很慢/停止。我什至将三个 ec2 实例都增加到了 m5dn.24xlarge,但下载速度仍然很糟糕。
我还尝试运行 1)、2) 或 3) 的两个单独实例,但它们的执行速度也较慢。例如,如果我为两个单独的日期(具有两个单独的实例 ID)运行 1),与只运行 1) 的一个实例相比,速度会更低。
我的问题是:如何/为什么会发生这种情况?任何反馈/信息都会非常有帮助。
【问题讨论】:
-
他们是否都共享任何类型的资源,例如公共数据库之类的?仅从您提供的信息来看,应该不会发生此问题,因此图片必须有更多内容。
-
正是我的观点 - 一定有什么事情发生了。除了分享我的每一行代码之外,没有一个通用的数据库(据我所知)。一个 s3 存储桶由亚马逊公开托管,另外两个是整个私有 s3 存储桶的一部分,其层次结构如下:s3://topdir/dir1 和 s3://topdir/dir2
-
你在哪里运行 bash 脚本?在你的本地机器上?当您说您同时运行所有 3 个时,您的意思是您只是在本地计算机上运行 3 个进程,每个进程都运行整个脚本,或者您是否修改了脚本以在内部创建线程并运行 3 个方法?性能如此大幅下降与 EC2 的错误配置有关,而不是因为 S3 存储桶被共享或其他原因。
-
bash 脚本在我的本地机器上,可以直接与 s3 存储桶/ec2 实例通信。我在 bash 脚本中创建了一个函数,其中函数调用“aws ec2 run-instances”命令来创建一个唯一的 ec2 实例,然后运行“aws ssm send-command”将脚本从 s3 存储桶复制到新创建的 ec2 实例,然后是最终的“aws ssm send-command”以在新创建的 ec2 实例上运行脚本。然后对其他 2 个 ec2 实例重复此操作,但以串行方式而非并行方式完成,以确保不会混淆 instance-id
标签: amazon-web-services amazon-s3 amazon-ec2