Выбор ответа Middle Кеш и очереди спрашивают часто обновлено

At-least-once и идемпотентность

Вопрос

Воркер списал деньги и упал до подтверждения задачи в очереди. Очередь даёт at-least-once. Что произойдёт и что нужно было сделать?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Задача придёт снова и спишет повторно, нужен ключ идемпотентности. Без подтверждения брокер считает задачу невыполненной и выдаст её снова.

Варианты ответа

  1. Задача потеряется; нужно было использовать Kafka с подтверждением
  2. Ничего: at-least-once означает ровно один раз при сбое воркера
  3. Очередь сама откатит списание через компенсирующую задачу
  4. Задача придёт снова и спишет повторно, нужен ключ идемпотентностиправильный ответ

Разбор

Без подтверждения брокер считает задачу невыполненной и выдаст её снова. Поэтому обработчик должен давать тот же результат при повторе: уникальный ключ операции в базе (unique constraint), проверка статуса, идемпотентный ключ у платёжного провайдера.

  • Задача не теряется, в этом смысл at-least-once. Kafka тоже даёт at-least-once по умолчанию.
  • Очередь ничего не знает о внешних эффектах и не откатывает их.
  • At-least-once значит «один или больше раз».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.