Хорошо, это была комбинация вещей.
У меня раньше были проблемы с 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 с.
Это не мешает моей первоначальной проблеме, но, по крайней мере, производительность намного лучше.