Utforma Azure Functions för identiska indata

Verkligheten i händelsedriven och meddelandebaserad arkitektur avgör behovet av att acceptera identiska begäranden samtidigt som dataintegriteten och systemstabiliteten bevaras.

För att illustrera kan du överväga en hisssamtalsknapp. När du trycker på knappen lyser den upp och en hiss skickas till ditt golv. En stund senare ansluter sig någon annan till dig i lobbyn. Den här personen ler mot dig och trycker på den upplysta knappen en andra gång. Du ler tillbaka och skrattar åt dig själv när du påminns om att kommandot att ringa en hiss är idempotent.

Att trycka på en hisssamtalsknapp en sekund, tredje eller fjärde gången har ingen betydelse för slutresultatet. När du trycker på knappen, oavsett antal gånger, skickas hissen till ditt golv. Idempotent-system, som hissen, resulterar i samma resultat oavsett hur många gånger identiska kommandon utfärdas.

När det gäller att skapa program bör du tänka på följande scenarier:

  • Vad händer om inventeringskontrollprogrammet försöker ta bort samma produkt mer än en gång?
  • Hur fungerar ditt personalprogram om det finns fler än en begäran om att skapa en medarbetarpost för samma person?
  • Vart går pengarna om din bankapp får 100 förfrågningar om att göra samma uttag?

Det finns många kontexter där begäranden till en funktion kan ta emot identiska kommandon. Några situationer är:

  • Återförsöksprinciper som skickar samma begäran många gånger.
  • Cachelagrade kommandon spelas upp igen till programmet.
  • Programfel vid sändning av flera identiska begäranden.

För att skydda dataintegritet och systemhälsa innehåller ett idempotent program logik som kan innehålla följande beteenden:

  • Verifiera att det finns data innan du försöker köra en borttagning.
  • Kontrollerar om data redan finns innan du försöker köra en skapandeåtgärd.
  • Avstämning av logik som skapar slutlig konsekvens i data.
  • Samtidighetskontroller.
  • Dupliceringsidentifiering.
  • Validering av dataaktualitet.
  • Skydda logiken för att verifiera indata.

I slutändan uppnås idempotens genom att säkerställa att en viss åtgärd är möjlig och bara körs en gång.

Nästa steg