SlideShare a Scribd company logo
1 of 65
CLOUD
CONFERENCE
ITALIA
2019
SPONSOR
MICROSERVIZI: IDEE PER UN’ARCHITETTURA CON AL CENTRO
L’UTENTE
Federico Carrer
Matteo Varotto
WHO WE ARE?
Matteo Varotto
QA Architect
Quid Informatica
Federico Carrer
carrerfe@gmail.com
MatteoVarotto
matteo.varotto@gmail.com
Federico Carrer
Cloud Architect
Quid Informatica
GOOD OLD DAYS...
▪ Semplice da comprendere
▪ Semplice da implementare
▪ Semplice da testare
...QUALCHE ANNO DOPO...
OGGI
 Semplice da comprendere
 Semplice da implementare
 Semplice da testare
 Scalabilità limitata
 Difficile da evolvere
 Aggiornamenti rischiosi
FEATURE, FEATURE, FEATURE
QUAL È LA
RISPOSTA?
MICROSERVIZI
▪ Scomposizione in servizi autonomi e
indipendentemente:
▪ scalabili
▪ rilasciabili
▪ evolvibili
▪ testabili
▪ Team indipendenti che lavorano su
moduli indipendenti
▪ Problema scomposto in parti più
facilmente gestibili
▪ Scalabilità a livello di funzionalità
▪ Stack tecnologico selezionabile per
esigenze singolo componente
QUINDI TUTTO RISOLTO?
MONOLITH: ONLINE STORE
MICROSERVICES: ONLINE STORE
WITH GREAT POWER COMES GREAT RESPONSIBILITY
 Consistenza dei dati
 Partial Failure
 Distributed Transaction
WITH GREAT POWER COMES GREAT RESPONSIBILITY
 Consistenza dei dati
 Partial Failure
 Distributed Transaction
 Comunicazione asincrona
 Race conditions
WITH GREAT POWER COMES GREAT RESPONSIBILITY
 Consistenza dei dati
 Partial Failure
 Distributed Transaction
 Comunicazione asincrona
 Race conditions
 Performance
 Network latency
TORNIAMO DAL NOSTRO UTENTE
▪ 503 Service Unavailable
▪ Please wait
▪ Timeout
▪ Session expired
TORNIAMO DAL NOSTRO UTENTE
Cosa percepisce l'utente?
▪ Fragilità del sistema
▪ Lentezza
▪ Scarsa affidabilità
COSA POSSIAMO FARE?
▪ Limitare le conseguenze
▪ monitoraggio attivo
▪ interventi automatici (restarts, mail a backoffice, ecc.)
▪ circuit breaker
▪ bulkheading
COSA POSSIAMO FARE?
▪ Limitare le conseguenze
▪ monitoraggio attivo
▪ interventi automatici (restarts, mail a backoffice, ecc.)
▪ circuit breaker
▪ bulkheading
▪ Ridurre l'impatto su UX
▪ caching
▪ architettura ad eventi
▪ layer di resilienza
COSA POSSIAMO FARE?
▪ Limitare le conseguenze
▪ monitoraggio attivo
▪ interventi automatici (restarts, mail a backoffice, ecc.)
▪ circuit breaker
▪ bulkheading
▪ Ridurre l'impatto su UX
▪ caching
▪ architettura ad eventi
▪ layer di resilienza
▪ Intervenire sui processi
▪ CAP Theorem
COSA POSSIAMO FARE?
▪ Limitare le conseguenze
▪ monitoraggio attivo
▪ interventi automatici (restarts, mail a backoffice, ecc.)
▪ circuit breaker
▪ bulkheading
▪ Ridurre l'impatto su UX
▪ caching
▪ architettura ad eventi
▪ layer di resilienza
▪ Intervenire sui processi
▪ CAP Theorem
Design (for failure)
ESPERIENZA UTENTE E RESILIENZA
 All’utente interessa un “sistema che funziona”
 Disponibile
 ad esempio al 99,9%
 Affidabile
 capace di riprendersi dopo un’anomalia
 Resiliente
 capace di funzionare in modo accettabile anche in presenza di qualche malfunzionamento
 L’utente ci giudica anche in base a come risolviamo i problemi
 Service Recovery Paradox
ESPERIENZA UTENTE E RESILIENZA
Pattern di comunicazione REST ?
ESPERIENZA UTENTE E RESILIENZA
Pattern di comunicazione REST ?
ESPERIENZA UTENTE E RESILIENZA
Retry ?
ESPERIENZA UTENTE E RESILIENZA
Pattern di comunicazione Event-Driven
ESPERIENZA UTENTE E RESILIENZA
Pattern di comunicazione Event-Driven
ESPERIENZA UTENTE E RESILIENZA
Pattern di comunicazione Event-Driven
ESPERIENZA UTENTE E RESILIENZA
Pattern di comunicazione Event-Driven
ESPERIENZA UTENTE E RESILIENZA
Pattern di comunicazione Event-Driven
ESPERIENZA UTENTE E RESILIENZA
Pattern di comunicazione Event-Driven
MONITORAGGIO
MONITORAGGIO
MONITORAGGIO
MONITORAGGIO
TIMEOUT
CIRCUIT BREAKER
CONSISTENZA
Sistemi monolitici
 ACID
 L’asse del tempo è una retta unica
Sistemi distribuiti
 Difficile garantire consistenza dei dati
 Ogni componente ha la sua visione del
tempo
THE GUARANTEE THAT ANY
TRANSACTIONS STARTED IN
THE FUTURE NECESSARILY SEE
THE EFFECTS OF OTHER
TRANSACTIONS COMMITTED
IN THE PAST
CONSISTENZA?
COORDINAMENTO - TWO PHASE COMMIT
COORDINAMENTO - TWO PHASE COMMIT
COORDINAMENTO - TWO PHASE COMMIT
COORDINAMENTO - TWO PHASE COMMIT
...QUINDI
PROBLEMA
RISOLTO?
2PC
 Scambio di molti messaggi
 Network latency
 Throughput limitato
 Coordinator rappresenta un Single point of failure
 Protocollo bloccante
 Se uno dei partecipanti fallisce abbiamo deadlock, non possiamo procedere con altre transazioni
COME POSSIAMO FARE?
Il mondo nel quale viviamo è inconsistente
COMPENSAZIONE
In genere nel mondo reale quando qualcosa non funziona:
 Ci riprovo
 Provo ad annullare gli effetti di quello che ho fatto
COMPENSAZIONE - SAGA
Consiste nel riscrivere la nostra transazione “lunga” come una sequenza di transazioni
In Saga o tutte le transazioni sono completate con successo oppure vengono eseguite le transazioni di
compensazione
SAGA
SAGA
SAGA
SAGA RINUNCIA A
ISOLAMENTO PER OTTENERE
UNA MIGLIORE AVAILABILITY
RINUNCIARE
ALL’ISOLAMENTO???? NON
SAREBBE MEGLIO AVERE UN
SISTEMA CHE GARANTISCA SIA
ISOLAMENTO CHE
CONSISTENZA?
COSA VUOLE IL NOSTRO UTENTE?
 un sistema perfettamente transazionale?
 che vengano garantite le regole di business dell’applicazione e le invarianti applicative?
CAP THEOREM
Un qualunque sistema distribuito può garantire
solo 2 su 3 tra
 Consistency
 Availability
 Partition Tolerance
CAP THEOREM – PARTIAL KNOWLEDGE
In questo momento abbiamo partitioning
 I messaggi di Catalog non vengono recapitati
Cosa possiamo fare?
 Consistency over Availability
 Availability over Consistency
CAP THEOREM – CONSISTENCY OVER AVAILABILITY
Potremmo decidere di progettare il sistema per
garantire la consistenza
In questo caso possiamo scusarci e chiedere
all’utente di riprovare più tardi
Abbiamo rinunciato alla AVAILABILITY
CAP THEOREM – AVAILABILITY OVER CONSISTENCY
Abbiamo rinunciato alla Consistency
In questo caso completo l’ordine anche se non
conosco le scorte di magazzino
Si tratta di gestire il rischio
CAP THEOREM – GESTIONE DEL RISCHIO
Blocco la possibilità di fare ordini
 Rischio di bloccare le vendite
Non blocco gli ordini
 Aspetto di ricevere nuove scorte del prodotto
prima di spedire
 Il prodotto è andato fuori commercio e non
riesco a reperirlo? Chiedo scusa
DESIGN FOR FAILURE
Partial knowledge spesso ci porta a dover fare
scelte basate su conoscenza locale
Un sistema distribuito spesso è portato a fare
congetture invece che prendere decisioni
…congetture che potrebbero essere corrette
come no
Quindi?
GRAZIE!

More Related Content

Similar to CCI2019 - Microservizi: Idee per un'architettura con al centro l'utente

Luiss Event Agile Team
Luiss Event Agile TeamLuiss Event Agile Team
Luiss Event Agile TeamEmiliano Soldi
 
Cloud Sourcing - Il cloud coi piedi per terra
Cloud Sourcing - Il cloud coi piedi per terraCloud Sourcing - Il cloud coi piedi per terra
Cloud Sourcing - Il cloud coi piedi per terraDedagroup
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008Mauro Servienti
 
Pattern di resilienza per scenari cloud, su Azure!
Pattern di resilienza per scenari cloud, su Azure! Pattern di resilienza per scenari cloud, su Azure!
Pattern di resilienza per scenari cloud, su Azure! Michele Ferracin
 
Disaster Recovery VS Business Continuity in Alta Affidabilità
Disaster Recovery VS Business Continuity in Alta AffidabilitàDisaster Recovery VS Business Continuity in Alta Affidabilità
Disaster Recovery VS Business Continuity in Alta AffidabilitàFederico Rusconi
 
Presentazione CLOUDITALIA KELYAN Evento CloudGarage 5-11 giugno 2013
Presentazione CLOUDITALIA KELYAN Evento CloudGarage 5-11 giugno 2013Presentazione CLOUDITALIA KELYAN Evento CloudGarage 5-11 giugno 2013
Presentazione CLOUDITALIA KELYAN Evento CloudGarage 5-11 giugno 2013Clouditalia Telecomunicazioni
 
MySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQL
MySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQLMySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQL
MySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQLPar-Tec S.p.A.
 
Creare un e-commerce nell'era del cloud computing
Creare un e-commerce nell'era del cloud computingCreare un e-commerce nell'era del cloud computing
Creare un e-commerce nell'era del cloud computingMatteo Roversi
 
I servizi di VM Sistemi a supporto dell’Iperconvergenza
I servizi di VM Sistemi a supporto dell’IperconvergenzaI servizi di VM Sistemi a supporto dell’Iperconvergenza
I servizi di VM Sistemi a supporto dell’IperconvergenzaAdalberto Casalboni
 
Smau Bari 2010 Mariano D'Alessandro
Smau Bari 2010 Mariano D'AlessandroSmau Bari 2010 Mariano D'Alessandro
Smau Bari 2010 Mariano D'AlessandroSMAU
 
Ecommerce B2B ed Infrastruttura cloud
Ecommerce B2B ed Infrastruttura cloudEcommerce B2B ed Infrastruttura cloud
Ecommerce B2B ed Infrastruttura cloudQuista
 
Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9
Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9
Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9Andrea Mauro
 
Le 7 sfide da affrontare nella migrazione da monolite a miniservizi
Le 7 sfide da affrontare nella migrazione da monolite a miniserviziLe 7 sfide da affrontare nella migrazione da monolite a miniservizi
Le 7 sfide da affrontare nella migrazione da monolite a miniserviziLuca Acquaviva
 
Sage X3 produzione per processo slideshare
Sage X3 produzione per processo slideshareSage X3 produzione per processo slideshare
Sage X3 produzione per processo slideshareTeam Netuse srl
 
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Codemotion
 
MySQL Day Milano 2017 - Dalla replica a InnoDB Cluster: l’HA secondo MySQL
MySQL Day Milano 2017 - Dalla replica a InnoDB Cluster: l’HA secondo MySQLMySQL Day Milano 2017 - Dalla replica a InnoDB Cluster: l’HA secondo MySQL
MySQL Day Milano 2017 - Dalla replica a InnoDB Cluster: l’HA secondo MySQLPar-Tec S.p.A.
 
Polarion UC 2010 - Reale Mutua Assicurazioni - Il Change Management Applicati...
Polarion UC 2010 - Reale Mutua Assicurazioni - Il Change Management Applicati...Polarion UC 2010 - Reale Mutua Assicurazioni - Il Change Management Applicati...
Polarion UC 2010 - Reale Mutua Assicurazioni - Il Change Management Applicati...Emerasoft, solutions to collaborate
 
06 azure well architected framework
06 azure well architected framework06 azure well architected framework
06 azure well architected frameworkRauno De Pasquale
 

Similar to CCI2019 - Microservizi: Idee per un'architettura con al centro l'utente (20)

Luiss Event Agile Team
Luiss Event Agile TeamLuiss Event Agile Team
Luiss Event Agile Team
 
Cloud Sourcing - Il cloud coi piedi per terra
Cloud Sourcing - Il cloud coi piedi per terraCloud Sourcing - Il cloud coi piedi per terra
Cloud Sourcing - Il cloud coi piedi per terra
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008
 
Pattern di resilienza per scenari cloud, su Azure!
Pattern di resilienza per scenari cloud, su Azure! Pattern di resilienza per scenari cloud, su Azure!
Pattern di resilienza per scenari cloud, su Azure!
 
Disaster Recovery VS Business Continuity in Alta Affidabilità
Disaster Recovery VS Business Continuity in Alta AffidabilitàDisaster Recovery VS Business Continuity in Alta Affidabilità
Disaster Recovery VS Business Continuity in Alta Affidabilità
 
Presentazione CLOUDITALIA KELYAN Evento CloudGarage 5-11 giugno 2013
Presentazione CLOUDITALIA KELYAN Evento CloudGarage 5-11 giugno 2013Presentazione CLOUDITALIA KELYAN Evento CloudGarage 5-11 giugno 2013
Presentazione CLOUDITALIA KELYAN Evento CloudGarage 5-11 giugno 2013
 
MySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQL
MySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQLMySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQL
MySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQL
 
Presentazione QSA.net
Presentazione QSA.netPresentazione QSA.net
Presentazione QSA.net
 
Creare un e-commerce nell'era del cloud computing
Creare un e-commerce nell'era del cloud computingCreare un e-commerce nell'era del cloud computing
Creare un e-commerce nell'era del cloud computing
 
I servizi di VM Sistemi a supporto dell’Iperconvergenza
I servizi di VM Sistemi a supporto dell’IperconvergenzaI servizi di VM Sistemi a supporto dell’Iperconvergenza
I servizi di VM Sistemi a supporto dell’Iperconvergenza
 
Smau Bari 2010 Mariano D'Alessandro
Smau Bari 2010 Mariano D'AlessandroSmau Bari 2010 Mariano D'Alessandro
Smau Bari 2010 Mariano D'Alessandro
 
Ecommerce B2B ed Infrastruttura cloud
Ecommerce B2B ed Infrastruttura cloudEcommerce B2B ed Infrastruttura cloud
Ecommerce B2B ed Infrastruttura cloud
 
Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9
Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9
Evento Veeam & Assyrus - 2 Novità di Veeam Backup & Replication v9
 
Le 7 sfide da affrontare nella migrazione da monolite a miniservizi
Le 7 sfide da affrontare nella migrazione da monolite a miniserviziLe 7 sfide da affrontare nella migrazione da monolite a miniservizi
Le 7 sfide da affrontare nella migrazione da monolite a miniservizi
 
Sage X3 produzione per processo slideshare
Sage X3 produzione per processo slideshareSage X3 produzione per processo slideshare
Sage X3 produzione per processo slideshare
 
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
Moving from Monolithic to Microservice Architecture: an OSS based stack deplo...
 
MySQL Day Milano 2017 - Dalla replica a InnoDB Cluster: l’HA secondo MySQL
MySQL Day Milano 2017 - Dalla replica a InnoDB Cluster: l’HA secondo MySQLMySQL Day Milano 2017 - Dalla replica a InnoDB Cluster: l’HA secondo MySQL
MySQL Day Milano 2017 - Dalla replica a InnoDB Cluster: l’HA secondo MySQL
 
Polarion UC 2010 - Reale Mutua Assicurazioni - Il Change Management Applicati...
Polarion UC 2010 - Reale Mutua Assicurazioni - Il Change Management Applicati...Polarion UC 2010 - Reale Mutua Assicurazioni - Il Change Management Applicati...
Polarion UC 2010 - Reale Mutua Assicurazioni - Il Change Management Applicati...
 
Digitaltogether 2.0 IL MANIFESTO
Digitaltogether 2.0 IL MANIFESTODigitaltogether 2.0 IL MANIFESTO
Digitaltogether 2.0 IL MANIFESTO
 
06 azure well architected framework
06 azure well architected framework06 azure well architected framework
06 azure well architected framework
 

More from walk2talk srl

CCI 2019 - SQL Injection - Black Hat Vs White Hat
CCI 2019 - SQL Injection - Black Hat Vs White HatCCI 2019 - SQL Injection - Black Hat Vs White Hat
CCI 2019 - SQL Injection - Black Hat Vs White Hatwalk2talk srl
 
CCI 2019 - Exploiting Custom Vision SDK in Python to create an efficient imag...
CCI 2019 - Exploiting Custom Vision SDK in Python to create an efficient imag...CCI 2019 - Exploiting Custom Vision SDK in Python to create an efficient imag...
CCI 2019 - Exploiting Custom Vision SDK in Python to create an efficient imag...walk2talk srl
 
CCI 2019 - Come ottimizzare i propri workload su Azure
CCI 2019 - Come ottimizzare i propri workload su AzureCCI 2019 - Come ottimizzare i propri workload su Azure
CCI 2019 - Come ottimizzare i propri workload su Azurewalk2talk srl
 
CCI 2019 - Exchange 2019 da 0 ad HA in 1 ora
CCI 2019 - Exchange 2019 da 0 ad HA in 1 oraCCI 2019 - Exchange 2019 da 0 ad HA in 1 ora
CCI 2019 - Exchange 2019 da 0 ad HA in 1 orawalk2talk srl
 
CCI 2019 - PowerApps for Enterprise Developers
CCI 2019 - PowerApps for Enterprise DevelopersCCI 2019 - PowerApps for Enterprise Developers
CCI 2019 - PowerApps for Enterprise Developerswalk2talk srl
 
CCI 2019 - Architettare componenti in SPFx, esperienze sul campo
CCI 2019 - Architettare componenti in SPFx, esperienze sul campoCCI 2019 - Architettare componenti in SPFx, esperienze sul campo
CCI 2019 - Architettare componenti in SPFx, esperienze sul campowalk2talk srl
 
CCI 2019 - Step by step come attivare un servizio voce in MS Teams
CCI 2019 - Step by step come attivare un servizio voce in MS TeamsCCI 2019 - Step by step come attivare un servizio voce in MS Teams
CCI 2019 - Step by step come attivare un servizio voce in MS Teamswalk2talk srl
 
CCI 2019 - Strumenti Azure per l'Anomaly Detection in ambito Industria 4.0
CCI 2019 - Strumenti Azure per l'Anomaly Detection in ambito Industria 4.0CCI 2019 - Strumenti Azure per l'Anomaly Detection in ambito Industria 4.0
CCI 2019 - Strumenti Azure per l'Anomaly Detection in ambito Industria 4.0walk2talk srl
 
CCI2019 - I've got the Power! I've got the Shell!
CCI2019 - I've got the Power! I've got the Shell!CCI2019 - I've got the Power! I've got the Shell!
CCI2019 - I've got the Power! I've got the Shell!walk2talk srl
 
CCI2019 - Sistema di controllo del traffico con architettura Big Data
CCI2019 - Sistema di controllo del traffico con architettura Big DataCCI2019 - Sistema di controllo del traffico con architettura Big Data
CCI2019 - Sistema di controllo del traffico con architettura Big Datawalk2talk srl
 
CCI2019 - Governance di una Conversational AI
CCI2019 - Governance di una Conversational AICCI2019 - Governance di una Conversational AI
CCI2019 - Governance di una Conversational AIwalk2talk srl
 
CCI2019 - SQL Server ed Azure: Disaster Recovery per tutti
CCI2019 - SQL Server ed Azure: Disaster Recovery per tuttiCCI2019 - SQL Server ed Azure: Disaster Recovery per tutti
CCI2019 - SQL Server ed Azure: Disaster Recovery per tuttiwalk2talk srl
 
CCI2019 - Reagire agli eventi generati dalla propria infrastruttura con Azure...
CCI2019 - Reagire agli eventi generati dalla propria infrastruttura con Azure...CCI2019 - Reagire agli eventi generati dalla propria infrastruttura con Azure...
CCI2019 - Reagire agli eventi generati dalla propria infrastruttura con Azure...walk2talk srl
 
CCI2019 - What's new in Remote Desktop Services on Windows Server 2019 and Azure
CCI2019 - What's new in Remote Desktop Services on Windows Server 2019 and AzureCCI2019 - What's new in Remote Desktop Services on Windows Server 2019 and Azure
CCI2019 - What's new in Remote Desktop Services on Windows Server 2019 and Azurewalk2talk srl
 
CCI2019 - Teams Direct Routing e servizi fonia avanzati
CCI2019 - Teams Direct Routing e servizi fonia avanzatiCCI2019 - Teams Direct Routing e servizi fonia avanzati
CCI2019 - Teams Direct Routing e servizi fonia avanzatiwalk2talk srl
 
CCI2019i - Implementare Azure Multi-Factor Authentication Lettere dal Fronte
CCI2019i - Implementare Azure Multi-Factor Authentication Lettere dal FronteCCI2019i - Implementare Azure Multi-Factor Authentication Lettere dal Fronte
CCI2019i - Implementare Azure Multi-Factor Authentication Lettere dal Frontewalk2talk srl
 
CCI2019 - Monitorare SQL Server Senza Andare in Bancarotta
CCI2019 - Monitorare SQL Server Senza Andare in BancarottaCCI2019 - Monitorare SQL Server Senza Andare in Bancarotta
CCI2019 - Monitorare SQL Server Senza Andare in Bancarottawalk2talk srl
 
CCI2019 - Architecting and Implementing Azure Networking
CCI2019 - Architecting and Implementing Azure NetworkingCCI2019 - Architecting and Implementing Azure Networking
CCI2019 - Architecting and Implementing Azure Networkingwalk2talk srl
 
CCI2019 - Teams e lo Shadow IT
CCI2019 - Teams e lo Shadow ITCCI2019 - Teams e lo Shadow IT
CCI2019 - Teams e lo Shadow ITwalk2talk srl
 
CCI2018 - La "moderna" Sicurezza informatica & Microsoft
CCI2018 - La "moderna" Sicurezza informatica & MicrosoftCCI2018 - La "moderna" Sicurezza informatica & Microsoft
CCI2018 - La "moderna" Sicurezza informatica & Microsoftwalk2talk srl
 

More from walk2talk srl (20)

CCI 2019 - SQL Injection - Black Hat Vs White Hat
CCI 2019 - SQL Injection - Black Hat Vs White HatCCI 2019 - SQL Injection - Black Hat Vs White Hat
CCI 2019 - SQL Injection - Black Hat Vs White Hat
 
CCI 2019 - Exploiting Custom Vision SDK in Python to create an efficient imag...
CCI 2019 - Exploiting Custom Vision SDK in Python to create an efficient imag...CCI 2019 - Exploiting Custom Vision SDK in Python to create an efficient imag...
CCI 2019 - Exploiting Custom Vision SDK in Python to create an efficient imag...
 
CCI 2019 - Come ottimizzare i propri workload su Azure
CCI 2019 - Come ottimizzare i propri workload su AzureCCI 2019 - Come ottimizzare i propri workload su Azure
CCI 2019 - Come ottimizzare i propri workload su Azure
 
CCI 2019 - Exchange 2019 da 0 ad HA in 1 ora
CCI 2019 - Exchange 2019 da 0 ad HA in 1 oraCCI 2019 - Exchange 2019 da 0 ad HA in 1 ora
CCI 2019 - Exchange 2019 da 0 ad HA in 1 ora
 
CCI 2019 - PowerApps for Enterprise Developers
CCI 2019 - PowerApps for Enterprise DevelopersCCI 2019 - PowerApps for Enterprise Developers
CCI 2019 - PowerApps for Enterprise Developers
 
CCI 2019 - Architettare componenti in SPFx, esperienze sul campo
CCI 2019 - Architettare componenti in SPFx, esperienze sul campoCCI 2019 - Architettare componenti in SPFx, esperienze sul campo
CCI 2019 - Architettare componenti in SPFx, esperienze sul campo
 
CCI 2019 - Step by step come attivare un servizio voce in MS Teams
CCI 2019 - Step by step come attivare un servizio voce in MS TeamsCCI 2019 - Step by step come attivare un servizio voce in MS Teams
CCI 2019 - Step by step come attivare un servizio voce in MS Teams
 
CCI 2019 - Strumenti Azure per l'Anomaly Detection in ambito Industria 4.0
CCI 2019 - Strumenti Azure per l'Anomaly Detection in ambito Industria 4.0CCI 2019 - Strumenti Azure per l'Anomaly Detection in ambito Industria 4.0
CCI 2019 - Strumenti Azure per l'Anomaly Detection in ambito Industria 4.0
 
CCI2019 - I've got the Power! I've got the Shell!
CCI2019 - I've got the Power! I've got the Shell!CCI2019 - I've got the Power! I've got the Shell!
CCI2019 - I've got the Power! I've got the Shell!
 
CCI2019 - Sistema di controllo del traffico con architettura Big Data
CCI2019 - Sistema di controllo del traffico con architettura Big DataCCI2019 - Sistema di controllo del traffico con architettura Big Data
CCI2019 - Sistema di controllo del traffico con architettura Big Data
 
CCI2019 - Governance di una Conversational AI
CCI2019 - Governance di una Conversational AICCI2019 - Governance di una Conversational AI
CCI2019 - Governance di una Conversational AI
 
CCI2019 - SQL Server ed Azure: Disaster Recovery per tutti
CCI2019 - SQL Server ed Azure: Disaster Recovery per tuttiCCI2019 - SQL Server ed Azure: Disaster Recovery per tutti
CCI2019 - SQL Server ed Azure: Disaster Recovery per tutti
 
CCI2019 - Reagire agli eventi generati dalla propria infrastruttura con Azure...
CCI2019 - Reagire agli eventi generati dalla propria infrastruttura con Azure...CCI2019 - Reagire agli eventi generati dalla propria infrastruttura con Azure...
CCI2019 - Reagire agli eventi generati dalla propria infrastruttura con Azure...
 
CCI2019 - What's new in Remote Desktop Services on Windows Server 2019 and Azure
CCI2019 - What's new in Remote Desktop Services on Windows Server 2019 and AzureCCI2019 - What's new in Remote Desktop Services on Windows Server 2019 and Azure
CCI2019 - What's new in Remote Desktop Services on Windows Server 2019 and Azure
 
CCI2019 - Teams Direct Routing e servizi fonia avanzati
CCI2019 - Teams Direct Routing e servizi fonia avanzatiCCI2019 - Teams Direct Routing e servizi fonia avanzati
CCI2019 - Teams Direct Routing e servizi fonia avanzati
 
CCI2019i - Implementare Azure Multi-Factor Authentication Lettere dal Fronte
CCI2019i - Implementare Azure Multi-Factor Authentication Lettere dal FronteCCI2019i - Implementare Azure Multi-Factor Authentication Lettere dal Fronte
CCI2019i - Implementare Azure Multi-Factor Authentication Lettere dal Fronte
 
CCI2019 - Monitorare SQL Server Senza Andare in Bancarotta
CCI2019 - Monitorare SQL Server Senza Andare in BancarottaCCI2019 - Monitorare SQL Server Senza Andare in Bancarotta
CCI2019 - Monitorare SQL Server Senza Andare in Bancarotta
 
CCI2019 - Architecting and Implementing Azure Networking
CCI2019 - Architecting and Implementing Azure NetworkingCCI2019 - Architecting and Implementing Azure Networking
CCI2019 - Architecting and Implementing Azure Networking
 
CCI2019 - Teams e lo Shadow IT
CCI2019 - Teams e lo Shadow ITCCI2019 - Teams e lo Shadow IT
CCI2019 - Teams e lo Shadow IT
 
CCI2018 - La "moderna" Sicurezza informatica & Microsoft
CCI2018 - La "moderna" Sicurezza informatica & MicrosoftCCI2018 - La "moderna" Sicurezza informatica & Microsoft
CCI2018 - La "moderna" Sicurezza informatica & Microsoft
 

CCI2019 - Microservizi: Idee per un'architettura con al centro l'utente

  • 3. MICROSERVIZI: IDEE PER UN’ARCHITETTURA CON AL CENTRO L’UTENTE Federico Carrer Matteo Varotto
  • 4. WHO WE ARE? Matteo Varotto QA Architect Quid Informatica Federico Carrer carrerfe@gmail.com MatteoVarotto matteo.varotto@gmail.com Federico Carrer Cloud Architect Quid Informatica
  • 5. GOOD OLD DAYS... ▪ Semplice da comprendere ▪ Semplice da implementare ▪ Semplice da testare
  • 7. OGGI  Semplice da comprendere  Semplice da implementare  Semplice da testare  Scalabilità limitata  Difficile da evolvere  Aggiornamenti rischiosi
  • 10. MICROSERVIZI ▪ Scomposizione in servizi autonomi e indipendentemente: ▪ scalabili ▪ rilasciabili ▪ evolvibili ▪ testabili ▪ Team indipendenti che lavorano su moduli indipendenti ▪ Problema scomposto in parti più facilmente gestibili ▪ Scalabilità a livello di funzionalità ▪ Stack tecnologico selezionabile per esigenze singolo componente
  • 14. WITH GREAT POWER COMES GREAT RESPONSIBILITY  Consistenza dei dati  Partial Failure  Distributed Transaction
  • 15. WITH GREAT POWER COMES GREAT RESPONSIBILITY  Consistenza dei dati  Partial Failure  Distributed Transaction  Comunicazione asincrona  Race conditions
  • 16. WITH GREAT POWER COMES GREAT RESPONSIBILITY  Consistenza dei dati  Partial Failure  Distributed Transaction  Comunicazione asincrona  Race conditions  Performance  Network latency
  • 17. TORNIAMO DAL NOSTRO UTENTE ▪ 503 Service Unavailable ▪ Please wait ▪ Timeout ▪ Session expired
  • 18. TORNIAMO DAL NOSTRO UTENTE Cosa percepisce l'utente? ▪ Fragilità del sistema ▪ Lentezza ▪ Scarsa affidabilità
  • 19. COSA POSSIAMO FARE? ▪ Limitare le conseguenze ▪ monitoraggio attivo ▪ interventi automatici (restarts, mail a backoffice, ecc.) ▪ circuit breaker ▪ bulkheading
  • 20. COSA POSSIAMO FARE? ▪ Limitare le conseguenze ▪ monitoraggio attivo ▪ interventi automatici (restarts, mail a backoffice, ecc.) ▪ circuit breaker ▪ bulkheading ▪ Ridurre l'impatto su UX ▪ caching ▪ architettura ad eventi ▪ layer di resilienza
  • 21. COSA POSSIAMO FARE? ▪ Limitare le conseguenze ▪ monitoraggio attivo ▪ interventi automatici (restarts, mail a backoffice, ecc.) ▪ circuit breaker ▪ bulkheading ▪ Ridurre l'impatto su UX ▪ caching ▪ architettura ad eventi ▪ layer di resilienza ▪ Intervenire sui processi ▪ CAP Theorem
  • 22. COSA POSSIAMO FARE? ▪ Limitare le conseguenze ▪ monitoraggio attivo ▪ interventi automatici (restarts, mail a backoffice, ecc.) ▪ circuit breaker ▪ bulkheading ▪ Ridurre l'impatto su UX ▪ caching ▪ architettura ad eventi ▪ layer di resilienza ▪ Intervenire sui processi ▪ CAP Theorem Design (for failure)
  • 23. ESPERIENZA UTENTE E RESILIENZA  All’utente interessa un “sistema che funziona”  Disponibile  ad esempio al 99,9%  Affidabile  capace di riprendersi dopo un’anomalia  Resiliente  capace di funzionare in modo accettabile anche in presenza di qualche malfunzionamento  L’utente ci giudica anche in base a come risolviamo i problemi  Service Recovery Paradox
  • 24. ESPERIENZA UTENTE E RESILIENZA Pattern di comunicazione REST ?
  • 25. ESPERIENZA UTENTE E RESILIENZA Pattern di comunicazione REST ?
  • 26. ESPERIENZA UTENTE E RESILIENZA Retry ?
  • 27. ESPERIENZA UTENTE E RESILIENZA Pattern di comunicazione Event-Driven
  • 28. ESPERIENZA UTENTE E RESILIENZA Pattern di comunicazione Event-Driven
  • 29. ESPERIENZA UTENTE E RESILIENZA Pattern di comunicazione Event-Driven
  • 30. ESPERIENZA UTENTE E RESILIENZA Pattern di comunicazione Event-Driven
  • 31. ESPERIENZA UTENTE E RESILIENZA Pattern di comunicazione Event-Driven
  • 32. ESPERIENZA UTENTE E RESILIENZA Pattern di comunicazione Event-Driven
  • 33.
  • 34.
  • 41.
  • 42. CONSISTENZA Sistemi monolitici  ACID  L’asse del tempo è una retta unica Sistemi distribuiti  Difficile garantire consistenza dei dati  Ogni componente ha la sua visione del tempo
  • 43. THE GUARANTEE THAT ANY TRANSACTIONS STARTED IN THE FUTURE NECESSARILY SEE THE EFFECTS OF OTHER TRANSACTIONS COMMITTED IN THE PAST CONSISTENZA?
  • 44. COORDINAMENTO - TWO PHASE COMMIT
  • 45. COORDINAMENTO - TWO PHASE COMMIT
  • 46. COORDINAMENTO - TWO PHASE COMMIT
  • 47. COORDINAMENTO - TWO PHASE COMMIT
  • 49. 2PC  Scambio di molti messaggi  Network latency  Throughput limitato  Coordinator rappresenta un Single point of failure  Protocollo bloccante  Se uno dei partecipanti fallisce abbiamo deadlock, non possiamo procedere con altre transazioni
  • 50. COME POSSIAMO FARE? Il mondo nel quale viviamo è inconsistente
  • 51. COMPENSAZIONE In genere nel mondo reale quando qualcosa non funziona:  Ci riprovo  Provo ad annullare gli effetti di quello che ho fatto
  • 52. COMPENSAZIONE - SAGA Consiste nel riscrivere la nostra transazione “lunga” come una sequenza di transazioni In Saga o tutte le transazioni sono completate con successo oppure vengono eseguite le transazioni di compensazione
  • 53. SAGA
  • 54. SAGA
  • 55. SAGA
  • 56. SAGA RINUNCIA A ISOLAMENTO PER OTTENERE UNA MIGLIORE AVAILABILITY
  • 57. RINUNCIARE ALL’ISOLAMENTO???? NON SAREBBE MEGLIO AVERE UN SISTEMA CHE GARANTISCA SIA ISOLAMENTO CHE CONSISTENZA?
  • 58. COSA VUOLE IL NOSTRO UTENTE?  un sistema perfettamente transazionale?  che vengano garantite le regole di business dell’applicazione e le invarianti applicative?
  • 59. CAP THEOREM Un qualunque sistema distribuito può garantire solo 2 su 3 tra  Consistency  Availability  Partition Tolerance
  • 60. CAP THEOREM – PARTIAL KNOWLEDGE In questo momento abbiamo partitioning  I messaggi di Catalog non vengono recapitati Cosa possiamo fare?  Consistency over Availability  Availability over Consistency
  • 61. CAP THEOREM – CONSISTENCY OVER AVAILABILITY Potremmo decidere di progettare il sistema per garantire la consistenza In questo caso possiamo scusarci e chiedere all’utente di riprovare più tardi Abbiamo rinunciato alla AVAILABILITY
  • 62. CAP THEOREM – AVAILABILITY OVER CONSISTENCY Abbiamo rinunciato alla Consistency In questo caso completo l’ordine anche se non conosco le scorte di magazzino Si tratta di gestire il rischio
  • 63. CAP THEOREM – GESTIONE DEL RISCHIO Blocco la possibilità di fare ordini  Rischio di bloccare le vendite Non blocco gli ordini  Aspetto di ricevere nuove scorte del prodotto prima di spedire  Il prodotto è andato fuori commercio e non riesco a reperirlo? Chiedo scusa
  • 64. DESIGN FOR FAILURE Partial knowledge spesso ci porta a dover fare scelte basate su conoscenza locale Un sistema distribuito spesso è portato a fare congetture invece che prendere decisioni …congetture che potrebbero essere corrette come no Quindi?