Стоит ли переносить с крона в очереди?

Всем привет, у нас на кроне весит 2-3 задачки, каждая в своем интервале проверяет некоторые данные, и производит тяжелые фоновые работы.
Например, работу с каталогом, индексами, или импорт данных, если появился файл выгрузки.

У нас на текущий момент уже используется rabbitmq, и десяток консюмеров для других задач (для реал-тайм интеграции с поставщиком).

Вопрос: стоит ли бояться плодить консюмеров ? Насколько они сильно нагружаются систему, когда просто слушают очередь ?

Стоит ли переводить выполнение задач по крону, на очереди ? Создать очередь тасков, и одного консюмера, который при появлении задачи, будет ее запускать.

Дело в том, что за сутки крон запускает всего 4-5 задач, но проверяет их наличие каждые 5 мин, т.к. они могут появиться в любой момент.
Меня пугает то, что в варианте с очередями, консюмер 95% своего времени будет просто висеть и слушать очередь, т.к. сообщения падают 4-5 раз в сутки.
  • Вопрос задан
  • 363 просмотра
Пригласить эксперта
Ответы на вопрос 3
stanislav-belichenko
@stanislav-belichenko
Backend PHP Developer
Про нагрузку:

Нет, ничего критического не произойдет, если только вы не работаете с серверами из 80-х. Конкретно кролик держит огромные нагрузки отлично.

Про целесообразность:

Во-первых, выше верно пишут, пока работает - не трогай.
Во-вторых, опять же выше верно пишут, что на такое количество задач затея сомнительна.
В-третьих, очереди - это обычно нечто событийное. К тебе пришел клиент на сайт, загрузил свое фото, ты родил сообщение в очередь на бекенде сайта, что фото должно быть проверено саппортами, это событие получила CRM-система саппортов и они выполнили какие-то действия. А в описанной в вопросе модели кто будет рождать такие события? Некий таймер? Он же опять скорее всего на кроне будет, смысл городить огород тогда с кроликом? Если не на таймере, а на каком-то событии, возникающим в приложении в нужный момент времени - ну ок. Но скорее всего, будет все-таки иначе.
Ответ написан
@Karpion
Тяжёлые работы лучше выполнять поочерёдно, а не параллельно. Хотя это зависит от количества ядер процессора и от количества дисков; это нетривиальная задача по оптимизации.

Я не понял, что значит "проверяет наличие задач каждые 5 мин". Что именно проверяется?
Если надо оперативно запускать программы - то надо сделать так, чтобы "источник задач" (тот, кто порождает необходимость запустить задачу) сам запускал задачу. Есть много механизмов, могу обсудить.
Ответ написан
Комментировать
Можно сделать такой вариант запуска задач:
Планировщик задач запускает программу, проверяющую какие-то условия и когда получено решение о выполнении задачи, отправляет в очередь указание с необходимыми для выполнения аргументами и затем программа сразу завершается. При такой схеме не будет висеть процесс программы долгое время, а консюмеры будут обрабатывать задачи асинхронно и поочередно.
Но для такого малого количества задач затея сомнительна.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
23 апр. 2024, в 16:55
10000 руб./за проект
23 апр. 2024, в 16:10
1500 руб./в час
23 апр. 2024, в 16:05
3000 руб./за проект