Applicazioni stateless e applicazioni stateful

Applicazioni stateless e applicazioni stateful


Nell’ultima versione rilasciata (10.7.0) di Wavemaker Online e Wavemaker Enterprise, si sono inserite features in cui appaiono già grandi i segnali per cui anche le applicazioni a micro-servizi vengono sempre più considerate come applicazioni professionali dalle opinioni degli sviluppatori che accettano l’idea di operare in modo ibrido tra un coding puntuale e professionale e un approccio meno profondo ma più orientato all’accelerazione e al time to market.
Da un punto di vista tecnologico, scrivere applicazioni professionali con strumenti low-code comporta la comprensione di alcuni concetti che non possono essere lasciati al caso.

Uno di questi riguarda lo stato delle applicazioni.

Lavorare con applicazioni disaccoppiate, globalmente distribuite e scalabili comporta l’adozione di strumenti e metodi volti a visualizzare l’applicazione nella sua interezza e gestirne gli stati di sessione singolarmente; è questo che permette un puntuale monitoraggio stabilità e scalabilità.

Ci sono tanti argomenti da considerare quando si lavora con applicazioni cloud-native, l’utilizzo di code di processi per il disaccoppiamento, basi di dati che devono essere utilizzate come SaaS perché adeguate per i tipi di dati più vicini al cliente o alla parte di progetto in corso (alcuni DB per l’IoT devono essere database adeguati per le serie temporali), i provider di autenticazione e identificazione devono essere gestiti esternamente via OpenID connect, anche qui in SaaS. Sono tanti gli aspetti che rendono una applicazione stabile e professionale tanto da potersi chiamare cloud-native.

Cerchiamo intanto di comprendere cosa è una applicazione “senza stato” (stateless) e cosa è un o stato.

La definizione su Wikipedia dice

Una “Stateless App” è un programma applicativo che NON salva i dati generati dal client in una sessione per l’impiego di questi nella prossima sessione con quel client.

Una “Stateful App” invece salva i dati internamente a ciascuna sessione client e li utilizza la volta successiva che il client effettua una richiesta.

Immagine per post

In altre parole, tutto ciò che legge o memorizza le informazioni del suo “Stato” da utilizzare in seguito è un’applicazione Stateful. Per Stato mi riferisco a qualsiasi condizione che possa cambiare da un’istanza (sessione) a un’altra. Un esempio molto rozzo di un’applicazione Stateless potrebbe essere una calcolatrice che inizia sempre con zero senza memorizzare i calcoli o i dati di prima. Allo stesso modo, il terminale del computer è più un’applicazione con stato (stateful) in quanto può memorizzare i comandi eseguiti in precedenza e alcuni dati.

Le applicazioni Stateful potrebbero non memorizzare tutte le tue informazioni in modo persistente. Le informazioni archiviate si basano spesso sull’applicazione e sulle condizioni di cui necessita o opera.

La maggior parte delle applicazioni che potremmo utilizzare nella nostra vita quotidiana sono in qualche modo app con stato. Per usare un eufemismo e in termini di web, qualsiasi applicazione che richiede sessione o accesso è un’applicazione con stato poiché per ogni chiamata API recupererebbe le informazioni dell’utente per eseguire i calcoli.

Un’applicazione con stato necessita di una memoria persistente per poter memorizzare il proprio stato e leggere quindi questo in un secondo momento.


Perché usare applicazioni Stateless?

Le applicazioni con stato sono state sostituite dalle moderne applicazioni senza stato perché le applicazioni con stato lasciavano molte lacune ancora aperte e con difficile risposta, come:

  • Un’applicazione stateful ha creato una connessione con l’archivio persistente per leggere e archiviare i dati. Per quanto tempo dovrebbe essere aperta la connessione?
  • Quando si ha a che fare con le sessioni, ad ogni richiesta si verificano molte transazioni che devono essere mantenute.
  • Come ci assicuriamo che la connessione sia presente o si è scollegata?
  • Come conservare i dati dell’utente in caso di errore di rete o dello storage di archiviazione?
  • In un’applicazione con stato stai essenzialmente dicendo che il client è talmente stupido da non poter memorizzare nessuna informazione.

La risposta a tutte queste domande  viene fornita quando sia cambiano le logiche di una applicazione Sateful verso logiche Stateless che ora divengono le base di una architettura software per il mondo cloud-native.


Vantaggi del paradigma stateless

  • Puoi semplicemente ridimensionare un’applicazione, scalarla senza problemi e distribuendola su più server. Ridimensiona magnificamente in orizzontale.
  • Le app stateless possono essere memorizzate nella cache facilmente e quindi possono essere più veloci.
  • Necessitano di meno spazio di archiviazione
  • Non è necessario associare un client al server poiché in ogni richiesta il client fornisce tutte le informazioni necessarie affinché il server possa agire su di esso.

Conclusione

La maggior parte dei software che sono diventati Micro-servizi e utilizzano la progettazione API REST, sono già applicazioni stateless . La Stateless-ness dell’applicazione è la base su cui fanno affidamento la maggior parte dei concetti web e altri come il design RESTful. Una buona comprensione e il vantaggio di Stateless rispetto a Stateful è molto importante per soddisfare le esigenze sempre più esigenti degli utenti al giorno d’oggi.