Stili architetturali e modelli di comunicazione
Sviluppare applicazioni su AWS
Ricardo Sueiras
Principal Technologist
Il tuo docente
Cosa sono i pattern architetturali?
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.
Monoliti
Un'unica unità strettamente accoppiata.
Un codebase, un deployment.
Semplice all'inizio.
Scalare è doloroso: devi scalare tutto insieme.
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.
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.
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.
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.
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.
Pattern: request/response
Spina dorsale della maggior parte delle interfacce applicative.
Comportamento prevedibile.
Feedback immediato agli utenti.
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.
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.
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.
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: fan-out
Un messaggio consegnato a più consumer contemporaneamente.
Molto usato nelle architetture event-driven.
Utile quando più servizi devono reagire allo stesso evento.
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à.
Esercitiamoci!
Sviluppare applicazioni su AWS
Preparing Video For Download...