Слово дня — Идемпотентность
Краткий ликбез про идемпотентность: что это за свойство операций, зачем оно нужно для надёжности систем и где применяется — от HTTP-методов до баз данных и блокчейна.
Утро доброе! Часто ли ты встречаешь этот термин? Подозреваю, что нет — разве что в универе). Но когда мы поймали баг в базовом CRUD-модуле Tarantool, вспоминать про идемпотентность пришлось не раз: по каждой операции надо было доказать, идемпотентная она или нет. Держи короткий ликбез — надеюсь, пригодится.
Идемпотентность — свойство операции, при котором повторный вызов не меняет состояние объекта по сравнению с первым. Выполнил один раз, выполнил десять — результат тот же. Звучит академично, но именно на этом держатся надёжность и безопасность во многих областях IT.
Происхождение и применение
Термин пришёл из математики и прижился в IT: программирование, системное администрирование, тестирование, анализ данных — везде своё применение.
Применение у СА, тестировщиков, разработчиков и девопсов
- СА — при проектировании систем, особенно распределённых, где несколько операций дёргают одни и те же данные.
- Тестировщику — чтобы убедиться, что повторный прогон не выдаёт сюрпризов: баг это или фича))
- Разработчику — ради целостности данных: чтобы ретрай не поломал состояние.
- DevOps — чтобы повторный прогон плейбука не наплодил лишних изменений (на этом стоит весь Ansible).
И так далее — не растекаюсь, обещал же короткую статейку.
Применение к базам данных
В реляционных базах её обеспечивают уникальные ключи и транзакции с ACID. В NoSQL и кэшах вроде Redis — команды, которые дают один и тот же итог при повторной записи: тот же SET перезаписывает значение, а не плодит дубли.
Примеры технических реализаций
- Веб-сервисы опираются на идемпотентные методы HTTP: GET и PUT возвращают один результат, сколько запрос ни повторяй.
- В распределённых системах уникальный идентификатор запроса (тот же UUID) помогает обработать его ровно один раз — даже если клиент отправил его пять раз подряд.
- В блокчейне неизменяемость блоков — тоже своего рода идемпотентность: однажды добавленные в цепочку данные уже не меняются.
Вывод
Идемпотентность — фундамент надёжных систем. Она гарантирует, что повтор операции ничего не сломает, а состояние останется предсказуемым. Отсюда и любовь к ней везде — от разработки до администрирования: меньше сюрпризов, меньше ночных инцидентов.
Из моего Telegram-канала @it_underside.
Ваш ДПУПП
Похожие статьи
Event Storming без иллюзий: плюсы, минусы и стикер на лбу
Личный разбор Event Storming по итогам не одного «штурма событий»: где он реально спасает команду, где превращается в бесполезную стикеротерапию и что нужно, чтобы сессия не улетела в трубу.
Форматы обмена данными: от JSON до protobuf
Большой разбор форматов обмена данными: где живёт JSON, зачем нужен XML, чем хорош YAML и когда пора переходить на бинарные Protobuf, Avro и MessagePack — с привязкой к API и брокерам сообщений.
UML: что за зверь такой и почему аналитики его избегают
UML умеет визуализировать, специфицировать и документировать систему — а в реальных командах его почти не встретишь. Разбираемся, зачем он нужен, почему аналитики его сторонятся и где он всё-таки окупается.