Работа AWS CLI S3 CP мучительно медленная - PullRequest
0 голосов
/ 02 октября 2018

У меня возникла проблема, из-за которой загрузка и загрузка с AWS S3 через AWS Clima выполняются очень медленно.Под очень медленным я подразумеваю, что для файла 211 Кбайт постоянно требуется около 2,3 с, что указывает на среднюю скорость загрузки менее 500 Кб / с, что крайне медленно для такого маленького файла.Мое веб-приложение в значительной степени зависит от внутренних API, и я сузил, что основная часть производительности API в обоих направлениях в основном связана с загрузкой и загрузкой файлов с S3.

Некоторые детали:

  • Использование последней версии aws cli (aws-cli / 1.14.44 Python / 3.6.6, Linux / 4.15.0-34-generic botocore / 1.8.48) на экземпляре EC2, размещенном на AWS
  • Экземпляр работает с последней версией Ubuntu (18.04)
  • Экземпляр находится в регионе ap-southeast-2a (Сидней)
  • Экземпляру предоставляется доступ на основе ролей к S3 через политику наименьших привилегий (т. е. минимальные права на сегменты, к которым требуется доступ)
  • Тип: t2.micro, у которого должна быть пропускная способность Интернета ~ 60 МБ или около того
  • S3 сегменты находятся в ap-southeast-2
  • Тот же результат с зашифрованными (по умолчанию) и незашифрованными файлами
  • Тот же результат с файлами независимо от того, имеется ли в них произвольная коллекция буквенно-цифровых символов в имени объекта
  • Проблема сохраняетсяПостоянно, даже после нескольких попыток cp и после перезагрузки, попытка cp постоянно занимает 2,3 с
  • . Это заставляет меня задуматься, не будет ли задушен S3 или экземпляр EC2 (который использует стандартный интернет-шлюз)
  • Я протестировал загрузку одного и того же файла из того же экземпляра на веб-сервер с помощью wget, и это занимает 0,0008 с (то есть 8 мс)

Итак, чтобы подвести итог:

  • Загрузка файла из S3 через интерфейс командной строки AWS занимает 2,3 с (т. Е. 2300 мс)
  • Загрузка того же файла с веб-сервера (> Интернет> Cloudflare> AWS> LB> Apache) через wget занимает 0,0008 с (т. Е.8 мс)

Мне нужно улучшить производительность загрузки AWS CLI S3, поскольку в будущем API будет довольно активно использоваться.

Любые предложения будут с благодарностью приняты.

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Звучит так, как будто у меня похожая проблема

Моя команда aws s3 cp --recursive для большой передачи теперь стала слишком медленной и зависает при последней загрузке файла

awscli-версия, которая работает медленно и зависает aws-cli / 1.16.23 Python / 2.7.15rc1 Linux / 4.15.0-1023-aws botocore / 1.12.13

ранее для этой версии все нормально было aws-cli /1.16.23 Python / 2.7.15rc1 Linux / 4.15.0-1021-aws botocore / 1.12.13

0 голосов
/ 03 октября 2018

Хорошо, это была комбинация вещей.

У меня раньше были проблемы с AWS PHP API SDK (главным образом, связанные с потерянными потоками при копировании файлов), поэтому я изменил свои API для использования AWS CLIпо причинам простоты и надежности, и хотя они работали, я столкнулся с несколькими проблемами с производительностью:

  • Во-первых, поскольку у моего экземпляра был ролевый доступ к моим корзинам S3, интерфейсу командной строки aws потребовалось около 1,7 секунды, чтобы определить,в какой области находились мои области. Конфигурирование CLI для указания области по умолчанию преодолело это
  • Во-вторых, потому что PHP должен вызывать совершенно новую оболочку при выполнении команды exec () (например, exec ("aws s3 cp s3).: //bucketname/objectname.txt /var/app_path/objectname.txt)) это очень медленное упражнение. Я знаю, что можно выгружать команды оболочки через Gearman или аналогичные, но поскольку простота была одной из моих целей, я не сталхочу идти по этому пути
  • Наконец, поскольку CLI AWS использует Python, требуется всего 0,4 с, чтобы инициировать, еслиили это даже начинает обрабатывать команду.Может показаться, что это не так уж и много, но когда мой API находится в производственном использовании, это сильно повлияет на пользователей и инфраструктуру

Короче говоря, я сделал две вещи:

  • Вернулся к использованию AWS PHP API SDK вместо AWS CLI
  • Ссылаясь на правильное имя региона S3 в моем PHP-коде

Мои API теперьпроизводительность намного лучше, т. е. от 2,3 с в среднем до 0,07 с.

Это не мешает моей первоначальной проблеме, но, по крайней мере, производительность намного лучше.

...