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

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

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

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

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

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

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

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

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

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

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

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