У меня есть задание, которое получает данные из базы данных, выполняет некоторый код и загружает результат в корзину S3. Выполнение кода занимает около 1 минуты, а размер файла результата составляет около 10 МБ. И экземпляры EC2, и бакет S3 находятся в us-west-1.
Я запускаю отдельные экземпляры этого задания сразу на нескольких экземплярах EC2 m3.large. При наличии до 175 экземпляров загрузка занимает менее секунды. Это не очень много одновременных запросов; возможно до 5 / сек. Вскоре после того, как я увеличил его до 200 экземпляров, загрузка занимает 40-60 секунд, а иногда и больше.
Кажется, что это не должно быть необычным объемом данных для отправки на S3, и отдельные машины, похоже, работают нормально (ЦП 40-50%). Что может быть причиной этого? Могу ли я достичь предела пропускной способности сети? Если да, то как я могу сказать?
Файлы были названы с уникальным идентификатором, поэтому я попытался изменить идентификатор, чтобы распределить ключи (как описано https://cloudnative.io/blog/2015/01/aws-s3-performance-tuning/). Это не изменило поведения.
Вероятно, вы столкнулись с узким местом в экземпляре NAT. Управление 200 серверами больших HTTP-запросов через один сервер, вероятно, слишком дорого обходится (будь то ЦП или пропускная способность сети). Разделите свои серверы на несколько подсетей с несколькими экземплярами NAT или поместите их в общедоступную подсеть с прямым подключением к S3, а не через NAT.