Сформируйте устойчивый ключ операции и атомарно создавайте запись запуска с уникальным ограничением. Все десять запросов должны получить один job ID или его уже готовый результат.
Как сделать идемпотентным запуск сбора данных, если одновременно приходит 10 одинаковых запросов?
Сформируйте устойчивый ключ операции и атомарно создавайте запись запуска с уникальным ограничением. Все десять запросов должны получить один job ID или его уже готовый результат.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Сформируйте устойчивый ключ операции и атомарно создавайте запись запуска с уникальным ограничением. Все десять запросов должны получить один job ID или его уже готовый результат.
Ключ включает область пользователя и параметры; одинаковый ключ с другими параметрами должен отклоняться. Проверка «сначала SELECT, потом INSERT» без уникальности допускает гонку.
В транзакции создайте запуск и, при необходимости, outbox-задание. Проигравшие конкурентные запросы читают существующее состояние. Worker также должен быть идемпотентным, иметь lease/heartbeat и восстановление после сбоя. Одна краткоживущая Redis-блокировка не гарантирует отсутствие дубля после истечения TTL, если первый исполнитель ещё работает.