Производительность AWS CLI S3 CP болезненно медленная

У меня проблема с загрузкой и загрузкой с AWS S3 через aws cli очень медленно. Очень медленно я подразумеваю, что он последовательно занимает около 2,3 с для файла 211 тыс., Что указывает на среднюю скорость загрузки менее 500 Кбит / с, что крайне медленно для такого маленького файла. Мой webapp сильно зависит от внутренних 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, размещенном в EC2
  • Экземпляр запускает последнюю версию Ubuntu (18.04)
  • Экземпляр находится в регионе ap-юго-восток-2а (Сидней)
  • Экземпляру предоставляется ролевой доступ к S3 с помощью политики с наименьшими привилегиями (т.е. минимальные права на ведра, к которым он нужен)
  • Тип t2.micro, который должен иметь пропускную способность Интернета ~ 60 Мб или около того
  • Ведра S3 находятся на юго-востоке-2
  • Тот же результат с зашифрованными (по умолчанию) и незашифрованными файлами
  • Тот же результат с файлами независимо от того, есть ли у них случайная коллекция буквенно-цифровых символов в имени объекта
  • Проблема сохраняется постоянно, даже после нескольких попыток cp и после перезагрузки попытка cp последовательно принимает значения 2.3s
  • Это заставляет меня задаться вопросом, отключен ли S3 или экземпляр EC2 (который использует стандартный интернет-шлюз)
  • Я тестировал загрузку одного и того же файла из одного экземпляра на веб-сервер с помощью wget, и он принимает 0.0008s (т.е. 8 мс)

Итак, подведем итог:

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

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

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

Всего 2 ответа


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

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

  • Во-первых, поскольку мой экземпляр имел доступ на основе ролей к моим кодам S3, CLI 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 работает в производстве, это будет иметь большое влияние как на пользователей, так и на инфраструктуру

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

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

Теперь мои API-интерфейсы работают намного лучше, т. Е. От 2,3 до среднего порядка 0,07 с.

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


Похоже, у меня такая же проблема

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

aws cli версия, которая медленная и зависает 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


Есть идеи?

10000