Проектирование функций Azure для идентичных входных данныхDesigning Azure Functions for identical input

Реальность, основанная на событиях и архитектуре на основе сообщений, определяет необходимость принятия идентичных запросов при сохранении целостности данных и стабильности системы.The reality of event-driven and message-based architecture dictates the need to accept identical requests while preserving data integrity and system stability.

Для иллюстрации рассмотрим кнопку лифтного вызова.To illustrate, consider an elevator call button. По мере нажатия кнопки она высветится, и в этаж будет отправлен Лифт.As you press the button, it lights up and an elevator is sent to your floor. Чуть позже, кто-то другой Присоединяйтесь к вам в зале ожидания.A few moments later, someone else joins you in the lobby. Этот человек имеет свое значение и нажимает кнопку с освещением во второй раз.This person smiles at you and presses the illuminated button a second time. Вы не захотите, чтобы вы чуккле, что команда для вызова лифта — идемпотентными.You smile back and chuckle to yourself as you're reminded that the command to call an elevator is idempotent.

Нажатие кнопки лифта в качестве второго, третьего или четвертого времени не повлияет на окончательный результат.Pressing an elevator call button a second, third, or fourth time has no bearing on the final result. При нажатии кнопки, независимо от числа раз, Лифт посылается в пол.When you press the button, regardless of the number of times, the elevator is sent to your floor. Идемпотентными Systems, как в лифте, приводят к тому же результату независимо от того, сколько раз выдаются идентичные команды.Idempotent systems, like the elevator, result in the same outcome no matter how many times identical commands are issued.

Когда дело доходит до создания приложений, учитывайте следующие сценарии.When it comes to building applications, consider the following scenarios:

  • Что произойдет, если приложение управления запасами попытается удалить один и тот же продукт несколько раз?What happens if your inventory control application tries to delete the same product more than once?
  • Как работает приложение-персонал, если существует несколько запросов на создание записи сотрудника для одного и того же человека?How does your human resource application behave if there is more than one request to create an employee record for the same person?
  • Где происходит возврат денег, если приложение банковской работы получает 100 запросов для получения того же изъятия?Where does the money go if your banking app gets 100 requests to make the same withdrawal?

Существует много контекстов, в которых запросы к функции могут принимать идентичные команды.There are many contexts where requests to a function may receive identical commands. Ниже перечислены некоторые ситуации.Some situations include:

  • Политики повтора, отправляющие один и тот же запрос несколько разRetry policies sending the same request many times
  • Кэшированные команды, воспроизводимые в приложенииCached commands replayed to the application
  • Ошибки приложения при отправке нескольких идентичных запросовApplication errors sending multiple identical requests

Для защиты целостности данных и работоспособности системы приложение идемпотентными содержит логику, которая может содержать следующие варианты поведения:To protect data integrity and system health, an idempotent application contains logic that may contain the following behaviors:

  • Проверка существования данных перед попыткой выполнить удалениеVerifying of the existence of data before trying to execute a delete
  • Проверка наличия данных перед попыткой выполнить действие созданияChecking to see if data already exists before trying to execute a create action
  • Согласование логики, которая создает окончательную согласованность данныхReconciling logic that creates eventual consistency in data
  • Элементы управления параллелизмомConcurrency controls
  • Обнаружение дубликатовDuplication detection
  • Проверка актуальности данныхData freshness validation
  • Логика защиты для проверки входных данныхGuard logic to verify input data

В конечном итоге идемпотентности достигается путем обеспечения возможности выполнения определенного действия и выполняется только один раз.Ultimately idempotency is achieved by ensuring a given action is possible and is only executed once.