

# REL05-BP06 Rendere i sistemi senza stato ove possibile
<a name="rel_mitigate_interaction_failure_stateless"></a>

 I sistemi non devono richiedere lo stato né eseguire l'offload dello stato in modo tale che, tra diverse richieste client, non vi sia alcuna dipendenza dai dati archiviati localmente su disco o in memoria. I server possono così essere sostituiti a piacimento senza compromettere la disponibilità. 

 Quando gli utenti o i servizi interagiscono con un'applicazione, spesso eseguono una serie di interazioni che formano una sessione. Una sessione è un dato univoco per gli utenti che persistono tra le richieste mentre utilizzano l'applicazione. Un'applicazione stateless è un'applicazione che non richiede la conoscenza delle interazioni precedenti e non memorizza le informazioni sulla sessione. 

 Una volta progettati per essere stateless, è possibile utilizzare servizi di elaborazione serverless, come o. AWS Lambda AWS Fargate

 Oltre alla sostituzione dei server, un altro vantaggio delle applicazioni stateless è la possibilità di scalare orizzontalmente perché tutte le risorse di elaborazione disponibili (come EC2 istanze e AWS Lambda funzioni) possono soddisfare qualsiasi richiesta. 

 **Vantaggi dell'adozione di questa best practice:** i sistemi con progettazione stateless sono più adattabili alla scalabilità orizzontale, così da poter aggiungere o rimuovere capacità in base alle fluttuazioni di traffico e domanda. Sono inoltre intrinsecamente resistenti ai guasti e offrono flessibilità e agilità allo sviluppo delle applicazioni. 

 **Livello di rischio associato se questa best practice non fosse adottata:** medio 

## Guida all'implementazione
<a name="implementation-guidance"></a>

 Trasforma le applicazioni in stateless. Le applicazioni stateless consentono la scalabilità orizzontale e sono tolleranti ai guasti di un singolo nodo. Analizza e individua i componenti della tua applicazione che mantengono lo stato dell'architettura. Questo processo ti aiuta a valutare il potenziale impatto della transizione a una progettazione stateless. Un'architettura stateless separa i dati degli utenti ed esegue l'offload dei dati della sessione, offrendo la flessibilità necessaria per scalare ogni componente in modo indipendente al fine di soddisfare le diverse richieste del carico di lavoro e ottimizzare l'utilizzo delle risorse. 

### Passaggi dell'implementazione
<a name="implementation-steps"></a>
+  Individua e comprendi i componenti stateful dell'applicazione. 
+  Suddividi i dati, separando e gestendo i dati dell'utente dalla logica dell'applicazione principale. 
  +  [Amazon Cognito](https://aws.amazon.com/cognito/) è in grado di separare i dati degli utenti dal codice dell'applicazione mediante funzionalità come [pool di identità](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html), [pool di utenti](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-cognito-user-pools.html) e [Amazon Cognito Sync](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-sync.html). 
  +  Puoi separare dati degli utenti con [Gestione dei segreti AWS](https://aws.amazon.com/secrets-manager/), archiviando i segreti in un luogo sicuro e centralizzato. Il codice dell'applicazione pertanto non dovrà più memorizzare i segreti, rendendolo più sicuro. 
  +  Per archiviare dati non strutturati di grandi dimensioni, come immagini e documenti, prendi in considerazione l'utilizzo di [Amazon S3](https://aws.amazon.com/s3/). L'applicazione può recuperare questi dati quando richiesto, eliminando la necessità di archiviarli in memoria. 
  +  Utilizza [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) per archiviare informazioni come i profili utente. L'applicazione può eseguire query su questi dati pressoché in tempo reale. 
+  Trasferisci i dati della sessione in un database, una cache o in file esterni. 
  +  [Amazon ElastiCache](https://aws.amazon.com/elasticache/), Amazon DynamoDB[, Amazon Elastic File System](https://aws.amazon.com/efs/) (Amazon) e EFS [Amazon](https://aws.amazon.com/memorydb/) MemoryDB sono esempi AWS di servizi che puoi utilizzare per scaricare i dati della sessione. 
+  Progetta un'architettura stateless dopo aver identificato lo stato e i dati dell'utente che devono essere mantenuti con la tua soluzione di archiviazione preferita. 

## Risorse
<a name="resources"></a>

 **Best practice correlate:** 
+  [REL11-BP03 Automatizza la guarigione su tutti i livelli](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_withstand_component_failures_auto_healing_system.html) 

 **Documenti correlati:** 
+  [The Amazon Builders' Library: evitare il fallback nei sistemi distribuiti](https://aws.amazon.com/builders-library/avoiding-fallback-in-distributed-systems) 
+  [The Amazon Builders' Library: evitare insormontabili backlog di code](https://aws.amazon.com/builders-library/avoiding-insurmountable-queue-backlogs) 
+  [The Amazon Builders' Library: sfide e strategie del caching](https://aws.amazon.com/builders-library/caching-challenges-and-strategies/) 
+  [Best practice per Stateless Web Tier su AWS](https://docs.aws.amazon.com/whitepapers/latest/best-practices-wordpress/stateless-web-tier.html) 