Что означает идемпотентность операции?
- Что такое идемпотентная операция?
Операция идемпотентна, если состояние после одного и нескольких выполнений одинаково — повтор безопасен.
- Нужна, потому что сеть ненадёжна и клиент повторяет запросы без ответа
- Речь о состоянии, а не об ответе: второй DELETE вернёт 404, но объекта нет в обоих случаях
- «Установить статус» идемпотентно, «прибавить к балансу» — нет
А ещё Неидемпотентное делают идемпотентным ключом идемпотентности
Подробно
Свойство критично потому, что сеть ненадёжна: не получив ответа, клиент не знает, выполнилась операция или нет, и повторяет запрос. Если операция идемпотентна, повтор безвреден. Обратите внимание, что речь именно о состоянии системы, а не об одинаковом ответе: повторное удаление вернёт другой код, но состояние будет тем же — объекта нет.
Что хотят услышать
- Определение через состояние.
- Зачем: повторы при ненадёжной сети.
- Примеры идемпотентных и неидемпотентных операций.
Частые ошибки
- Требовать одинакового ответа вместо одинакового состояния.
- Считать идемпотентность синонимом атомарности.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Повтор с теми же данными не меняет итог по сравнению с однократным вызовом
- ✗Операция выполняется атомарно и не может прерваться
- ✗Операция всегда возвращает одинаковый ответ независимо от текущего состояния системы
- ✗Операция не может завершиться ошибкой
Что спросят дальше
- Как сделать идемпотентным создание ресурса?
- Почему это свойство обязательно при повторах и at-least-once доставке?
Разбор темы
- Надёжность и идемпотентность
Управляемая деградация вместо каскада, таймауты и бюджет времени запроса, безопасные ретраи и их мультипликация, идемпотентность как фундамент, предохранитель, отсеки и сброс нагрузки, transactional outbox вместо 2PC.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.