Projektowanie Azure Functions pod kątem identycznych danych wejściowych

Rzeczywistość architektury opartej na zdarzeniach i komunikatach określa potrzebę akceptowania identycznych żądań przy zachowaniu integralności danych i stabilności systemu.

Aby zilustrować, rozważ przycisk wywołania windy. Gdy naciskasz przycisk, świeci, a winda jest wysyłana na podłogę. Kilka chwil później ktoś inny dołącza do Ciebie w holu. Ta osoba uśmiecha się do ciebie i naciska oświetlony przycisk po raz drugi. Uśmiechasz się i śmiejesz się do siebie, jak przypominasz, że polecenie wywołania windy jest idempotentne.

Naciśnięcie przycisku wywołania windy po raz drugi, trzeci lub czwarty nie ma wpływu na końcowy wynik. Po naciśnięciu przycisku, niezależnie od liczby razy, winda zostanie wysłana na podłogę. Systemy idempotentne, takie jak winda, powodują ten sam wynik bez względu na liczbę wydań identycznych poleceń.

Jeśli chodzi o tworzenie aplikacji, rozważ następujące scenariusze:

  • Co się stanie, jeśli aplikacja kontroli spisu spróbuje usunąć ten sam produkt więcej niż raz?
  • Jak działa aplikacja zasobów ludzkich, jeśli istnieje więcej niż jedno żądanie utworzenia rekordu pracownika dla tej samej osoby?
  • Gdzie idą pieniądze, jeśli twoja aplikacja bankowa otrzyma 100 żądań, aby dokonać tego samego wypłaty?

Istnieje wiele kontekstów, w których żądania do funkcji mogą odbierać identyczne polecenia. Niektóre sytuacje obejmują:

  • Zasady ponawiania próby wysyłania tego samego żądania wiele razy.
  • Buforowane polecenia są odtwarzane w aplikacji.
  • Błędy aplikacji wysyłające wiele identycznych żądań.

Aby chronić integralność danych i kondycję systemu, aplikacja idempotentna zawiera logikę, która może zawierać następujące zachowania:

  • Sprawdzenie istnienia danych przed próbą wykonania usunięcia.
  • Sprawdź, czy dane już istnieją przed próbą wykonania akcji tworzenia.
  • Uzgadnianie logiki, która tworzy spójność ostateczną w danych.
  • Kontrolki współbieżności.
  • Wykrywanie duplikacji.
  • Walidacja świeżości danych.
  • Ochrona logiki w celu zweryfikowania danych wejściowych.

Ostatecznie idempotencyjność jest osiągana przez zapewnienie, że dana akcja jest możliwa i jest wykonywana tylko raz.

Następne kroki