Я работаю над сценарием PHP, который:
Status 200 OK
Проблема: когда в пиковые часы поступает 10 с 1000 запросов в секунду в секунду: клиентам приходится долго ждать Status 200 OK
,
Гибкие возможности: сценарию не нужно отвечать клиенту результатом вычисления. Сценарий даже не нужно отвечать Status 200 OK
основанный на успехе / неудаче вычисления — вычисление может в конечном счете потерпеть неудачу, и это полностью хорошо. Таким образом, фактические вычисления могут действительно происходить параллельно за сценой.
Какие инструменты / пакеты / библиотеки / стратегии следует использовать для достижения такого типа интенсивной обработки запросов на PHP? Это даже что-то на стороне PHP или это решаемо на стороне Apache?
Заметки:
Status 200 OK
сразу. Это классический вариант использования очереди. Из перечисленного вами технического стека Redis имеет поддержку очередей (см. PHP-Resque для библиотеки) или есть другие инструменты, которые можно использовать, такие как Beanstalkd (мой любимый, с PHP-библиотекой Pheanstalk). или Amazon SQS. Существует ряд других опций, как самостоятельно размещенных, так и доступных в качестве сервисов.
Веб-сайт или другой механизм получает данные и ставит их в очередь — возвращая 200 OK. Внутренние работники, такие как простые системы на основе cron или (лучше) множественные долгосрочные (иногда перезапускающиеся для очистки) сценарии, извлекают элементы из очереди и выполняют работу, сохраняя результаты.
Я буквально управлял сотнями миллионов подобных работ через такие системы. Рабочие, если они могут добраться до серверов очередей и баз данных, даже не должны работать на одних и тех же машинах (я запускал десятки рабочих на стольких серверах).
Других решений пока нет …