Что означает семантика доставки at-least-once?
- Что значит «хотя бы один раз»?
At-least-once — сообщение не теряется, но может прийти несколько раз: отправитель повторяет, пока не получит подтверждение.
- Дубли — нормальная часть этой гарантии
- Обработчик должен быть идемпотентным
- Стандарт для бизнес-событий
А ещё At-most-once — наоборот: без повторов, но с риском потери
Подробно
Дубли возникают естественно: подтверждение потерялось в сети, отправитель не знает, дошло ли сообщение, и повторяет. Противоположный вариант at-most-once не даёт дублей, но допускает потери. Поэтому в большинстве систем выбирают именно at-least-once и переносят ответственность на потребителя — обработка должна давать одинаковый результат при повторе, что обычно обеспечивают идентификатором сообщения и отметкой об уже обработанных.
Что хотят услышать
- Определение и откуда дубли.
- Требование идемпотентности.
Частые ошибки
- Считать, что настройками брокера можно полностью избавиться от дублей.
- Обрабатывать сообщения так, что повтор создаёт второй побочный эффект.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Сообщение придёт ровно один раз при любых обстоятельствах
- ✗Сообщение может быть потеряно, но никогда не продублируется
- ✓Потерь не будет, но возможны повторы
- ✗Сообщение доставляется не раньше чем через заданный интервал
Что спросят дальше
- Как сделать обработчик идемпотентным?
- Чем at-most-once отличается по рискам?
Разбор темы
- Retries, DLQ и идемпотентность
Что повторять и почему не всё, backoff/jitter, non-blocking retry, дизайн DLQ и redrive, идемпотентность как фундамент.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.