Sobes.tech
Senior
59

¿Cómo resolver el problema de duplicación de notificaciones cuando hay varias instancias del servicio de trabajo?

Empresas donde se preguntó
СБЕРСБЕР

Respuesta de la IA

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();
    }
}