Я работаю над потребительским веб-приложением, которое должно выполнять длительный фоновый процесс, связанный с каждым запросом клиента. Под длительной работой я имею в виду от 1 до 3 минут.
Вот пример потока. Объект / виджет на самом деле не имеет значения.
- Клиент заходит на сайт и указывает объект / виджет, который ищет.
- Мы ищем / очищаем / фильтруем виджеты, соответствующие некоторым начальным критериям. <- длительный процесс </li>
- Клиент дополнительно настраивает более подробную информацию о виджете, который он ищет.
- Когда длительный процесс завершен, клиент может выполнить несколько последних шагов перед преобразованием.
Шаги 3 и 4 на самом деле не важны. Я просто упоминаю их, потому что мы можем выиграть время, пока мы выполняем длительный процесс.
Среда, в которой мы работаем, представляет собой стек LAMP - в настоящее время используется PHP. Не похоже на хороший дизайн, чтобы длительный процесс занимал поток apache в mod_php (или процесс fastcgi). Уровень Apache нашего приложения должен быть направлен на обслуживание контента, а не на обработку данных IMO.
Несколько вопросов:
- Правильно ли наше мышление в том, что мы должны отделить эту "долго работающую" часть от уровня apache / web app?
- Существует ли стандартный / типичный способ решить эту проблему в Linux / Apache / MySQL / PHP (мы открыты для использования другого языка для обработки, если это необходимо)?
- Любые предложения о том, как это сделать? Например. мы создадим демона, который будет проходить через очередь FIFO?
Редактировать: Просто для пояснения, только около 1/4 длительного процесса ориентированы на базу данных. Мы работаем над оптимизацией этой части. Мы можем потенциально выполнить некоторую работу, но мы ограничены в сумме, которую можем сделать прямо сейчас.
Спасибо!