возникла одна, озадачились.
Для организации работы одного сервиса используется бесконечный цикл внутри которого выполняются постоянно операции разные.
опишу кратко сервис
Этот сервис постоянно смотрит в базе статусы, если видит что в строках базы изменились статусы ("Выполнено") то сервис добавляет в Mongo базу новые строки со статусами (Ожидает обработки)
При том когда ложит новую строку, сразу кидает в кафку параллельно еще и сообщение привязанное по id к строке, прошу не вдаваться почему это именно все так построенно - нужно для статистики и удобного управления процессами из веб панели, с базы проще контролировать статусы, время старта работы и завершения и т.д.
Цель сервиса постоянно пополнять новыми свежими строками базу и кафку, если старые приняли статус "Выполнено", при этом сервис следит, чтобы в общей сложности текущими активными в моменте придерживалось постоянно 40 свежих строк в базе в статусе "Ожидает обработки", чтобы другому исполняющему сервису было постоянно мясо (новые сообщения в кафке) для работы
Соответственно с задержкой в 5 секунд сервис постоянно отслеживает статусы строк в базе и чекает.
Вопрос: насколько в плане эффективности справедливо в цикле так все время базу опрашивать? Это во-первых нагрузка на базу, во-вторых цикл вечный ресурсы кушает и оперативу.. Есть ли что-то эффективнее вечного цикла? Все таки 21 век на дворе..?
Существуют ли более правильные подходы для организации подобных сервисов?
@scheduled + кеш на БД
гуглите debezium или вообще "change data capture". но вообще, если работает и никто не жалутеся - лучше не трогайте
Можно подписаться на изменения, на монго это точно есть и работает
работа по событию очень круто - эффективно, чем вхолостую молотить
Обсуждают сегодня