Progettazione di Funzioni di Azure per l'input identico
La realtà dell'architettura basata su eventi e basata su messaggi determina la necessità di accettare richieste identiche mantenendo l'integrità dei dati e la stabilità del sistema.
Per illustrare, prendere in considerazione un pulsante di chiamata all'ascensore. Quando si preme il pulsante, si accende e un ascensore viene inviato al piano. Qualche istante dopo, un altro ti unisce nella hall. Questa persona sorride a te e preme il pulsante illuminato una seconda volta. Sorridete e troncare da soli mentre vi ricordate che il comando per chiamare un ascensore è idempotente.
Premendo un pulsante di chiamata di ascensore un secondo, terzo o quarto tempo non ha alcun effetto sul risultato finale. Quando si preme il pulsante, indipendentemente dal numero di volte, l'ascensore viene inviato al piano. Idempotenti sistemi, come l'ascensore, comportano lo stesso risultato, indipendentemente dal numero di volte in cui vengono emessi comandi identici.
Quando si tratta di creare applicazioni, prendere in considerazione gli scenari seguenti:
- Cosa accade se l'applicazione di controllo dell'inventario tenta di eliminare lo stesso prodotto più di una volta?
- Come si comporta l'applicazione delle risorse umane se è presente più di una richiesta per creare un record dipendente per la stessa persona?
- Dove vanno i soldi se l'app bancaria ottiene 100 richieste per effettuare lo stesso prelievo?
Esistono molti contesti in cui le richieste a una funzione possono ricevere comandi identici. Alcune situazioni includono:
- Riprovare i criteri che inviano la stessa richiesta molte volte.
- I comandi memorizzati nella cache vengono riprodotti nell'applicazione.
- Errori dell'applicazione che inviano più richieste identiche.
Per proteggere l'integrità dei dati e l'integrità del sistema, un'applicazione idempotente contiene la logica che può contenere i comportamenti seguenti:
- Verifica dell'esistenza dei dati prima di provare a eseguire un'eliminazione.
- Verifica se i dati esistono già prima di provare a eseguire un'azione di creazione.
- Logica di riconciliazione che crea coerenza finale nei dati.
- Controlli di concorrenza.
- Rilevamento della duplicazione.
- Convalida della freschezza dei dati.
- Proteggere la logica per verificare i dati di input.
In definitiva, la idempotenza viene ottenuta assicurando che un'azione specificata sia possibile e venga eseguita una sola volta.