Stili architetturali e modelli di comunicazione

Sviluppare applicazioni su AWS

Ricardo Sueiras

Principal Technologist

Il tuo docente

docente

Sviluppare applicazioni su AWS

Cosa sono i pattern architetturali?

 

 

Architettura applicativa

 

  • Soluzione ripetibile a un problema comune.
  • I pattern aiutano a combinare i servizi AWS.
  • L'architettura determina il comportamento sotto carico.
  • Ci sono vari pattern architetturali da conoscere.
Sviluppare applicazioni su AWS

Monoliti

 

 

diagramma di un esempio di architettura monolitica

 

 

  • Un'unica unità strettamente accoppiata.
  • Un codebase, un deployment.
  • Semplice all'inizio.
  • Scalare è doloroso: devi scalare tutto insieme.
Sviluppare applicazioni su AWS

Microservizi

 

architettura a microservizi

 

  • Servizi piccoli e indipendenti: ognuno copre una capability.
  • Effettua deployment, scala e aggiorna ogni servizio a parte.
  • Trade-off: più complessità operativa e comunicazione fra servizi da gestire.
Sviluppare applicazioni su AWS

Serverless

  • Niente infrastruttura da gestire: solo codice e configurazione.
  • Costruisci componendo servizi AWS gestiti.
  • AWS gestisce provisioning, scaling e manutenzione.
  • Trade-off: limiti di esecuzione, cold start, vendor lock-in.
  • Quasi zero onere operativo e scaling automatico.

 

architettura serverless

Sviluppare applicazioni su AWS

Event-driven architecture (EDA)

  • I componenti comunicano con eventi, non con chiamate dirette.
  • Un evento registra qualcosa accaduto (ordine effettuato, pagamento ricevuto, articolo spedito).
  • I produttori emettono eventi.
  • I consumatori si iscrivono agli eventi di interesse.

 

architettura event-driven

Sviluppare applicazioni su AWS

Sistemi strettamente e debolmente accoppiati

  • Le app cloud moderne sono composte da più servizi.
  • I servizi devono comunicare e coordinarsi per completare il lavoro.
  • La comunicazione sincrona è strettamente accoppiata.
  • Quella asincrona è debolmente accoppiata.

sistemi strettamente e debolmente accoppiati

Sviluppare applicazioni su AWS

Comunicazione sincrona

 

comunicazione sincrona

  • Un servizio invia una richiesta e attende la risposta.
  • Il chiamante resta bloccato fino alla risposta o al timeout.
  • Semplice da implementare e capire.
  • Accoppiamento stretto: lentezze o guasti a valle si propagano.
  • Mitiga con timeout, retry e circuit breaker.
Sviluppare applicazioni su AWS

Pattern: request/response

request response

  • Spina dorsale della maggior parte delle interfacce applicative.
  • Comportamento prevedibile.
  • Feedback immediato agli utenti.
Sviluppare applicazioni su AWS

Comunicazione asincrona

 

comunicazione asincrona

  • Il mittente non attende una risposta.
  • Invia un messaggio o evento e continua l'elaborazione.
  • Il destinatario elabora il messaggio in modo indipendente.
  • Debolmente accoppiata: migliore scalabilità e tolleranza ai guasti.
  • Gestisce picchi di traffico e disservizi parziali con grazia.
  • Sfide: messaggi duplicati, ordinamento, consistenza eventuale.
Sviluppare applicazioni su AWS

Pattern: decoupling basato su coda

  • Il produttore invia messaggi a una coda.
  • Il consumatore preleva ed elabora i messaggi in modo indipendente.
  • Evita l'effetto domino dei guasti.
  • Produttore e consumatore scalano separatamente.

  basato su coda

Sviluppare applicazioni su AWS

Pattern: worker queue

  • Più worker prelevano messaggi dalla stessa coda.
  • Messaggi elaborati in parallelo.
  • Abilita scaling orizzontale e throughput maggiore.
  • Ordine dei messaggi non garantito.

worker-queue

Sviluppare applicazioni su AWS

Pattern: publish/subscribe

  • I publisher inviano messaggi a un topic SNS.
  • Più subscriber ricevono lo stesso messaggio.
  • Broadcast in tempo reale a molti consumer.

 

pattern publish/subscribe

Sviluppare applicazioni su AWS

Pattern: fan-out

fanout

  • Un messaggio consegnato a più consumer contemporaneamente.
  • Molto usato nelle architetture event-driven.
  • Utile quando più servizi devono reagire allo stesso evento.
Sviluppare applicazioni su AWS

Ordinamento dei messaggi

ordinamento dei messaggi

  • Alcuni carichi devono elaborare i messaggi nell'ordine corretto.
  • Amazon SQS FIFO e Kinesis supportano l'elaborazione ordinata.
  • L'ordinamento rigoroso riduce il throughput.
  • Bilancia correttezza e scalabilità.
Sviluppare applicazioni su AWS

Esercitiamoci!

Sviluppare applicazioni su AWS

Preparing Video For Download...