2 мин

Слово дня — Идемпотентность

Краткий ликбез про идемпотентность: что это за свойство операций, зачем оно нужно для надёжности систем и где применяется — от HTTP-методов до баз данных и блокчейна.

Слово дня — Идемпотентность

Утро доброе! Часто ли ты встречаешь этот термин? Подозреваю, что нет — разве что в универе). Но когда мы поймали баг в базовом CRUD-модуле Tarantool, вспоминать про идемпотентность пришлось не раз: по каждой операции надо было доказать, идемпотентная она или нет. Держи короткий ликбез — надеюсь, пригодится.

Идемпотентность — свойство операции, при котором повторный вызов не меняет состояние объекта по сравнению с первым. Выполнил один раз, выполнил десять — результат тот же. Звучит академично, но именно на этом держатся надёжность и безопасность во многих областях IT.

Происхождение и применение

Термин пришёл из математики и прижился в IT: программирование, системное администрирование, тестирование, анализ данных — везде своё применение.

Применение у СА, тестировщиков, разработчиков и девопсов

  • СА — при проектировании систем, особенно распределённых, где несколько операций дёргают одни и те же данные.
  • Тестировщику — чтобы убедиться, что повторный прогон не выдаёт сюрпризов: баг это или фича))
  • Разработчику — ради целостности данных: чтобы ретрай не поломал состояние.
  • DevOps — чтобы повторный прогон плейбука не наплодил лишних изменений (на этом стоит весь Ansible).

И так далее — не растекаюсь, обещал же короткую статейку.

Применение к базам данных

В реляционных базах её обеспечивают уникальные ключи и транзакции с ACID. В NoSQL и кэшах вроде Redis — команды, которые дают один и тот же итог при повторной записи: тот же SET перезаписывает значение, а не плодит дубли.

Примеры технических реализаций

  • Веб-сервисы опираются на идемпотентные методы HTTP: GET и PUT возвращают один результат, сколько запрос ни повторяй.
  • В распределённых системах уникальный идентификатор запроса (тот же UUID) помогает обработать его ровно один раз — даже если клиент отправил его пять раз подряд.
  • В блокчейне неизменяемость блоков — тоже своего рода идемпотентность: однажды добавленные в цепочку данные уже не меняются.

Вывод

Идемпотентность — фундамент надёжных систем. Она гарантирует, что повтор операции ничего не сломает, а состояние останется предсказуемым. Отсюда и любовь к ней везде — от разработки до администрирования: меньше сюрпризов, меньше ночных инцидентов.


Из моего Telegram-канала @it_underside.

Ваш ДПУПП

Похожие статьи