Фоновые задачи в Meteor
-
13-12-2019 - |
Вопрос
Мне интересно, есть ли способ реализовать фоновые действия, возможно, с помощью пула рабочих.Можете ли вы показать мне направление, я подумываю о написании пакета для этого?
Решение
Обновление 2019 года
Прежде чем думать о написании пакета для чего-либо, сначала посмотрите, существуют ли существующие пакеты, которые делают то, что вам нужно.В мире Meteor это означает поиск пакетов «задание/очередь/задача/управление работниками/планирование» в Atmосфере, а затем в npm по тем же критериям поиска.Вам также необходимо более точно определить свои требования:
- вам нужно постоянство или подойдет решение в памяти?
- вы хотите иметь возможность распределять задания на разные машины?
Специально для метеора
- сбор заданий — надежный (использовал в 2014 году в продакшене при стартапе), но сейчас в режиме обслуживания.Позволяет планировать постоянные задания для запуска где угодно (серверы, клиенты).
- Стив Джобс - активно поддерживается Максом Савиным, автором нескольких мощные инструменты Метеора
- Littledata: синхронизированный-cron - «Простая система cron для Meteor.Он поддерживает синхронизацию заданий между несколькими процессами».
Заброшенные пакеты:
- Артвеллс: очередь - приоритеты, планирование, журналирование, перестановка в очередь.Очередь, поддерживаемая MongoDB.Последний фиксация кода:2015-октябрь.
- супер базовые пакеты cron: Easycron.Последнее обновление:декабрь 2015 г.
- дифференциал: рабочие - Создавать безголовые рабочие метеорные процессы для работы над асинхронными заданиями.Последний фиксация кода:январь 2015 г.
- хрон (с 2015 года)
- PowerQueue - заброшенный с 2014 года.Асинхронные задачи в очереди, регулирование использования ресурсов, повторная попытка не удалась.Поддерживает дополнительные очереди. Нет расписания.Никаких тестов, но отличная демоверсия.Не подходит для длительного бега из-за использования рекурсивные вызовы.
НПМ-пакеты
Meteor уже несколько лет может использовать пакеты npm напрямую, поэтому этот вопрос сводится к поиску пакеты управления заданиями/работниками/очередями на НПМ.Если вас не волнует настойчивость:
- Асинхронный "обеспечивает около 70 функций, включая обычные "функциональные" подозреваемые (
map
,reduce
,filter
,each
...), а также некоторые общие шаблоны для асинхронного потока управления (parallel
,series
,waterfall
...)" - d3-очередь - минималистичный, написанный автором D3 Майком Бостоком.
Если вам нужна постоянство, поскольку Meteor уже использует MongoDB, может быть выгодно использовать пакет планирования заданий с сохранением в MongoDb.Самым мощным и популярным кажется Повестка дня, но, к сожалению, он не обслуживался уже несколько месяцев, и у него имеется значительное количество невыполненных работ. проблемы.
Если вы готовы добавить зависимость, поддерживаемую Redis для вашего проекта есть больше вариантов:
- бык - наиболее полнофункциональное решение для очереди заданий для Node, поддерживаемое Redis
- пчела - просто, быстро, надежно.Не страдает от утечка памяти, которую демонстрирует Булл
- Куэ - приоритетная очередь заданий для Node
Как и MongoDB, Redis также может обеспечивать высокую доступность (через Redis Sentinel), и если вы хотите распределить задания между несколькими рабочими машинами, вы можете направьте их всех на один и тот же сервер Redis.
Другие советы
Существует пакет на основе заданий CRON, которые можно использовать для расписания задач на определенные интервалы или даты.Вот пакет: https://atmosphere.meteor.com/package/cron >
И если вы посмотрите в источник этого пакета, вы заметите, что они просто используют:
Meteor.setInterval( ... , delay );
Так что, если вы сохраняете свои задачи в базе данных, то загрузите их в интервалы во время запуска, вы, вероятно, будете на правильном пути.
Если вы ищете что-то, что специфично для Meteor, я рад поделиться, есть новый пакет, называемый Стив Джобс.Это делает рабочие места бегущего фона так же просто, как вызов метода.
У него есть все стандартные функции, которые вы ожидаете, например, выполняя работу только один раз, повторную попытку неисправных заданий и т. Д.Вы можете узнать больше об этом на GitHub:
Я предполагаю, что правильная поддержка находятся на их дорожной карте, но в то же время мне удалось получить его взломанным путем через setInterval
.Смотрите Cron-Tick Пакет.