производительность — Выполнение параллельных запросов API в PHP с использованием Beanstalkd / Gearman

У меня довольно большое PHP-веб-приложение, которое получает свои продукты от множества других поставщиков через свои API, обычно отвечая большим XML-кодом для анализа. В настоящее время есть 20 поставщиков, но это должно расти еще дальше.

Наша текущая настройка использует multi curl для выполнения запросов, и это занимает около 30-40 секунд, и это слишком долго. Сценарий выполняется в фоновом режиме, в то время как внешний интерфейс опрашивает базу данных в поисках результатов, а затем отображает их по мере их поступления.

Чтобы улучшить этот процесс, мы думали об использовании сервера заданий для работы в фоновом режиме, причем каждый запрос поставщика представлял собой отдельное задание. Мы видели, как упоминались бобовый стебель и Гирман.

Итак, мы смотрим в правильном направлении, как, если сервер работы является правильным путем? Мы планируем в ближайшее время продвинуться, чтобы мы могли получить более 200 пользователей, одновременно ищущих 30 поставщиков, поэтому правильный выбор должен хорошо масштабироваться, если нам необходимо сбалансировать нагрузку.

Любой совет отлично получен полностью.

1

Решение

Вы можете использовать Beanstalkd, так как вы можете настроить приоритет заданий и время разрешения TTR, по умолчанию это 60 секунд, но для вашего сценария вы должны увеличить его. Есть хороший панель администратора для бобовых.

Вы также должны использовать вызовы multi Curl, поэтому вы должны использовать параллельные запросы. Чтобы использовать Keep-alive, вам также необходимо поддерживать пул ручек CURL и держать их в тепле. Увидеть высокоэффективные наконечники. Вам также нужно настроить Сетевой стек Linux.

Если вы запускаете это в облаке, убедитесь, что вы используете несколько микро машин, а не одну тяжелую машину, так как пропускная способность лучше, когда у вас есть несколько доступных ресурсов.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector