我有一个工作,从数据库获取数据,运行一些代码,并将结果上传到S3存储桶。 代码运行大约需要1分钟,结果文件大约为10MB。 EC2实例和S3存储桶都位于us-west-1中。
我一次在多个EC2 m3.large实例上运行此作业的单独实例。 通过多达约175个实例,上传时间不到一秒钟。 这不是很多的同时请求; 也许高达5 /秒。 在将其增加到200个实例之后不久,上传需要40-60秒,有时甚至更长。
看起来,这不应该是一个不寻常的数据发送到S3,并且个别机器似乎没有问题(CPU 40-50%)。 什么可能导致这个? 我可以达到networking带宽限制吗? 如果是这样,我怎么知道?
这些文件是用一个唯一的ID命名的,所以我试着反转ID来分散键(如https://cloudnative.io/blog/2015/01/aws-s3-performance-tuning/所述)。 这并没有改变行为。
你可能在NAT实例上遇到瓶颈。 通过一台服务器驱动200台服务器的大量HTTP请求可能会导致太多的费用(无论是CPU还是networking带宽)。 将您的服务器分成多个具有多个NAT实例的子网,或者将它们直接连接到S3而不是通过NAT连接到公共子网。