Sobes.tech
Назад к вопросам
Senior
4

Как решить проблему дублирования уведомлений при нескольких инстансах job-сервиса?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

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

Решения:

  1. Использование распределённой блокировки — перед отправкой уведомления инстанс пытается захватить lock в распределённом хранилище (например, Redis с Redlock). Только тот, кто получил lock, отправляет уведомление.

  2. Очередь сообщений с гарантией единственной обработки — использовать брокер сообщений (Kafka, RabbitMQ) с настройкой, что каждое уведомление обрабатывается ровно одним потребителем.

  3. Идентификация и дедупликация уведомлений — добавлять уникальный идентификатор уведомлению и проверять в базе или кэше, отправлялось ли оно уже.

  4. Назначение лидера (leader election) — один инстанс становится лидером и отвечает за отправку уведомлений, остальные — нет.

Пример с Redis Redlock (Java):

// Получаем lock перед отправкой уведомления
RLock lock = redissonClient.getLock("notification_lock");
boolean isLocked = lock.tryLock(100, 1000, TimeUnit.MILLISECONDS);
if (isLocked) {
    try {
        // Отправляем уведомление
    } finally {
        lock.unlock();
    }
}