我有一项作业,从数据库获取数据,运行一些代码,并将结果上传到 S3 存储桶。代码运行大约需要 1 分钟,结果文件大约 10MB。EC2 实例和 S3 存储桶都在 us-west-1。
我一次在多个 EC2 m3.large 实例上运行此作业的单独实例。最多约 175 个实例时,上传时间不到一秒。同时发出的请求并不多;可能最多 5 个/秒。在我将其增加到 200 个实例后不久,上传需要 40-60 秒,有时甚至更长。
看起来这不应该是发送到 S3 的异常数据量,并且各个机器似乎运行良好(CPU 40-50%)。这可能是什么原因造成的?我是否达到了网络带宽限制?如果是这样,我该如何判断?
这些文件都用一个唯一的 id 命名,所以我尝试反转 id 来分散密钥(如上所述https://cloudnative.io/blog/2015/01/aws-s3-performance-tuning/)这并没有改变行为。
答案1
您可能遇到了 NAT 实例的瓶颈。通过一台服务器驱动相当于 200 台服务器的大型 HTTP 请求可能会给服务器带来过多负担(无论是 CPU 还是网络带宽)。将您的服务器拆分到具有多个 NAT 实例的多个子网中,或将它们放在直接与 S3 联网的公共子网中,而不是通过 NAT。