Выбор ответа Middle Кеш и очереди спрашивают часто обновлено
At-least-once и идемпотентность
Вопрос
Воркер списал деньги и упал до подтверждения задачи в очереди. Очередь даёт at-least-once. Что произойдёт и что нужно было сделать?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Задача придёт снова и спишет повторно, нужен ключ идемпотентности. Без подтверждения брокер считает задачу невыполненной и выдаст её снова.
Варианты ответа
- Задача потеряется; нужно было использовать Kafka с подтверждением
- Ничего: at-least-once означает ровно один раз при сбое воркера
- Очередь сама откатит списание через компенсирующую задачу
- Задача придёт снова и спишет повторно, нужен ключ идемпотентностиправильный ответ
Разбор
Без подтверждения брокер считает задачу невыполненной и выдаст её снова. Поэтому обработчик должен давать тот же результат при повторе: уникальный ключ операции в базе (unique constraint), проверка статуса, идемпотентный ключ у платёжного провайдера.
- Задача не теряется, в этом смысл at-least-once. Kafka тоже даёт at-least-once по умолчанию.
- Очередь ничего не знает о внешних эффектах и не откатывает их.
- At-least-once значит «один или больше раз».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.