Поделиться через


Проектирование Azure Functions для идентичных входных данных

Реальность архитектуры на основе событий и сообщений определяет необходимость принимать идентичные запросы при сохранении целостности данных и стабильности системы.

Чтобы проиллюстрировать, рассмотрим кнопку вызова лифта. Когда вы нажимаете кнопку, она загорается, и лифт доставляется на ваш этаж. Через несколько минут кто-то присоединяется к вам в лобби. Этот человек улыбается вам и нажимает освещенную кнопку во второй раз. Вы улыбаетесь в ответ и усмехаетесь себе, как вы напоминаете себе, что команда вызова лифта идемпотентна.

Нажатие кнопки вызова лифта второе, третье или четвертое время не имеет отношения к окончательному результату. При нажатии кнопки, независимо от количества нажатий, лифт отправляется на ваш этаж. Идемпотентные системы, такие как лифт, приводят к тому же результату независимо от того, сколько раз выдается идентичных команд.

Когда речь идет о создании приложений, рассмотрите следующие сценарии:

  • Что произойдет, если приложение управления инвентаризацией пытается удалить один и тот же продукт несколько раз?
  • Как работает ваше приложение для управления персоналом, если существует несколько запросов на создание записи сотрудника для одного человека?
  • Куда идут деньги, если ваше банковское приложение получает 100 запросов на тот же вывод средств?

Существует множество контекстов, в которых запросы к функции могут получать идентичные команды. К некоторым ситуациям относятся:

  • Политики повтора запросов отправляют один и тот же запрос несколько раз.
  • Кэшированные команды перепроигрываются в приложении.
  • Ошибки приложения при отправке нескольких идентичных запросов.

Чтобы защитить целостность данных и работоспособность системы, идемпотентное приложение содержит логику, которая может содержать следующие действия:

  • Проверка наличия данных перед попыткой выполнить удаление.
  • Проверка наличия данных перед попыткой выполнить действие создания.
  • Согласование логики, которая создает итоговую согласованность в данных.
  • Элементы управления параллелизмом.
  • Обнаружение дублирования.
  • Проверка свежести данных.
  • Логика защиты для проверки входных данных.

В конечном счете достигается идемпотентность, гарантируя, что данное действие возможно и выполняется только один раз.

Дальнейшие шаги