SlideShare a Scribd company logo
Che cosa sono i microservizi? 
 
di Salvatore Cordiano 
 
Milano, 21/03/2015 
 
 
 
Contesto 
 
Dagli anni ‘90 il modello multi­strato (multi­tier architecture) è stato considerato un pattern                         
architetturale fondamentale per costruire un sistema software. Secondo tale modello le varie                       
funzionalità software sono logicamente separate su più strati che comunicano tra di loro. Ogni                           
strato comunica con gli strati adiacenti in modo diretto richiedendo ed offrendo servizi. In                           
effetti in questa architettura il sistema software, sia pure se logicamente suddiviso in strati,                           
risulta essere un unico sistema monolitico. 
 
L’avvento e la diffusione del cloud computing, le pratiche di continuous delivery, l’approccio                         
alla gestione della complessità del software basato sul DDD (Domain­Driven Design),                     
l’organizzazione agile delle aziende in team di sviluppo piccoli ed autonomi (3­7 persone)                         
sono il contesto in cui è emerso il modello dell’architettura a microservizi. 
 
 
Che cosa sono i microservizi? 
 
In breve i microservizi sono dei servizi “piccoli” ed autonomi che interagiscono tra di loro e                               
che hanno come finalità quella di fare una cosa e di farla bene; sono a tutti gli effetti dei                                     
sistemi distribuiti. 
 
Per dare una definizione più precisa possiamo riprendere le parole di Martin Fowler che                           
afferma: ≪Lo stile architetturale a microservizi è un approccio allo sviluppo di una singola                           
applicazione come insieme di piccoli servizi, ciascuno dei quali viene eseguito da un proprio                           
processo e comunica con un meccanismo snello, spesso una HTTP API≫. 
 
 
Ma quanto devono essere piccoli i microservizi? 
 
Non è facile rispondere a questa domanda. Infatti non è possibile fornire una risposta, ad                             
esempio, in termini di numero di righe di codice che definiscono la giusta taglia: alcuni                             
linguaggi di programmazione sono più concisi di altri, riuscendo ad esprimere molto senza                         
essere verbosi, per non parlare poi di librerie e dipendenze o della complessità del dominio                             
del software in oggetto. 
 
Secondo Jon Eaves, famoso autore di testi del mondo Java, un microservizio deve essere                           
tale da poter essere riscritto in due settimane. Ovviamente va considerato che tale risposta ha                             
validità nel contesto lavorativo di Real Estate Australia dove Eaves lavora. In sostanza la                           
taglia corretta deve essere identificata in accordo alla struttura organizzativa aziendale. 
 
Teniamo sempre in mente che man mano che la dimensione di un servizio decresce,                           
aumentano i benefici relativi all’indipendenza tra le parti, ma cresce anche la complessità di                           
gestire un numero elevato di parti. 
 
 
Autonomia 
 
Ogni microservizio è un’entità separata che viene generalmente pubblicata su una                     
piattaforma PaaS oppure eseguita da uno processo di sistema ad hoc. 
 
La comunicazione tra i servizi avviene attraverso la rete al fine di garantire l’indipendenza tra i                               
servizi ed evitare ogni forma di accoppiamento. 
 
Ogni microservizio si propone all’esterno come una black­box, infatti espone solo un                       
Application Programming Interface (API), astraendo rispetto al dettaglio di come le                     
funzionalità sono implementate e dallo specifico linguaggio o tecnologia utilizzati. Ciò mira a                         
far si che il cambiamento di ciascun microservizio non abbia impatto sugli altri. 
 
 
Vantaggi 
 
L’utilizzo dell’architettura a microservizi ha indubbiamente dei vantaggi: 
 
● Velocizzare i tempi di rilascio del software e reagire velocemente alle esigenze del 
mercato 
 
In generale, nell’architettura a microservizi, ogni singolo servizio è autonomo rispetto                     
agli altri, di coseguenza può raggiungere l’ambiente di produzione in modo                     
indipendente dagli altri, senza che tale attività abbia effetti drammatici sul resto del                         
sistema. Disporre di un processo di deployment snello e veloce consente di poter                         
aggiungere o modificare funzionalità di un sistema software in modo efficace ed                       
efficiente, rispondendo alle necessità di mercato e utenti sempre più esigenti. 
 
● Sperimentare più facilmente nuove tecnologie 
 
Molto spesso, la principale barriera per adottare una nuova tecnologia risiede nel                       
rischio associato all’utilizzo di qualcosa di nuovo e con il quale si ha poca esperienza.                             
Confinando questo rischio ad una piccola porzione di un sistema software, che è                         
possibile riscrivere in appena due settimane di lavoro, il rischio risulta molto contenuto                         
e quindi è una sfida da accettare. 
 
● Migliori performance grazie all’utilizzo di tecnologie ad hoc 
 
L’utilizzo di linguaggi e tecnologie eterogenee consente di poter utilizzare gli stack più                         
performanti per implementare specifiche funzionalità: ad esempio è possibile introdurre                   
una particolare tipologia di base dati che risulta naturale per mappare un determinato                         
dato, oppure eseguire un calcolo in un modo particolarmente efficiente. 
 
● Resilienza 
 
In un’architettura a microservizi, quando una componente non funziona non è                     
automatico che tutto il sistema software smetta di funzionare. In molti casi è possibile                           
isolare il problema ed intervenire mentre il resto del sistema continua a funzionare,                         
cosa non possibile in un’architettura monolitica. Va però sottolineato che l’architettura                     
a microservizi, essendo un insieme di sistemi distribuiti, espone ad una nuova fonte di                           
problemi legati ai disservizi di rete. 
 
● Scalabilità 
 
In generale risulta molto più semplice ed economico scalare un microservizio rispetto                       
ad un sistema software monolitico di grandi dimensioni. Il modello a microservizi                       
consente di poter effettuare provisioning delle parti del sistema software in modo                       
dinamico ed intelligente. 
 
● Facilità di deployment 
 
Modificare poche righe di codice su un sistema software monolitico di grandi                       
dimensioni ed effettuarne il deploy è generalmente un’attività non banale, che espone                       
a rischi significativi considerando anche l’impatto che tali modifiche possono avere.                     
Questa paura generalmente porta a raccogliere un certo numero di modifiche prima di                         
avviare un’attività così onerosa e rischiosa. 
Con l’approccio a microservizi ogni singolo servizio può raggiungere l’ambiente di                     
produzione in modo indipendente, sicché se si verifica un problema esso è facilmente                         
isolato e possono essere intraprese azioni di rollback più velocemente. 
 
● Componibilità 
 
Tra le opportunità più interessanti dell’architettura a microservizi vi è la possibilità di                         
riusare le funzionalità. Infatti è possibile che una stesso servizio venga utilizzato in                         
modi differenti e per scopi diversi. Si pensi ad esempio ad un sistema software che                             
deve poter dialogare non solo col mondo web ma anche con applicazioni mobile e                           
dispositivi wearable, etc.  
 
● Sostituibilità 
 
Quando un sistema software è organizzato a microservizi, il costo di sostituire un                         
servizio con un altro più efficiente e migliore è limitato a circa due settimane di                             
sviluppo, così come banale è il costo di rimuovere un servizio inutile. 
 
 
Svantaggi 
 
Da quanto fin qui trattato, potrebbe sembrare che l’architettura a microservizi risulti essere la                           
manna dal cielo, non è così. Infatti non possiamo dimenticare di ribadire che utilizzare tanti                             
servizi che dialogano tra di loro attraverso la rete, vuol dire di fatto avere a che fare con un                                     
sistema distribuito, con tutti i problemi dal caso. 
 
Si pensi, ad esempio, a cosa vuol dire autenticare un utente su un’architettura distribuita                           
volendo garantire il single sign­on, oppure a come gestire la mutua autenticazione tra i servizi                             
che compongono il sistema software. E ancora: cosa vuol dire testare un sistema software di                             
questo tipo? 
 
Infine, vengono fuori altre tematiche tipiche dei sistemi distribuiti come la gestione di                         
situazioni in cui è necessario che il sistema software sia in grado di riconfigurarsi al volo                               
quando una nuova istanza di un servizio viene creata e il resto della rete può                             
automaticamente trovare essa ed iniziare a comunicare con essa. Questo processo è                       
chiamato service discovery. 
 
 
Bibliografia 
 
● Appunti della CloudConf 2015 di Torino 
● Building Microservices, Sam Newman, O’Relly 
● Micro services, what even are they? Jon Eaves, 
http://techblog.realestate.com.au/micro­services­what­even­are­they/ 
● Microservices, Martin Fowler, http://martinfowler.com/articles/microservices.html 

More Related Content

Viewers also liked

Genesi di una tecnologia, dalla ricerca all'industria...
Genesi di una tecnologia, dalla ricerca all'industria...Genesi di una tecnologia, dalla ricerca all'industria...
Genesi di una tecnologia, dalla ricerca all'industria...
italianaSoftware
 
Microservizi, scenari del prossimo e del lontano futuro
Microservizi, scenari del prossimo e del lontano futuroMicroservizi, scenari del prossimo e del lontano futuro
Microservizi, scenari del prossimo e del lontano futuro
italianaSoftware
 
Industria 4.0 - Come verrà rivoluzionata l'industria italiana
Industria 4.0 - Come verrà rivoluzionata l'industria italianaIndustria 4.0 - Come verrà rivoluzionata l'industria italiana
Industria 4.0 - Come verrà rivoluzionata l'industria italiana
italianaSoftware
 
A Framework for Rule-Based Dynamic Adaptation
A Framework for Rule-Based Dynamic AdaptationA Framework for Rule-Based Dynamic Adaptation
A Framework for Rule-Based Dynamic Adaptation
IMDS2014
 
La rivoluzione dei Microservizi
La rivoluzione dei MicroserviziLa rivoluzione dei Microservizi
La rivoluzione dei Microservizi
italianaSoftware
 
Implementazione di una soluzione a microservizi: benifici organizzativi ed ec...
Implementazione di una soluzione a microservizi: benifici organizzativi ed ec...Implementazione di una soluzione a microservizi: benifici organizzativi ed ec...
Implementazione di una soluzione a microservizi: benifici organizzativi ed ec...
italianaSoftware
 
Devops, Cloud e Container
Devops, Cloud e ContainerDevops, Cloud e Container
Devops, Cloud e Container
italianaSoftware
 

Viewers also liked (7)

Genesi di una tecnologia, dalla ricerca all'industria...
Genesi di una tecnologia, dalla ricerca all'industria...Genesi di una tecnologia, dalla ricerca all'industria...
Genesi di una tecnologia, dalla ricerca all'industria...
 
Microservizi, scenari del prossimo e del lontano futuro
Microservizi, scenari del prossimo e del lontano futuroMicroservizi, scenari del prossimo e del lontano futuro
Microservizi, scenari del prossimo e del lontano futuro
 
Industria 4.0 - Come verrà rivoluzionata l'industria italiana
Industria 4.0 - Come verrà rivoluzionata l'industria italianaIndustria 4.0 - Come verrà rivoluzionata l'industria italiana
Industria 4.0 - Come verrà rivoluzionata l'industria italiana
 
A Framework for Rule-Based Dynamic Adaptation
A Framework for Rule-Based Dynamic AdaptationA Framework for Rule-Based Dynamic Adaptation
A Framework for Rule-Based Dynamic Adaptation
 
La rivoluzione dei Microservizi
La rivoluzione dei MicroserviziLa rivoluzione dei Microservizi
La rivoluzione dei Microservizi
 
Implementazione di una soluzione a microservizi: benifici organizzativi ed ec...
Implementazione di una soluzione a microservizi: benifici organizzativi ed ec...Implementazione di una soluzione a microservizi: benifici organizzativi ed ec...
Implementazione di una soluzione a microservizi: benifici organizzativi ed ec...
 
Devops, Cloud e Container
Devops, Cloud e ContainerDevops, Cloud e Container
Devops, Cloud e Container
 

Similar to Che cosa sono i microservizi?

MySQL Day Milano 2018 - Le architetture a microservizi
MySQL Day Milano 2018 - Le architetture a microserviziMySQL Day Milano 2018 - Le architetture a microservizi
MySQL Day Milano 2018 - Le architetture a microservizi
Par-Tec S.p.A.
 
Parliamo di SOA
Parliamo di SOAParliamo di SOA
Parliamo di SOA
Antonio Pintus
 
Paper presentazione social media
Paper presentazione social mediaPaper presentazione social media
Paper presentazione social mediaalessioemireni
 
Microservices
MicroservicesMicroservices
Microservices
Massimo Romano
 
Sinibaldi soa-28.02.2008
Sinibaldi soa-28.02.2008Sinibaldi soa-28.02.2008
Sinibaldi soa-28.02.2008sinibaldi
 
Cloud e innovazione
Cloud e innovazioneCloud e innovazione
Cloud e innovazione
XPeppers
 
Seminario: GNU/Linux come punto di forza
Seminario: GNU/Linux come punto di forzaSeminario: GNU/Linux come punto di forza
Seminario: GNU/Linux come punto di forza
Mauro Fava
 
Microservices architecture & Service Fabric
Microservices architecture & Service FabricMicroservices architecture & Service Fabric
Microservices architecture & Service Fabric
Massimo Bonanni
 
[AxonIQ Italia Community] Architetture distribuite a eventi: sono adatte al m...
[AxonIQ Italia Community] Architetture distribuite a eventi: sono adatte al m...[AxonIQ Italia Community] Architetture distribuite a eventi: sono adatte al m...
[AxonIQ Italia Community] Architetture distribuite a eventi: sono adatte al m...
Corrado Musumeci
 
Presentazione Unibo
Presentazione UniboPresentazione Unibo
Presentazione Unibo
Balint Maschio
 
Cloud Hosting Vs Cluster
Cloud Hosting Vs ClusterCloud Hosting Vs Cluster
Cloud Hosting Vs Cluster
Stefano Sordi
 
Cloud Hosting Vs Cluster di Tobia Caneschi (Register.it)
Cloud Hosting Vs Cluster di Tobia Caneschi (Register.it)Cloud Hosting Vs Cluster di Tobia Caneschi (Register.it)
Cloud Hosting Vs Cluster di Tobia Caneschi (Register.it)Register.it
 
Architetture.Distribuite
Architetture.DistribuiteArchitetture.Distribuite
Architetture.Distribuite
Giampiero Cerroni
 
.NET Microservices
.NET Microservices.NET Microservices
.NET Microservices
Luca Congiu
 
Cloud infrastructure
Cloud infrastructureCloud infrastructure
Cloud infrastructureMattia Azzena
 
Un'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterpriseUn'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterpriseAlberto Lagna
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)
Sabino Labarile
 
MySQL Day Roma 2019 - Le architetture a microservizi e MySQL
MySQL Day Roma 2019 - Le architetture a microservizi e MySQLMySQL Day Roma 2019 - Le architetture a microservizi e MySQL
MySQL Day Roma 2019 - Le architetture a microservizi e MySQL
Par-Tec S.p.A.
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
Giorgio Di Nardo
 
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
Par-Tec S.p.A.
 

Similar to Che cosa sono i microservizi? (20)

MySQL Day Milano 2018 - Le architetture a microservizi
MySQL Day Milano 2018 - Le architetture a microserviziMySQL Day Milano 2018 - Le architetture a microservizi
MySQL Day Milano 2018 - Le architetture a microservizi
 
Parliamo di SOA
Parliamo di SOAParliamo di SOA
Parliamo di SOA
 
Paper presentazione social media
Paper presentazione social mediaPaper presentazione social media
Paper presentazione social media
 
Microservices
MicroservicesMicroservices
Microservices
 
Sinibaldi soa-28.02.2008
Sinibaldi soa-28.02.2008Sinibaldi soa-28.02.2008
Sinibaldi soa-28.02.2008
 
Cloud e innovazione
Cloud e innovazioneCloud e innovazione
Cloud e innovazione
 
Seminario: GNU/Linux come punto di forza
Seminario: GNU/Linux come punto di forzaSeminario: GNU/Linux come punto di forza
Seminario: GNU/Linux come punto di forza
 
Microservices architecture & Service Fabric
Microservices architecture & Service FabricMicroservices architecture & Service Fabric
Microservices architecture & Service Fabric
 
[AxonIQ Italia Community] Architetture distribuite a eventi: sono adatte al m...
[AxonIQ Italia Community] Architetture distribuite a eventi: sono adatte al m...[AxonIQ Italia Community] Architetture distribuite a eventi: sono adatte al m...
[AxonIQ Italia Community] Architetture distribuite a eventi: sono adatte al m...
 
Presentazione Unibo
Presentazione UniboPresentazione Unibo
Presentazione Unibo
 
Cloud Hosting Vs Cluster
Cloud Hosting Vs ClusterCloud Hosting Vs Cluster
Cloud Hosting Vs Cluster
 
Cloud Hosting Vs Cluster di Tobia Caneschi (Register.it)
Cloud Hosting Vs Cluster di Tobia Caneschi (Register.it)Cloud Hosting Vs Cluster di Tobia Caneschi (Register.it)
Cloud Hosting Vs Cluster di Tobia Caneschi (Register.it)
 
Architetture.Distribuite
Architetture.DistribuiteArchitetture.Distribuite
Architetture.Distribuite
 
.NET Microservices
.NET Microservices.NET Microservices
.NET Microservices
 
Cloud infrastructure
Cloud infrastructureCloud infrastructure
Cloud infrastructure
 
Un'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterpriseUn'architettura di riferimento per applicazioni enterprise
Un'architettura di riferimento per applicazioni enterprise
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)
 
MySQL Day Roma 2019 - Le architetture a microservizi e MySQL
MySQL Day Roma 2019 - Le architetture a microservizi e MySQLMySQL Day Roma 2019 - Le architetture a microservizi e MySQL
MySQL Day Roma 2019 - Le architetture a microservizi e MySQL
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
 
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
 

More from Salvatore Cordiano

Transformed: Moving to the Product Operating Model
Transformed: Moving to the Product Operating ModelTransformed: Moving to the Product Operating Model
Transformed: Moving to the Product Operating Model
Salvatore Cordiano
 
Executive Master in Business Administration
Executive Master in Business AdministrationExecutive Master in Business Administration
Executive Master in Business Administration
Salvatore Cordiano
 
Facile.it Partner 🚀 Hackathon 2023 - What we learned
Facile.it Partner 🚀 Hackathon 2023 - What we learnedFacile.it Partner 🚀 Hackathon 2023 - What we learned
Facile.it Partner 🚀 Hackathon 2023 - What we learned
Salvatore Cordiano
 
Accrescere la motivazione per raggiungere gli obiettivi
Accrescere la motivazione per raggiungere gli obiettiviAccrescere la motivazione per raggiungere gli obiettivi
Accrescere la motivazione per raggiungere gli obiettivi
Salvatore Cordiano
 
Il potere delle domande
Il potere delle domandeIl potere delle domande
Il potere delle domande
Salvatore Cordiano
 
Impara a delegare
Impara a delegareImpara a delegare
Impara a delegare
Salvatore Cordiano
 
Migliora il tuo ascolto
Migliora il tuo ascoltoMigliora il tuo ascolto
Migliora il tuo ascolto
Salvatore Cordiano
 
Negoziazione organizzativa
Negoziazione organizzativaNegoziazione organizzativa
Negoziazione organizzativa
Salvatore Cordiano
 
Migliora le prestazioni dei tuoi collaboratori
Migliora le prestazioni dei tuoi collaboratoriMigliora le prestazioni dei tuoi collaboratori
Migliora le prestazioni dei tuoi collaboratori
Salvatore Cordiano
 
Charles Péguy - Il denaro
Charles Péguy - Il denaroCharles Péguy - Il denaro
Charles Péguy - Il denaro
Salvatore Cordiano
 
Delivering Effective Feedback - FP Talks
Delivering Effective Feedback - FP TalksDelivering Effective Feedback - FP Talks
Delivering Effective Feedback - FP Talks
Salvatore Cordiano
 
No Silver Bullet - Essence and Accident in Software Engineering
No Silver Bullet - Essence and Accident in Software EngineeringNo Silver Bullet - Essence and Accident in Software Engineering
No Silver Bullet - Essence and Accident in Software Engineering
Salvatore Cordiano
 
Facile.it Partner Hackathon - What we learned
Facile.it Partner Hackathon - What we learnedFacile.it Partner Hackathon - What we learned
Facile.it Partner Hackathon - What we learned
Salvatore Cordiano
 
FP Hackathon - Closing, remarks and awards ceremony
FP Hackathon - Closing, remarks and awards ceremonyFP Hackathon - Closing, remarks and awards ceremony
FP Hackathon - Closing, remarks and awards ceremony
Salvatore Cordiano
 
Facile.it Partner Hackathon 2022
Facile.it Partner Hackathon 2022Facile.it Partner Hackathon 2022
Facile.it Partner Hackathon 2022
Salvatore Cordiano
 
Remarks about Ownership
Remarks about OwnershipRemarks about Ownership
Remarks about Ownership
Salvatore Cordiano
 
Introducing Kaizen
Introducing KaizenIntroducing Kaizen
Introducing Kaizen
Salvatore Cordiano
 
Introducing Eisenhower Matrix
Introducing Eisenhower MatrixIntroducing Eisenhower Matrix
Introducing Eisenhower Matrix
Salvatore Cordiano
 
The Blake Mouton Managerial Grid
The Blake Mouton Managerial GridThe Blake Mouton Managerial Grid
The Blake Mouton Managerial Grid
Salvatore Cordiano
 
Facile.it Partner Hackathon (kick-off)
Facile.it Partner Hackathon (kick-off)Facile.it Partner Hackathon (kick-off)
Facile.it Partner Hackathon (kick-off)
Salvatore Cordiano
 

More from Salvatore Cordiano (20)

Transformed: Moving to the Product Operating Model
Transformed: Moving to the Product Operating ModelTransformed: Moving to the Product Operating Model
Transformed: Moving to the Product Operating Model
 
Executive Master in Business Administration
Executive Master in Business AdministrationExecutive Master in Business Administration
Executive Master in Business Administration
 
Facile.it Partner 🚀 Hackathon 2023 - What we learned
Facile.it Partner 🚀 Hackathon 2023 - What we learnedFacile.it Partner 🚀 Hackathon 2023 - What we learned
Facile.it Partner 🚀 Hackathon 2023 - What we learned
 
Accrescere la motivazione per raggiungere gli obiettivi
Accrescere la motivazione per raggiungere gli obiettiviAccrescere la motivazione per raggiungere gli obiettivi
Accrescere la motivazione per raggiungere gli obiettivi
 
Il potere delle domande
Il potere delle domandeIl potere delle domande
Il potere delle domande
 
Impara a delegare
Impara a delegareImpara a delegare
Impara a delegare
 
Migliora il tuo ascolto
Migliora il tuo ascoltoMigliora il tuo ascolto
Migliora il tuo ascolto
 
Negoziazione organizzativa
Negoziazione organizzativaNegoziazione organizzativa
Negoziazione organizzativa
 
Migliora le prestazioni dei tuoi collaboratori
Migliora le prestazioni dei tuoi collaboratoriMigliora le prestazioni dei tuoi collaboratori
Migliora le prestazioni dei tuoi collaboratori
 
Charles Péguy - Il denaro
Charles Péguy - Il denaroCharles Péguy - Il denaro
Charles Péguy - Il denaro
 
Delivering Effective Feedback - FP Talks
Delivering Effective Feedback - FP TalksDelivering Effective Feedback - FP Talks
Delivering Effective Feedback - FP Talks
 
No Silver Bullet - Essence and Accident in Software Engineering
No Silver Bullet - Essence and Accident in Software EngineeringNo Silver Bullet - Essence and Accident in Software Engineering
No Silver Bullet - Essence and Accident in Software Engineering
 
Facile.it Partner Hackathon - What we learned
Facile.it Partner Hackathon - What we learnedFacile.it Partner Hackathon - What we learned
Facile.it Partner Hackathon - What we learned
 
FP Hackathon - Closing, remarks and awards ceremony
FP Hackathon - Closing, remarks and awards ceremonyFP Hackathon - Closing, remarks and awards ceremony
FP Hackathon - Closing, remarks and awards ceremony
 
Facile.it Partner Hackathon 2022
Facile.it Partner Hackathon 2022Facile.it Partner Hackathon 2022
Facile.it Partner Hackathon 2022
 
Remarks about Ownership
Remarks about OwnershipRemarks about Ownership
Remarks about Ownership
 
Introducing Kaizen
Introducing KaizenIntroducing Kaizen
Introducing Kaizen
 
Introducing Eisenhower Matrix
Introducing Eisenhower MatrixIntroducing Eisenhower Matrix
Introducing Eisenhower Matrix
 
The Blake Mouton Managerial Grid
The Blake Mouton Managerial GridThe Blake Mouton Managerial Grid
The Blake Mouton Managerial Grid
 
Facile.it Partner Hackathon (kick-off)
Facile.it Partner Hackathon (kick-off)Facile.it Partner Hackathon (kick-off)
Facile.it Partner Hackathon (kick-off)
 

Che cosa sono i microservizi?

  • 1. Che cosa sono i microservizi?    di Salvatore Cordiano    Milano, 21/03/2015        Contesto    Dagli anni ‘90 il modello multi­strato (multi­tier architecture) è stato considerato un pattern                          architetturale fondamentale per costruire un sistema software. Secondo tale modello le varie                        funzionalità software sono logicamente separate su più strati che comunicano tra di loro. Ogni                            strato comunica con gli strati adiacenti in modo diretto richiedendo ed offrendo servizi. In                            effetti in questa architettura il sistema software, sia pure se logicamente suddiviso in strati,                            risulta essere un unico sistema monolitico.    L’avvento e la diffusione del cloud computing, le pratiche di continuous delivery, l’approccio                          alla gestione della complessità del software basato sul DDD (Domain­Driven Design),                      l’organizzazione agile delle aziende in team di sviluppo piccoli ed autonomi (3­7 persone)                          sono il contesto in cui è emerso il modello dell’architettura a microservizi.      Che cosa sono i microservizi?    In breve i microservizi sono dei servizi “piccoli” ed autonomi che interagiscono tra di loro e                                che hanno come finalità quella di fare una cosa e di farla bene; sono a tutti gli effetti dei                                      sistemi distribuiti.    Per dare una definizione più precisa possiamo riprendere le parole di Martin Fowler che                            afferma: ≪Lo stile architetturale a microservizi è un approccio allo sviluppo di una singola                            applicazione come insieme di piccoli servizi, ciascuno dei quali viene eseguito da un proprio                            processo e comunica con un meccanismo snello, spesso una HTTP API≫.      Ma quanto devono essere piccoli i microservizi?    Non è facile rispondere a questa domanda. Infatti non è possibile fornire una risposta, ad                              esempio, in termini di numero di righe di codice che definiscono la giusta taglia: alcuni                              linguaggi di programmazione sono più concisi di altri, riuscendo ad esprimere molto senza                          essere verbosi, per non parlare poi di librerie e dipendenze o della complessità del dominio                              del software in oggetto. 
  • 2.   Secondo Jon Eaves, famoso autore di testi del mondo Java, un microservizio deve essere                            tale da poter essere riscritto in due settimane. Ovviamente va considerato che tale risposta ha                              validità nel contesto lavorativo di Real Estate Australia dove Eaves lavora. In sostanza la                            taglia corretta deve essere identificata in accordo alla struttura organizzativa aziendale.    Teniamo sempre in mente che man mano che la dimensione di un servizio decresce,                            aumentano i benefici relativi all’indipendenza tra le parti, ma cresce anche la complessità di                            gestire un numero elevato di parti.      Autonomia    Ogni microservizio è un’entità separata che viene generalmente pubblicata su una                      piattaforma PaaS oppure eseguita da uno processo di sistema ad hoc.    La comunicazione tra i servizi avviene attraverso la rete al fine di garantire l’indipendenza tra i                                servizi ed evitare ogni forma di accoppiamento.    Ogni microservizio si propone all’esterno come una black­box, infatti espone solo un                        Application Programming Interface (API), astraendo rispetto al dettaglio di come le                      funzionalità sono implementate e dallo specifico linguaggio o tecnologia utilizzati. Ciò mira a                          far si che il cambiamento di ciascun microservizio non abbia impatto sugli altri.      Vantaggi    L’utilizzo dell’architettura a microservizi ha indubbiamente dei vantaggi:    ● Velocizzare i tempi di rilascio del software e reagire velocemente alle esigenze del  mercato    In generale, nell’architettura a microservizi, ogni singolo servizio è autonomo rispetto                      agli altri, di coseguenza può raggiungere l’ambiente di produzione in modo                      indipendente dagli altri, senza che tale attività abbia effetti drammatici sul resto del                          sistema. Disporre di un processo di deployment snello e veloce consente di poter                          aggiungere o modificare funzionalità di un sistema software in modo efficace ed                        efficiente, rispondendo alle necessità di mercato e utenti sempre più esigenti.    ● Sperimentare più facilmente nuove tecnologie    Molto spesso, la principale barriera per adottare una nuova tecnologia risiede nel                        rischio associato all’utilizzo di qualcosa di nuovo e con il quale si ha poca esperienza.                             
  • 3. Confinando questo rischio ad una piccola porzione di un sistema software, che è                          possibile riscrivere in appena due settimane di lavoro, il rischio risulta molto contenuto                          e quindi è una sfida da accettare.    ● Migliori performance grazie all’utilizzo di tecnologie ad hoc    L’utilizzo di linguaggi e tecnologie eterogenee consente di poter utilizzare gli stack più                          performanti per implementare specifiche funzionalità: ad esempio è possibile introdurre                    una particolare tipologia di base dati che risulta naturale per mappare un determinato                          dato, oppure eseguire un calcolo in un modo particolarmente efficiente.    ● Resilienza    In un’architettura a microservizi, quando una componente non funziona non è                      automatico che tutto il sistema software smetta di funzionare. In molti casi è possibile                            isolare il problema ed intervenire mentre il resto del sistema continua a funzionare,                          cosa non possibile in un’architettura monolitica. Va però sottolineato che l’architettura                      a microservizi, essendo un insieme di sistemi distribuiti, espone ad una nuova fonte di                            problemi legati ai disservizi di rete.    ● Scalabilità    In generale risulta molto più semplice ed economico scalare un microservizio rispetto                        ad un sistema software monolitico di grandi dimensioni. Il modello a microservizi                        consente di poter effettuare provisioning delle parti del sistema software in modo                        dinamico ed intelligente.    ● Facilità di deployment    Modificare poche righe di codice su un sistema software monolitico di grandi                        dimensioni ed effettuarne il deploy è generalmente un’attività non banale, che espone                        a rischi significativi considerando anche l’impatto che tali modifiche possono avere.                      Questa paura generalmente porta a raccogliere un certo numero di modifiche prima di                          avviare un’attività così onerosa e rischiosa.  Con l’approccio a microservizi ogni singolo servizio può raggiungere l’ambiente di                      produzione in modo indipendente, sicché se si verifica un problema esso è facilmente                          isolato e possono essere intraprese azioni di rollback più velocemente.    ● Componibilità    Tra le opportunità più interessanti dell’architettura a microservizi vi è la possibilità di                          riusare le funzionalità. Infatti è possibile che una stesso servizio venga utilizzato in                          modi differenti e per scopi diversi. Si pensi ad esempio ad un sistema software che                             
  • 4. deve poter dialogare non solo col mondo web ma anche con applicazioni mobile e                            dispositivi wearable, etc.     ● Sostituibilità    Quando un sistema software è organizzato a microservizi, il costo di sostituire un                          servizio con un altro più efficiente e migliore è limitato a circa due settimane di                              sviluppo, così come banale è il costo di rimuovere un servizio inutile.      Svantaggi    Da quanto fin qui trattato, potrebbe sembrare che l’architettura a microservizi risulti essere la                            manna dal cielo, non è così. Infatti non possiamo dimenticare di ribadire che utilizzare tanti                              servizi che dialogano tra di loro attraverso la rete, vuol dire di fatto avere a che fare con un                                      sistema distribuito, con tutti i problemi dal caso.    Si pensi, ad esempio, a cosa vuol dire autenticare un utente su un’architettura distribuita                            volendo garantire il single sign­on, oppure a come gestire la mutua autenticazione tra i servizi                              che compongono il sistema software. E ancora: cosa vuol dire testare un sistema software di                              questo tipo?    Infine, vengono fuori altre tematiche tipiche dei sistemi distribuiti come la gestione di                          situazioni in cui è necessario che il sistema software sia in grado di riconfigurarsi al volo                                quando una nuova istanza di un servizio viene creata e il resto della rete può                              automaticamente trovare essa ed iniziare a comunicare con essa. Questo processo è                        chiamato service discovery.      Bibliografia    ● Appunti della CloudConf 2015 di Torino  ● Building Microservices, Sam Newman, O’Relly  ● Micro services, what even are they? Jon Eaves,  http://techblog.realestate.com.au/micro­services­what­even­are­they/  ● Microservices, Martin Fowler, http://martinfowler.com/articles/microservices.html