Sobes.tech
Senior

Ja mums ir vairākas lietojumprogrammas instancijas, kā nodrošināt, lai tāda pati operācija no plānotāja netiktu apstrādāta vairākās instancijās vienlaikus?

sobes.tech AI

Atbilde no AI

Чтобы избежать одновременной обработки одной и той же операции несколькими инстансами приложения из шедулера, обычно применяют механизмы распределённого блокирования (distributed locking).

Основные подходы:

  • Использование базы данных: создать таблицу блокировок, где операция помечается как "заблокирована" одним из инстансов. Перед выполнением операции инстанс пытается установить блокировку (например, через уникальный ключ или флаг). Если блокировка уже есть — операция не выполняется.

  • Использование Redis с поддержкой блокировок (например, Redlock): инстанс пытается получить lock с TTL, если успешно — выполняет задачу.

  • Использование специализированных систем для распределённого блокирования, например ZooKeeper или Consul.

Пример с Redis (Java, с использованием Redisson):

RLock lock = redisson.getLock("myScheduledTaskLock");
if(lock.tryLock(0, 10, TimeUnit.SECONDS)) {
    try {
        // выполнить задачу
    } finally {
        lock.unlock();
    }
}

Таким образом, только один инстанс сможет получить блокировку и выполнить операцию в заданный момент времени.