Что лучший способ состоит в том, чтобы организовать рабочие процессы в направляющих?

Шаблон "одиночка" реализован с любезностью Python ActiveState.

похоже, что прием должен поместить класс, это, как предполагается, только имеет один экземпляр в другом классе.

15
задан Yehuda Katz 9 July 2009 в 02:55
поделиться

4 ответа

Для меня нежелание поддерживать много дополнительной инфраструктуры является ключевым приоритетом, поэтому я использовал очереди с поддержкой базы данных, которые выполняются вне Rails.

В моем случае я использовал background_job и delayed_job . С background_job рабочий процесс продолжал работать через cron, поэтому не было никакого управления демонами. С помощью delayed_job я использую Heroku и позволяю им беспокоиться об этом.

С помощью delayed_job вы можете передать столько аргументов, сколько нужно вашему фоновому рабочему процессу.

Delayed::Job.enqueue(MyJob.new(param[:one], param[:two], param[:three])

Я не нашел подходящего решение для запуска материалов по расписанию, помимо использования скрипта / бегуна через cron (я предпочитаю использовать скрипт / бегун вместо задачи Rake, потому что мне легче тестировать код) .

Я '

5
ответ дан 1 December 2019 в 04:27
поделиться

У меня есть система, которая получает запросы, а затем должна вызывать несколько внешних систем с помощью веб-служб. Некоторые из этих запросов занимают больше времени, чем пользователь может ожидать, и я использую корпоративную систему очередей (activemq) для обработки этих запросов.

Для этого я использую плагин ActiveMessaging . Это позволяет мне упорядочить запрос и поместить его в очередь для асинхронной обработки с доступом к данным запроса, однако вам нужно будет написать службу опроса, если вы хотите дождаться ответа.

Я видел Railscast Райана Бейтса на Starling and Workling , и они выглядят многообещающими, но я их не использовал.

2
ответ дан 1 December 2019 в 04:27
поделиться

Для регулярных запланированных задач я просто использую rake-задачи. Он прост, легко тестируется, легко понимается и хорошо интегрируется со средой Rails. Затем просто выполняйте эти грабли с помощью задания cron с любым требуемым интервалом (я использую всякий раз, когда для управления этими заданиями, потому что я немного неграмотен в cron).

0
ответ дан 1 December 2019 в 04:27
поделиться

Мне действительно не нравятся такие драгоценные камни, как delayed_job и background_job , которые сохраняются в базе данных с целью выполнения асинхронных заданий. Мне это кажется грязным. Временные данные не принадлежат базе данных.

Я большой поклонник очередей сообщений для работы с асинхронными задачами, даже если у вас нет необходимости в большой масштабируемости. На мой взгляд, очереди сообщений - это идеальный "лингва-франка" для сложных систем. С очередью сообщений в большинстве случаев у вас нет ограничений на технологии или языки, которые задействованы в том, что вы создаете. Преимущества использования очереди сообщений с низким уровнем параллелизма, вероятно, наиболее заметны в «корпоративной» среде, где интеграция всегда является серьезной проблемой. Дополнительно, очереди сообщений идеальны, когда асинхронный рабочий процесс включает несколько шагов. RabbitMQ - мой личный фаворит.

Например, рассмотрим сценарий, в котором вы создаете поисковую систему. Люди могут отправлять URI для индексации. Очевидно, вы не хотите получать и индексировать страницу по запросу. Итак, вы строите вокруг очереди сообщений: цель отправки формы принимает URI, бросает его в очередь сообщений для индексации. Следующий доступный процесс-паук извлекает URI из очереди, извлекает страницу, находит все ссылки, помещает каждую из них обратно в очередь, если они неизвестны, и кэширует содержимое. Наконец, новое сообщение помещается во вторую очередь для процесса индексатора для обработки кэшированного содержимого. Процесс индексатора извлекает это сообщение из очереди и индексирует кэшированное содержимое. Конечно, слишком упрощенно - поисковые системы - это большая работа, но вы поняли идею.

Что касается реальных демонов, очевидно, я неравнодушен к своей собственной библиотеке (ChainGang), но на самом деле это просто оболочка вокруг ядра. fork (), который дает вам удобное место для работы с кодом установки и удаления. Это тоже еще не совсем готово. Часть демона на самом деле гораздо менее важна, чем очередь сообщений.

Что касается среды Rails, что ж, вероятно, лучше всего оставить это в качестве упражнения для читателя, поскольку использование памяти будет значительным фактором, что с длинными запущенный процесс. Вы не хотите загружать то, что вам не нужно. Между прочим, это одна из областей, в которой DataMapper надежно пинает ActiveRecord. Инициализация среды хорошо документирована, и в игру вступает гораздо меньше зависимостей, делая весь комплект и caboodle значительно более реалистичным.

Единственное, что мне не нравится в cron + rake, это то, что rake практически гарантированно выводит на стандартный вывод, а cron имеет тенденцию быть слишком болтливым, если ваши задания cron производят вывод . Мне нравится помещать все свои задачи cron в каталог с соответствующим именем, а затем создавать задачу rake, которая их обертывает, так что запускать их вручную было тривиально. Жаль, что rake делает это, потому что я действительно предпочел бы иметь возможность использовать зависимости. В любом случае вы просто указываете cron непосредственно на скрипты, а не запускаете их через cron.

В настоящее время я занимаюсь созданием веб-приложения, которое в значительной степени полагается на асинхронные процессы, и я должен сказать, что я очень, очень рад, что решил не использовать Rails.

Как в cron + rake, так это то, что rake практически гарантированно выводит на стандартный вывод, а cron имеет тенденцию быть слишком болтливым, если ваши задания cron производят вывод. Мне нравится помещать все свои задачи cron в каталог с соответствующим именем, а затем создавать задачу rake, которая их обертывает, так что запускать их вручную было тривиально. Жаль, что rake делает это, потому что я бы действительно предпочел иметь возможность использовать зависимости. В любом случае вы просто указываете cron непосредственно на скрипты, а не запускаете их через cron.

В настоящее время я занимаюсь созданием веб-приложения, которое в значительной степени полагается на асинхронные процессы, и я должен сказать, что я очень, очень рад, что решил не использовать Rails.

Как в cron + rake, так это то, что rake практически гарантированно выводит на стандартный вывод, а cron имеет тенденцию быть слишком болтливым, если ваши задания cron производят вывод. Мне нравится помещать все свои задачи cron в каталог с соответствующим именем, а затем создавать задачу rake, которая их обертывает, так что запускать их вручную было тривиально. Жаль, что rake делает это, потому что я действительно предпочел бы иметь возможность использовать зависимости. В любом случае вы просто указываете cron непосредственно на скрипты, а не запускаете их через cron.

В настоящее время я занимаюсь созданием веб-приложения, которое в значительной степени полагается на асинхронные процессы, и я должен сказать, что я очень, очень рад, что решил не использовать Rails.

и cron имеет тенденцию быть чрезмерно болтливым, если ваши задания cron производят вывод. Мне нравится помещать все свои задачи cron в каталог с соответствующим именем, а затем создавать задачу rake, которая их обертывает, так что запускать их вручную было тривиально. Жаль, что rake делает это, потому что я действительно предпочел бы иметь возможность использовать зависимости. В любом случае вы просто указываете cron непосредственно на скрипты, а не запускаете их через cron.

В настоящее время я занимаюсь созданием веб-приложения, которое в значительной степени полагается на асинхронные процессы, и я должен сказать, что я очень, очень рад, что решил не использовать Rails.

и cron имеет тенденцию быть чрезмерно болтливым, если ваши задания cron производят вывод. Мне нравится помещать все свои задачи cron в каталог с соответствующим именем, а затем создавать задачу rake, которая их обертывает, так что запускать их вручную было тривиально. Жаль, что rake делает это, потому что я действительно предпочел бы иметь возможность использовать зависимости. В любом случае вы просто указываете cron непосредственно на скрипты, а не запускаете их через cron.

В настоящее время я занимаюсь созданием веб-приложения, которое в значительной степени полагается на асинхронные процессы, и я должен сказать, что я очень, очень рад, что решил не использовать Rails.

Я действительно предпочитаю иметь возможность использовать зависимости. В любом случае вы просто указываете cron непосредственно на скрипты, а не запускаете их через cron.

В настоящее время я занимаюсь созданием веб-приложения, которое в значительной степени полагается на асинхронные процессы, и я должен сказать, что я очень, очень рад, что решил не использовать Rails.

Я действительно предпочитаю иметь возможность использовать зависимости. В любом случае вы просто указываете cron непосредственно на скрипты, а не запускаете их через cron.

В настоящее время я занимаюсь созданием веб-приложения, которое в значительной степени полагается на асинхронные процессы, и я должен сказать, что я очень, очень рад, что решил не использовать Rails.

8
ответ дан 1 December 2019 в 04:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: