Coordinare i servizi e gestire lo stato

Sviluppare applicazioni su AWS

Ricardo Sueiras

Principal Technologist

Coordinamento dei servizi

 

coordinamento dei servizi

  • Più servizi devono collaborare per completare un workflow.
  • Serve una strategia di coordinamento.
  • Due approcci: orchestrazione e coreografia.
Sviluppare applicazioni su AWS

Orchestrazione

 

pattern di orchestrazione

  • Un orchestratore centrale coordina il workflow.
  • L'orchestratore controlla la sequenza e decide quale servizio esegue dopo.
  • Utile per retry, logica condizionale e gestione errori.
  • Su AWS: implementato con Step Functions su Lambda, ECS, DynamoDB.
Sviluppare applicazioni su AWS

Orchestrazione

 

pattern di orchestrazione

  • La logica del workflow vive in un solo punto: debug e monitoraggio più semplici.
  • Compromesso: introduce una dipendenza centrale.
Sviluppare applicazioni su AWS

Coreografia

  • Nessun controller centrale.
  • I servizi reagiscono agli eventi in modo indipendente.
  • Ogni servizio ascolta gli eventi rilevanti ed esegue il proprio lavoro.
  • Nessun servizio deve conoscere l'intero workflow.
  • Migliora il loose coupling e la scalabilità.

 

coreografia

Sviluppare applicazioni su AWS

Coreografia

  • Su AWS: EventBridge, SNS, SQS.
  • Altamente scalabile.
  • Compromesso: diventa più difficile da comprendere e fare debug con la crescita dei workflow.

 

coreografia

Sviluppare applicazioni su AWS

Architettura event-driven

  • I servizi comunicano producendo e consumando eventi.
  • Favorisce il loose coupling tra servizi.
  • Favorisce l'alta scalabilità.
  • Abilita l'elaborazione parallela degli eventi.
  • Nuovi servizi possono iscriversi senza modificare quelli esistenti.

 

architettura event-driven

Sviluppare applicazioni su AWS

Architettura event-driven

 

architettura event-driven

  • Compromessi nell'implementare EDA:
  • Progetta per la consistenza eventuale.
  • Implementa l'idempotenza.
  • La gestione dei guasti è più complessa.
Sviluppare applicazioni su AWS

Idempotenza

 

idempotenza

  • La stessa operazione eseguita più volte produce lo stesso risultato.
  • Principio di design critico nei sistemi asincroni ed event-driven.
  • I sistemi distribuiti possono recapitare eventi duplicati (retry, errori di rete, rielaborazioni).
  • Preserva correttezza e affidabilità del sistema.
Sviluppare applicazioni su AWS

Dead letter queue

 

dlq

  • Gestisce i guasti nella comunicazione asincrona.
  • Isola i messaggi "velenosi" problematici.
  • Dopo ripetuti fallimenti di retry, il messaggio passa alla DLQ.
  • Il flusso principale continua a funzionare.
Sviluppare applicazioni su AWS

Dead letter queue

  • Usale quando l'ordine dei messaggi non è critico.
  • Evitale per sistemi non critici dove si accetta una perdita occasionale di dati.
  • Sconsigliate quando l'ordine dei messaggi va preservato.

 

dlq

Sviluppare applicazioni su AWS

Gestione dello stato

  • Gestire lo stato è fondamentale per le app cloud native.
  • Lo stato è qualsiasi dato conservato tra interazioni.
  • Memorizzare lo stato localmente sul server limita scalabilità e resilienza.

 

gestione dello stato

Sviluppare applicazioni su AWS

Gestione dello stato

  • La gestione dello stato comporta compromessi in base a cosa stai costruendo.
  • Stato esterno migliora scalabilità e resilienza.
  • Costi: latenza e complessità aggiunte.
  • Da considerare: consistenza, caching e pattern di accesso ai dati.

 

gestione dello stato

Sviluppare applicazioni su AWS

Stateful

 

design stateful

  • I dati di sessione restano sul server.
  • Le richieste devono andare alla stessa istanza (sticky sessions).
  • Limita la flessibilità di scaling.
  • Se l'istanza fallisce, la sessione è persa.
Sviluppare applicazioni su AWS

Stateless

 

stateless

  • Ogni richiesta è trattata in modo indipendente.
  • Nessuno stato archiviato sul server.
  • Lo stato vive in sistemi esterni.
  • Approccio preferito per app cloud native.
  • Qualsiasi istanza può gestire qualsiasi richiesta: scalabilità orizzontale semplice.
Sviluppare applicazioni su AWS

Esercitiamoci!

Sviluppare applicazioni su AWS

Preparing Video For Download...