Sono un Trainer MCT e Consulente IT freelancer; particolarmente sensibile alle tematiche Mobile e Cloud, sono attivo nel mondo Community soprattutto su Windows Azure e Windows Phone. Mi è stato riconosciuto l’MVP per due anni consecutivi e sono pluricertificato su diversi vendor (MS, Sun, Apple, Cisco, IBM).
Il concetto di idempotenza in informatica è ampiamente abusato e stravolto nel suo significato originale. In matematica l’idempotenza è una caratteristica di una funzione tale che per un dato input X si ha: F(x)=F(F(x)).
In informatica ci si accontenta di definire l’idempotenza come la proprietà di una funzione o di una procedura di produrre lo stesso risultato se invocata N volte consecutivamente con lo stesso input.
Questo è un modo elegante (ma alla lontana) di approcciare i pattern architetturali di Lavoro Asincrono in un contesto Cloud. Immaginiamoci infatti il classico scenario (sotto), in cui un Web Role accumuli delle grandi immagini da elaborare e un Worker Role le voglia processare in modo disconnesso e asincrono.
Si vorrà garantire che ogni foto venga processata una e una sola volta, senza produrre effetti collaterali. Vediamo perchè Azure Storage Queue forzi l’utente a cancellare manualmente una entry dalla coda:
Cosa succede in questo scenario se ci fosse il comune meccanismo di Read-and-Delete? Semplicemente verrebbe perso un dato, senza possibilità di rielaborarlo. Per questo Azure forza l’utente a cancellare il dato una volta completata la computazione; altrimenti il messaggio tornerà visibile dopo 30 secondi (configurabile). Tutto questo purtroppo non basta per garantire idempotenza, visto che può accadere ancora questo scenario:
Per cui è anche necessario, dal punto di vista della logica applicativa, prevedere un meccanismo di compensazione, per processare una richiesta una e una sola volta.