2015-04-27 8 views
1

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

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

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

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

Любые советы в полной мере получены.

+0

Фоновые задания, обработка нескольких источников, а также много кеширования, чтобы избежать выполнения одной и той же работы более одного раза (по крайней мере, до тех пор, пока базовые данные не изменились). Интерфейс будет затем опросить кеш для деталей продукта. –

ответ

0

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

Вы также должны использовать несколько вызовов Curl, поэтому вы должны использовать параллельные запросы. Чтобы использовать Keep-alive, вам также необходимо поддерживать пул ручек CURL и держать их в тепле. См. high performance curl tips. Вам также необходимо настроить Linux network stack.

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