Клиенты отправляют на api (php) некие данные. Надо чтобы api сразу вернуло что данные приняты и после ответа начало их обработку, чтобы клиент не ждал выполнения обработки. Как это сделать?
Классический приём: данные сразу после принятия пишутся в сыром виде куда-то, например в специальную таблицу вида «дата»+«пользователь»+«сериализованные данные». А потом, каждые N минут, cron ходит в эту таблцу, берёт записи и обрабатывает их.
Stdit истину глаголет, мы именно так проблему и решаем. Получается не так чтобы суперпросто, всё-же какой-никакой, а менеджер очередей приходится писать. Но жить можно.
Да, это отличный вариант, хотя если нагрузка критична, можно этот вариант слега поменять, лично мы пишем данные не в базу а в файл, так быстрей, и потом крон разбирает файлы. И базу не дергаем лишний раз, и смысл тот же.
В файл писать не безопасно при многопоточном доступе (даже при дозаписи в конец, если блок данных достаточно большой, он может быть частично перезаписан следующим запросом), поэтому лучше пишите в БД, тем более для этого достаточно любой не транзакционной базы, хоть myisam в mysql (если будете создавать одну запись в одной таблице за один запрос)/
При записи в файлы можно использовать блокировку файлов (не работает, правда, в Windows) или просто писать в разные файлы, если блоки данных совсем большие.
Ну, я для решения такой задачи писал мини-демон на PHP, которому через сокет передавал данные на обработку. Был еще один мини-проект, так там службу на сях писал — вполне неплохо работало.
Тут есть нюанс: если обработка данных идёт долго, а запросы — часто, то чайлд-процессы fpm-a могут не справиться. Поэтому в большинстве случаев это лучше делать в отдельном потоке, который в перспективе можно вытащить на отдельный сервер.