Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Реальность архитектуры на основе событий и сообщений определяет необходимость принимать идентичные запросы при сохранении целостности данных и стабильности системы.
Чтобы проиллюстрировать, рассмотрим кнопку вызова лифта. Когда вы нажимаете кнопку, она загорается, и лифт доставляется на ваш этаж. Через несколько минут кто-то присоединяется к вам в лобби. Этот человек улыбается вам и нажимает освещенную кнопку во второй раз. Вы улыбаетесь в ответ и усмехаетесь себе, как вы напоминаете себе, что команда вызова лифта идемпотентна.
Нажатие кнопки вызова лифта второе, третье или четвертое время не имеет отношения к окончательному результату. При нажатии кнопки, независимо от количества нажатий, лифт отправляется на ваш этаж. Идемпотентные системы, такие как лифт, приводят к тому же результату независимо от того, сколько раз выдается идентичных команд.
Когда речь идет о создании приложений, рассмотрите следующие сценарии:
- Что произойдет, если приложение управления инвентаризацией пытается удалить один и тот же продукт несколько раз?
- Как работает ваше приложение для управления персоналом, если существует несколько запросов на создание записи сотрудника для одного человека?
- Куда идут деньги, если ваше банковское приложение получает 100 запросов на тот же вывод средств?
Существует множество контекстов, в которых запросы к функции могут получать идентичные команды. К некоторым ситуациям относятся:
- Политики повтора запросов отправляют один и тот же запрос несколько раз.
- Кэшированные команды перепроигрываются в приложении.
- Ошибки приложения при отправке нескольких идентичных запросов.
Чтобы защитить целостность данных и работоспособность системы, идемпотентное приложение содержит логику, которая может содержать следующие действия:
- Проверка наличия данных перед попыткой выполнить удаление.
- Проверка наличия данных перед попыткой выполнить действие создания.
- Согласование логики, которая создает итоговую согласованность в данных.
- Элементы управления параллелизмом.
- Обнаружение дублирования.
- Проверка свежести данных.
- Логика защиты для проверки входных данных.
В конечном счете достигается идемпотентность, гарантируя, что данное действие возможно и выполняется только один раз.