Panoramica
Possiamo considerare lo stato di un'applicazione (o di ogni altro elemento) come la condizione o qualità di esistenza in un determinato momento. Un elemento si definisce stateful o stateless in base a due fattori: per quanto tempo salva lo stato delle interazioni e qual è la modalità di memorizzazione di tale informazione. Un'applicazione stateful memorizza lo stato o il contesto delle sue interazioni con utenti, sistemi o componenti. Lo stato è memorizzato su una soluzione di storage durevole, così l'applicazione funzionerà allo stesso modo in caso di riavvio. La differenza principale tra le applicazioni stateful e quelle stateless risiede nel fatto che le applicazioni stateful salvano informazioni passate e presenti mentre le applicazioni stateless no.
Cosa sono le applicazioni stateful?
Le applicazioni e i processi stateful conservano il proprio stato perché consentono agli utenti di archiviare, salvare e tornare a informazioni e processi già definiti attraverso la rete. Nelle applicazioni stateful, il server tiene traccia dello stato di ciascuna sessione o interazione e conserva informazioni sulle interazioni dell'utente e sulle sue richieste passate. Tali sessioni si possono riutilizzare più volte, come nel caso dei servizi di online banking o email. Vengono eseguite in riferimento alle transazioni precedenti e possono essere influenzate dagli eventi accaduti in precedenza. Per questo motivo le applicazioni stateful utilizzano gli stessi server ogni volta che elaborano la richiesta di un utente.
Anche se interrotta, una transazione stateful può riprendere dal punto di interruzione, poiché il contesto e la cronologia vengono memorizzati. Le applicazioni stateful tengono traccia della posizione delle finestre, delle preferenze nelle impostazioni e delle attività recenti. Possiamo paragonare le transazioni stateful a una conversazione continua e ricorrente con lo stesso interlocutore.
Scenari di utilizzo delle applicazioni stateful
- Applicazioni dedicate agli utenti: le applicazioni dedicate agli utenti, come le app di social media e i siti di e-commerce, tengono traccia della sessione di un utente loggato, incluse le sue preferenze o gli articoli che aggiunge al carrello.
- Sistemi IoT: un tipico sistema Internet of Things (IoT) invia, riceve e analizza continuamente i dati, nell'ambito di un ciclo di feedback. Sulla base dei dati salvati nella cronologia o acquisiti in tempo reale, un dispositivo reagisce ai continui cambiamenti di stato nel corso del tempo, come fa il sistema di riscaldamento di un'abitazione.
- Addestramento dei modelli AI/ML: i modelli di addestramento per l'intelligenza artificiale e il machine learning (AI/ML) apprendono perché acquisiscono e ricordano i dati immessi. Mantenere lo stato di apprendimento e archiviazione dei dati consente ai modelli di funzionare al massimo delle proprie capacità.
Risorse da Red Hat
Cosa sono le applicazioni stateless?
Un'applicazione o un processo stateless non conserva informazioni sulle interazioni precedenti di un utente. Non esistono dati memorizzati o riferimenti a transazioni passate. Ogni transazione viene effettuata da zero, come se fosse la prima. Le applicazioni stateless erogano un servizio o una funzione e utilizzano una rete CDN (Content Delivery Network), il web o i server di stampa per elaborare queste richieste a breve termine.
Ad esempio, una ricerca online per rispondere a un quesito è una transazione stateless. Si digita la domanda in un motore di ricerca e si preme Invio. Se la transazione viene interrotta o chiusa accidentalmente, se ne avvia una nuova. Una transazione stateless fornisce una sola risposta a una singola richiesta.
Scenari di utilizzo delle applicazioni stateless
- API REST: le interfacce di programmazione delle applicazioni (API) REST trasferiscono una rappresentazione dello stato di una risorsa a un soggetto che ne fa richiesta o a un endpoint. Ogni richiesta API è separata e il server non archivia le informazioni sulla richiesta precedente.
- Microservizi: i microservizi consentono a ogni funzione base di esistere in modo indipendente all'interno di un'applicazione, il che li rende compatibili sia con le applicazioni stateless che con le applicazioni stateful.
- Architetture serverless: le architetture serverless sono progettate per rispondere a eventi isolati e non memorizzano il contesto delle azioni precedenti. Per questo motivo, non hanno bisogno di salvare lo stato. L'architettura serverless è perfetta per le applicazioni stateless asincrone che possono essere avviate istantaneamente.
Stateful e stateless a confronto
La differenza fondamentale tra applicazioni stateful e stateless è una sola: se le applicazioni memorizzano le informazioni sullo stato attuale delle interazioni dell'utente sono dette stateful, se invece trattano ciascuna richiesta come una transazione indipendente e isolata sono dette stateless. Tra queste due tipologie di applicazioni esistono però anche altre differenze specifiche:
Memorizzazione dello stato
Le applicazioni stateful archiviano le informazioni sulle interazioni, spesso in un database o in una memoria distribuita. Le applicazioni stateless, invece, non memorizzano questi dati, per cui una transazione deve ricominciare ogni volta da zero.
Dipendenza dalla sessione
Nelle applicazioni stateful, ogni richiesta dipende dai dati o dal contesto delle interazioni e transazioni precedenti. Nelle applicazioni stateless, le sessioni sono più indipendenti perché le richieste non vengono memorizzate, ma ciò significa che bisogna fornire all'applicazione tutte le informazioni necessarie per processare la richiesta.
Dipendenza dallo storage
Le applicazioni stateful richiedono uno storage permanente (come i database e i sistemi di file distribuiti) alla base, e hanno bisogno di uno schema per sincronizzare i dati tra le istanze.
Utilizzo delle risorse
In linea generale le applicazioni stateless utilizzano meno risorse perché non devono memorizzare e gestire i dati delle sessioni. Viceversa, le applicazioni stateful dipendono maggiormente dallo storage, e quindi richiedono maggiore memoria e capacità di elaborazione per gestire e conservare le informazioni sulle sessioni.
Scalabilità
In genere le applicazioni stateless offrono maggiore scalabilità. Ciascuna richiesta è indipendente e può quindi essere gestita da uno qualsiasi dei server disponibili con il bilanciamento del carico. Nelle applicazioni stateful, invece, le istanze sono collegate più strettamente, con impatto negativo sulla scalabilità. Talvolta sono necessari pod o istanze più specifici in Kubernetes per bilanciare il carico e gestire lo stato e le sessioni.
Tolleranza di errore
Le applicazioni stateless presentano una maggiore tolleranza ai guasti poiché la perdita di un server non compromette le sessioni dell'utente. Nelle applicazioni stateful, invece, il malfunzionamento di un server può causare la perdita dei dati delle sessioni a meno che non si adottino misure aggiuntive, come la replica delle sessioni o il clustering.
Sviluppo
Le applicazioni stateless sono più semplici da sviluppare e aggiornare perché non occorre gestire lo stato su più richieste. Le applicazioni stateful invece richiedono una gestione puntuale dello stato e dei dati delle sessioni.
Container e stato
La maggior parte delle applicazioni che utilizziamo nel quotidiano è stateful, ma grazie al progresso tecnologico, ai microservizi e ai container, sta diventando sempre più semplice creare e distribuire le applicazioni nel cloud.
Insieme a cloud computing e microservizi, anche le applicazioni containerizzate, che siano stateful o stateless, registrano una diffusione sempre maggiore. I container sono unità di codice per un'applicazione che vengono raggruppate in pacchetti insieme alle rispettive librerie e dipendenze, in modo tale da agevolarne il trasferimento e l'esecuzione in qualsiasi ambiente (desktop, infrastruttura IT tradizionale o cloud).
Inizialmente i container erano progettati per essere stateless, uno stato che ben si adatta alle loro caratteristiche intrinseche di portabilità e flessibilità. Tuttavia, alla diffusione dei container è corrisposta una maggiore containerizzazione delle applicazioni stateful esistenti (con interventi quali riprogettazione e creazione di nuovi pacchetti per agevolare l'esecuzione a partire dai container). Ciò ha consentito di ottenere applicazioni che continuavano comunque a salvare informazioni e contesto, ma più flessibili e veloci grazie ai container.
Per questo motivo, in alcuni casi le applicazioni stateful possono apparire molto simili a quelle stateless e viceversa. Ad esempio, alcune applicazioni stateless, che non richiedono storage a lungo termine, consentono comunque al server di tenere traccia delle richieste provenienti dallo stesso client mediante i cookie.
Con la grande diffusione dei container, le aziende hanno iniziato a fornire soluzioni di gestione per i container stateless e stateful, basate sullo storage dei dati, Kubernetes e StatefulSets. Al giorno d'oggi la maggior parte dello storage per container è stateful e ormai non si tratta più di decidere se utilizzare o meno i container stateful, ma quando adottarli.
Perché scegliere Red Hat?
Stateful o stateless, Red Hat ha la soluzione adatta a qualsiasi tua applicazione. Che si desideri orchestrare container stateful con Red Hat® OpenShift® , (la nostra piattaforma applicativa per il cloud ibrido) o si punti a creare un ambiente unificato per lo sviluppo applicativo con Red Hat Application Foundations, Red Hat mette a disposizione dei suoi clienti l'assistenza di un pluripremiato servizio di supporto e il più vasto ecosistema di partner del settore.
Red Hat OpenShift offre una piattaforma applicativa unificata, indicata per ambienti cloud ibridi e orientata alla sicurezza che favorisce l'innovazione e aiuta le organizzazioni a modernizzare lo sviluppo e il deployment delle applicazioni e i processi operativi. Red Hat OpenShift include funzionalità compatibili con le applicazioni stateful come Kubernetes StatefulSets. Con Red Hat OpenShift Data Foundation è possibile gestire i dati stateful con una soluzione che offre un software defined storage e consente di eseguire il provisioning di volumi permanenti. Inoltre, Red Hat OpenShift funziona anche con applicazioni stateful come i flussi di lavoro DevOps. Red Hat OpenShift Pipelines è progettato per eseguire ogni passaggio della pipeline CI/CD, che consente di supportare e distribuire sia i carichi di lavoro stateful che quelli stateless.
Red Hat Application Foundations offre funzionalità quali orchestrazione e creazione dei servizi, connettività delle applicazioni, trasformazione dei dati, messaggistica in tempo reale, acquisizione delle modifiche ai dati e gestione delle API; il tutto associato a una piattaforma cloud native e a una toolchain per il supporto completo dello sviluppo applicativo moderno.
Se usati insieme, Red Hat OpenShift e Red Hat Application Foundations offrono un'ottima piattaforma per sviluppare e distribuire le applicazioni cloud native. Scopri come creare soluzioni, ottenere cicli di sviluppo più efficienti e promuovere l'innovazione con l'approccio open source dei prodotti Red Hat.
Il blog ufficiale di Red Hat
Leggi gli articoli del blog di Red Hat per scoprire novità e consigli utili sulle nostre tecnologie, e avere aggiornamenti sul nostro ecosistema di clienti, partner e community.