Significato e differenza tra Stateless e Stateful in informatica

Significato e differenza tra Stateless e Stateful in informatica

Cosa significa Stateless e Stateful?

Un server senza stati (Stateless Server) è un server che tratta ogni richiesta come una transazione indipendente scorrelata da ogni precedente richiesta. Il vantaggio più grande di questa proprietà è che semplifica di molto la progettazione del server, perchè esso non ha bisogno nè di tenere in relazione transazioni diverse, nè di allocare dinamicamente un’area di memoria dedicata o di preoccuparsi di liberare lo spazio allocato se il client s’interrompe nel mezzo della transazione. Ovviamente ci sono anche degli svantaggi, quali:

  • dover includere un quantitativo di informazioni maggiore per ogni richiesta;
  • il server deve ogni volta interpretare tutte le informazioni.

Un esempio di un server senza stati è un server del World Wide Web (fatta eccezione dei cookies): questi prendono come input la richiesta (URL) che specifica completamente il documento richiesto e non hanno bisogno di nessun contesto particolare o memoria allocata durante una precedente richiesta. Questo tipo di server contrasta con un tradizionale server FTP, che gestisce una sessione interattiva con l’utente. Nel caso di una richiesta per un file che si trova sul server FTP, si assume che l’utente si sia precedentemente autenticato e che la directory corrente e la modalità di trasferimento del file siano già state definite. Un server con stati (Stateful Server) ha una tabella che permette di registrare in modo incrementale le informazioni e lo stato delle interazioni in corso con i client, incluse le risposte ad ogni richiesta, in modo che il server possa tener traccia di tutte le richieste effettuate dal client. Il vantaggio di un server con stati è che i messaggi scambiati sono di dimensioni minori e che sono trattati in modo più efficiente. Alcuni svantaggi sono invece dovuti ai possibili problemi che il client incontra: nel caso in cui questo incorra in interruzioni ripetute e frequenti, la grande quantità di informazioni che devono essere gestite dal server possono peggiorare le prestazioni di quest’ultimo. L’esempio migliore di un server con stati è un File Server remoto.

Significato e differenza tra Stateless e Stateful in informatica

Quale soluzione scegliere?

La maggior parte delle applicazioni e dei sistemi operativi è tradizionalmente stateful, ma è evidente come la diffusione delle applicazioni cloud native abbia favorito la diffusione delle applicazioni stateless, in quanto più facilmente scalabili in funzione dei carichi di lavoro. Abbiamo accennato, ed approfondiremo nel corso del successivo paragrafo come la containerizzazione consenta di utilizzare in cloud entrambe le tecnologie facendo tesoro delle loro rispettive qualità.

Senza perderci in inutili divagazioni filosofico-concettuali, la domanda da porsi è: perché dover scegliere? Una volta noto il tipo di applicazione che si intende progettare e l’uso che si intende farne, appare decisamente intuitivo come la condizione stateless si riveli particolarmente idonea quando le informazioni sono necessarie in modo transitorio e limitato all’esecuzione di una singola sessione. Se l’applicazione deve invece conservare in memoria ciò che accade tra una sessione iniziale e quelle successive, la condizione stateful è la più appropriata per via della sua definizione tecnologica.

Per offrire una percezione concreta di quali e quante possano essere gli impieghi delle applicazioni stateless e stateful, possiamo formulare una rapida sintesi. Pur non esaustiva, appare prontamente evidente quali contesti risultino maggiormente funzionali alla condizione stateless e quali invece siano espressamente orientate alla presenza di uno stato ben specifico, che deve essere garantito dall’accesso a dati persistenti.

Differenza tra Stateless e Stateful Server

Confrontando da un punto di vista analitico i server con e senza stati possiamo notare che:

  • Un server con stati tiene traccia dei dati del client (dati) fra una richiesta e la successiva.
  • Un server senza stati non mantiene nessuna informazione sullo stato; ad esempio, usando un File Server che non mantenga gli stati, per ogni richiesta il client devrebbe indicare il nome completo del file, specificando dove leggere e scrivere, riautenticandosi ad ogni richiesta.
  • Usando un File Server con stati il client pùo inviare meno informazioni per ogni richiesta, diventando così il modello più semplice.

D’altro canto, un server senza stati è più robusto e ad esempio:

  • le connessioni perse non lasciano un file in uno stato invalido;
  • riavviando il server non viene persa nessuna informazione;
  • un riavvio del client non causa nessuna confusione in un server senza stati.

Esempi di applicazioni stateless

  • Applicazioni dipendenti da una singola funzione, come quelle eseguite su molti device connessi a sistemi IoT, che rispondono ad uno specifico evento, e soltanto a quello
  • Web print e server CDN (Content Distribution Network), utilizzati per rendere più rapida ed efficiente la distribuzione di contenuti online, soprattutto nei servizi che richiedono uno streaming di dati continuativo
  • Server che elaborano le richieste soltanto in funzione di una specifica richiesta (es. ricerca online), senza richiedere alcuna conoscenza relativa a precedenti richieste e pertanto non necessitano di salvare alcuna informazione di stato
  • Differenti richieste elaborate da differenti server, tra loro funzionalmente indipendenti
  • Applicazioni basate su microservizi eseguite in modalità serverless, in cui l’allocazione delle risorse si dimostra scalabile
  • Applicazioni basate su microservizi eseguite su architettura serverless, in cui l’allocazione delle risorse necessarie per eseguire i carichi di lavoro sono estremamente scalabili.

Esempi di applicazioni stateful

  • Sistemi operativi e applicazioni installate in locale su server e client
  • Database e sistemi di dati che prevedono la loro conservazione persistente
  • Applicazioni basate sulle transazioni, come il banking online
  • Mail server
  • Server che elaborano richieste a loro volta basate su una condizione di stato relativa ad una richiesta precedentemente svolta. Tramite l’accesso ad alcuni dati persistenti, il server deve necessariamente usufruire di uno stato precedente
  • Sistemi server-client in cui viene fatto riferimento sempre agli stessi server, che condividono i dati necessari a garantire la presenza di stato richiesta dalle applicazioni.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *