Как спроектировать систему с гарантированной доставкой событий, согласованием транзакций и защитой от дублей?

Используйте transactional outbox на стороне отправителя и идемпотентный inbox/бизнес-ключ у получателя. Реалистичная база — повторяемая доставка с однократным эффектом.

Короткий ответ

Что ответить на собеседовании

Используйте transactional outbox на стороне отправителя и идемпотентный inbox/бизнес-ключ у получателя. Реалистичная база — повторяемая доставка с однократным эффектом.

Подробный разбор

Ответ с пояснениями

Используйте transactional outbox на стороне отправителя и идемпотентный inbox/бизнес-ключ у получателя. Реалистичная база — повторяемая доставка с однократным эффектом.

В одной DB-транзакции сохраните бизнес-изменение и outbox-запись. Relay публикует её с устойчивым event-id, подтверждает доставку и безопасно повторяет после сбоя. Consumer в одной транзакции проверяет inbox/unique-key, выполняет изменение и отмечает обработку; offset подтверждается после commit. Для внешнего неатомарного эффекта нужен idempotency key или reconciliation. Добавьте retries, DLT и мониторинг зависших событий. Гарантии формулируйте при доступном устойчивом хранилище и восстановлении сервисов, а не как магическое отсутствие любых потерь.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее