Да, это хорошо известный шаблон для обработки долгоживущих задач в серверной части веб-приложения. В зависимости от вашего языка и среды приложения существует множество реализаций очереди, например, Resque или Beanstalkd или ActiveMQ или, если ваши требования к производительности невысоки, вы можете использовать таблицу базы данных в качестве очереди.
Основная идея заключается в том, что ваше веб-приложение помещает задания в очередь с достаточным количеством контента, чтобы можно было продолжить работу. Группа рабочих процессов в фоновом режиме (в идеале запущенных независимо от вашего веб-приложения) считывает задания из очереди и выполняет их. Результаты могут быть записаны обратно в очередь ответов или, возможно, записаны в базу данных. Это зависит от того, как вы хотите отобразить результаты обратно пользователю. Для веб-приложения запись результатов в базу данных, вероятно, имеет больше смысла.
В зависимости от вашего обработчика очереди, они могут делать задания постоянными. Например. ActiveMQ поддерживает постоянный обмен сообщениями, поэтому сообщения в очереди восстанавливаются в случае сбоя.
Вы спрашиваете о повторяющихся работах - и я думаю, что ответ зависит от того, когда им нужно повторяться.
Прямая очередь сообщений будет обрабатывать / отправлять сообщения работникам, как только они станут доступными. Так что планирование сложно или невозможно. Для поддержки запланированных заданий (включая задания, которые повторяются в определенный момент времени или по истечении времени), вам, вероятно, следует рассмотреть возможность использования таблицы базы данных в качестве простой очереди с атрибутом «время начала».
Я недавно описал похожую модель здесь .