Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Che cosa sono i microservizi?

1.748 Aufrufe

Veröffentlicht am

Introduzione ai microservizi. Panoramica sui vantaggi e svantaggi

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

Che cosa sono i microservizi?

  1. 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. 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. 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. 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 

×