{"id":13197,"date":"2019-11-20T07:30:42","date_gmt":"2019-11-20T06:30:42","guid":{"rendered":"https:\/\/www.unilab.eu\/?p=13197"},"modified":"2019-11-18T14:58:44","modified_gmt":"2019-11-18T13:58:44","slug":"microservizi","status":"publish","type":"post","link":"https:\/\/www.unilab.eu\/it\/articoli\/coffee-break-it\/microservizi\/","title":{"rendered":"Architettura di Microservizi: cos&#8217;\u00e8, come funziona"},"content":{"rendered":"<p>L\u2019architettura a <strong>microservizi<\/strong> \u00e8 un approccio rivoluzionario che permette lo sviluppo di app dinamiche, facili da gestire, aggiornare e potenziare. L\u2019idea \u00e8 quella di suddividere i servizi all\u2019interno della struttura, sviluppandoli separatamente in modo che essi possano occuparsi di un compito specifico, senza sovraccaricare il codice dell\u2019applicazione.<\/p>\n<p>Tale definizione pu\u00f2 ricordare in parte quella della SOA (Service Oriented Architecture), ma nel caso dell\u2019architettura a microservizi la comunicazione fra questi ultimi viene codificata e gestita attraverso <strong>API ben definite<\/strong>.<\/p>\n<p><strong>Differenze fra architettura a microservizi e monolitica<\/strong><\/p>\n<p>Le prime app venivano sviluppate utilizzando la cosiddetta <strong>architettura monolitica<\/strong>. In pratica si trattava di enormi blocchi di codice in cui erano integrati i vari servizi disponibili, che lavoravano all\u2019unisono, poich\u00e9 erano tutti collegati fra loro.<\/p>\n<p>Il <strong>principale svantaggio<\/strong> di questa configurazione era rappresentato dal fatto che per aggiornare o modificare un servizio specifico, si rendeva necessario aggiornare tutta l\u2019applicazione. Questo significava metterla di fatto down e sospendere l\u2019accesso agli utenti temporaneamente. Come si pu\u00f2 ben intuire ci\u00f2 causava enormi disagi per le aziende, cos\u00ec si sono cercate nuove soluzioni.<\/p>\n<p>La gi\u00e0 citata Service Oriented Architecture \u00e8 l\u2019antenata pi\u00f9 prossima dell\u2019architettura a microservizi e ha introdotto il concetto di <strong>servizi separati<\/strong> nello sviluppo delle app. Questo nuovo metodo di programmazione le rendeva di fatto pi\u00f9 versatili e facili da aggiornare, ma con qualche svantaggio considerevole.<\/p>\n<p>L\u2019assenza di una <strong>codifica generale accessibile<\/strong> in termini di costi, capace di coordinare servizi sviluppati in linguaggi differenti, si \u00e8 rivelata presto un malus troppo oneroso da sostenere economicamente.<\/p>\n<p>Alla luce di ci\u00f2, si pu\u00f2 asserire che l\u2019architettura a microservizi prende i pregi delle due architetture precedenti e li fonde insieme per ottenere un <strong>risultato ottimale<\/strong>. I servizi vengono sviluppati in maniera autonoma da piccoli team e svolgono compiti ben specifici, ma riesco a comunicare agevolmente gli uni con gli altri grazie alle API, come se fossero un\u2019unica applicazione.<\/p>\n<p><strong>Quali vantaggi ha l\u2019adozione dei microservizi<\/strong><\/p>\n<p>Sono gi\u00e0 stati enunciati nei paragrafi precedenti alcuni dei <strong>vantaggi principali<\/strong> dell\u2019architettura a microservizi, come la facilit\u00e0 di aggiornamento e manutenzione, la possibilit\u00e0 di espansione pressoch\u00e9 illimitata e la versatilit\u00e0. A questi per\u00f2 se ne aggiungono altri:<\/p>\n<ul>\n<li>si possono <strong>eliminare singoli punti di guasto<\/strong>: dato che i bug e i malfunzionamenti sono per lo pi\u00f9 circoscritti al servizio in cui si generano, \u00e8 facile isolare e risolvere il problema;<\/li>\n<li>l\u2019<strong>orchestrazione risulta pi\u00f9 snella<\/strong>: implementare processi automatizzati di build, testing e distribuzione significa gestire gli stessi con maggiore semplicit\u00e0, mantenendo le comunicazioni fra vari settori coerenti e riducendo il numero di configurazioni richieste;<\/li>\n<li><strong>versionamento<\/strong>: con questo sistema le API possono essere aggiornate in maniera separata rispetto ai singoli servizi, poich\u00e9 essi si basano su schemi isolati da quelli del resto dell\u2019applicazione.<\/li>\n<\/ul>\n<p><strong>I punti negativi dell\u2019architettura a microservizi<\/strong><\/p>\n<p>Come gli altri tipi di architetture, anche quella a microservizi non \u00e8 del tutto esente da <strong>svantaggi<\/strong> di sorta. I lati negativi si riscontrano principalmente nella fase di <strong>scalabilit\u00e0<\/strong> dell\u2019applicazione stessa, in cui si rende necessario affrontare la complessit\u00e0 di alcuni sistemi. La suddivisione in servizi separati, inoltre, si traduce anche in un maggior numero di fattori a cui prestare attenzione:<\/p>\n<ul>\n<li>l\u2019orchestrazione, pur essendo snella, risulta <strong>complessa<\/strong> senza una notevole implementazione automatizzata dei controlli di gestione. Essi devono infatti rimanere coerenti nel tempo per tutto il ciclo vitale dell\u2019app;<\/li>\n<li>la <strong>comunicazione fra i servizi<\/strong> ha bisogno di ricevere particolare attenzione durante lo sviluppo, poich\u00e9 un qualunque errore pu\u00f2 tradursi in un\u2019esperienza negativa per l\u2019utente. Sono quindi necessari controlli certosini e misure specifiche;<\/li>\n<li>problemi nella <strong>coerenza dei dati<\/strong> trasmessi si possono verificare a causa dell\u2019enorme numero di database replicati e dello scambio continuo di informazioni fra servizi differenti.<\/li>\n<\/ul>\n<!--themify_builder_content-->\n<div id=\"themify_builder_content-13197\" data-postid=\"13197\" class=\"themify_builder_content themify_builder_content-13197 themify_builder tf_clear\">\n    <\/div>\n<!--\/themify_builder_content-->\n","protected":false},"excerpt":{"rendered":"<p>L\u2019architettura a microservizi \u00e8 un approccio rivoluzionario che permette lo sviluppo di app dinamiche, facili da gestire, aggiornare e potenziare. L\u2019idea \u00e8 quella di suddividere i servizi all\u2019interno della struttura, sviluppandoli separatamente in modo che essi possano occuparsi di un compito specifico, senza sovraccaricare il codice dell\u2019applicazione.<\/p>\n","protected":false},"author":10,"featured_media":13200,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"L\u2019architettura a microservizi \u00e8 un approccio rivoluzionario che permette lo sviluppo di app dinamiche, facili da gestire, aggiornare e potenziare. L\u2019idea \u00e8 quella di suddividere i servizi all\u2019interno della struttura, sviluppandoli separatamente in modo che essi possano occuparsi di un compito specifico, senza sovraccaricare il codice dell\u2019applicazione.","_seopress_robots_index":"","_seopress_analysis_target_kw":"microservizi","footnotes":""},"categories":[46],"tags":[],"class_list":["post-13197","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-coffee-break-it","has-post-title","has-post-date","has-post-category","has-post-tag","has-post-comment","has-post-author",""],"builder_content":"","_links":{"self":[{"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/posts\/13197","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/comments?post=13197"}],"version-history":[{"count":0,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/posts\/13197\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/media\/13200"}],"wp:attachment":[{"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/media?parent=13197"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/categories?post=13197"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unilab.eu\/it\/wp-json\/wp\/v2\/tags?post=13197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}