параллельная обработка — PHP получает и отвечает на тысячи запросов — выполняет вычисления за сценой

Я работаю над сценарием PHP, который:

  • получает запрос клиента;
  • обрабатывает запрос с помощью CPU-and-Time-Intensive-двоичных вычислений
  • сохранить результат вычисления в базе данных MySQL
  • затем ответьте клиенту Status 200 OK

Проблема: когда в пиковые часы поступает 10 с 1000 запросов в секунду в секунду: клиентам приходится долго ждать Status 200 OK,

Гибкие возможности: сценарию не нужно отвечать клиенту результатом вычисления. Сценарий даже не нужно отвечать Status 200 OK основанный на успехе / неудаче вычисления — вычисление может в конечном счете потерпеть неудачу, и это полностью хорошо. Таким образом, фактические вычисления могут действительно происходить параллельно за сценой.

Какие инструменты / пакеты / библиотеки / стратегии следует использовать для достижения такого типа интенсивной обработки запросов на PHP? Это даже что-то на стороне PHP или это решаемо на стороне Apache?

Заметки:

  • Запуск Apache, MySQL, PHP, Redis в Ubuntu [AMPRU]
  • Клиенты просто отправят запрос и получат Status 200 OK сразу.
  • Клиенты не будут ждать завершения вычисления запроса.
  • Здесь нет концепции автоматического масштабирования или распределения нагрузки: это один сервер AMPRU.
  • Лучше, если параллельные закулисные вычисления могут происходить параллельно

-1

Решение

Это классический вариант использования очереди. Из перечисленного вами технического стека Redis имеет поддержку очередей (см. PHP-Resque для библиотеки) или есть другие инструменты, которые можно использовать, такие как Beanstalkd (мой любимый, с PHP-библиотекой Pheanstalk). или Amazon SQS. Существует ряд других опций, как самостоятельно размещенных, так и доступных в качестве сервисов.

Веб-сайт или другой механизм получает данные и ставит их в очередь — возвращая 200 OK. Внутренние работники, такие как простые системы на основе cron или (лучше) множественные долгосрочные (иногда перезапускающиеся для очистки) сценарии, извлекают элементы из очереди и выполняют работу, сохраняя результаты.

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

2

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

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

По вопросам рекламы [email protected]