Как сделать асинхронный http-запрос в php через центры обработки данных

Мы работаем над конвейером сбора событий на основе Kafka, который будет принимать входящее событие через запросы HTTP GET / POST. Он должен иметь возможность получать события как от браузера пользователя, так и от веб-сервера, работающего на Nginx + PHP-FPM. По самой природе требований этот конвейер должен быть гибким, и поэтому мы будем развертывать его в AWS Singapore, в то время как наши клиенты, обслуживающие веб-серверы, находятся в физическом центре обработки данных в Мумбаи, Индия. Мы не хотим вводить задержку из-за этого, поэтому PHP-приложение должно просто запустить запрос и забыть о нем, для начала даже ~5% потерянных запросов - это нормально. Дорога туда и обратно между Мумбаи и Сингапуром составляет около 70 миллисекунд. Какие варианты мы можем использовать:-

  • Запросы curl или fsockopen с таймаутом ~100 мс - недопустимы
  • Использование таких библиотек, как Guzzle или curl-easy - которые внутренне используют только curl, поэтому снова вводит задержку
  • Запишите запрос локально в файл и используйте для передачи шину типа Flume или Kafka - по сути, мы будем тиражировать равномерный конвейер сбора данных, что увеличит стоимость оборудования.
  • Используя рабочую очередь, как механик - не специалист по этому вопросу, поэтому не знаю плюсов и минусов.
  • Любая вещь под солнцем при условии ее бесплатности и низких эксплуатационных расходов.

Пожалуйста, предложите.

1 ответ

Я бы использовал систему очереди заданий, хотя она вводит еще один уровень сложности. Это один из самых простых способов асинхронного выполнения действий в PHP, и он гарантированно не займет много времени синхронного процессора.

Вы можете использовать Gearman или ZeroMQ. Они оба очень хорошо поддерживаются в PHP.

Другие вопросы по тегам