Задать вопрос
@OrbiJ

Как правильно построить сервис, создающий отложенные задачи на основе расписания из другого сервиса?

Есть 2 сервиса (A и B). Сервис A хранит в себе расписание для генерации отчётов (Формат: еженедельно в пятницу в 18:22, секунды не учитываются), сервис B должен на основе этого расписания генерировать и сохранять к себе соответствующий отчёт. Ожидаемый кейс, что в промежутке одного часа (в 20:00-21:00 в субботу) может одновременно потребоваться генерация ~1000 отчётов (операция относительно тяжёлая и затратная по времени: ~20 секунд на отчёт, ожидаемое кол-во воркеров - 8). Задача усложняется тем, что в процессе дня время генерации может измениться (например, переехать с 18:00 на 20:00).

Пока вижу такое решение:
Сервис B по HTTP (они внутри одного контура, так что можно позволить себе) каждую минуту опрашивает сервис A и запрашивает у него все id-шники сущностей, отчёт для которых должен быть сгенерирован в ближайшие 5 минут, после чего ставит отложенные задачи в очередь, каждая задача маркируется уникальной по паре(id-сущности + временная метка), чтобы при следующих опросах в течение 5 минут не залетели дубликаты и были подхвачены задания, установленные в соответствующий промежуток. Кейсом, при котором время уже запланированного задания было изменено можно пренебречь (сказать, что не успели поменять, лол, либо в перспективе дописать соответствующее событие, которое будет реагировать на изменение в исходном сервисе и убивать уже существующее задание в очереди).

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

Стек: Redis (очереди, кэш), Laravel (логика генерации отчета, ежеминутный вызов команды).
  • Вопрос задан
  • 62 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

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

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