2012-02-19 3 views
0

У меня есть веб-приложение, которое имеет одну длинную задачу - создание отчета в формате PDF. Создаются различные графики, и для обработки требуется всего около 15 секунд. Отчет создается пользователем.Обработка длительных задач

Обработка отчета во время запроса в настоящее время заставляет процесс быть связанным, и что более важно (учитывая, что использование этого веб-сайта не является тяжелым), иногда время ожидания запроса.

Я поэтому перепроектирую архитектуру этого раздела приложения (Rails 2.3.8). Если говорить об этом в контексте, маловероятно, что в день будет генерироваться более двух таких отчетов, и это крайне нишевое приложение, поэтому существенное дальнейшее масштабирование не является серьезной проблемой. Я собираюсь передать проект в будущем, хотя стабильность - это.

Наиболее очевидным решением является использование Spawn для создания отчета и запуск ссылки для загрузки пользователю по электронной почте после его завершения. Другое решение, которое я рассмотрел, - DelayedJob.

Может ли кто-нибудь, кто сделал что-то подобное, рекомендовать один подход над другим?

ответ

0

delayed_job, или какой-либо другой механизм очередей станет самой простой вещью для настройки. С delayed_job вы просто ставите в очередь своего работника вместо создания PDF-файла, и фоновый процесс на сервере будет работать из очереди, делая любую работу. Использование икры для развития вашего всего процесса кажется немного тяжелым, и, похоже, не подходит для других второстепенных, но еще более длительных задач (таких как отправка писем).

+0

Да, и я думаю, что мне интересно, возможно ли другое преимущество в том, что другие задачи, которые в настоящее время выполняются синхронно (например, забытые пароли с паролями), но которые иногда могут потребоваться, могут быть поставлены в очередь с использованием того же механизма. Я полагаю, что недостатком является то, что фоновый процесс работает все время, а не процесс, который разветвляется, когда это необходимо. Чтобы перевернуть его вокруг, есть ли какие-либо обстоятельства, когда кто-то порекомендовал бы развернуть процесс с помощью Spawn? – sparky

Смежные вопросы