{"id":585,"date":"2021-04-02T13:47:00","date_gmt":"2021-04-02T11:47:00","guid":{"rendered":"https:\/\/brentasoft.com\/blog\/microservizi-vs-monolite-guida-2021\/"},"modified":"2021-04-02T13:47:00","modified_gmt":"2021-04-02T11:47:00","slug":"microservizi-vs-monolite-guida-2021","status":"publish","type":"post","link":"https:\/\/brentasoft.com\/blog\/microservizi-vs-monolite-guida-2021\/","title":{"rendered":"Microservizi vs monolite: quale scegliere nel 2021"},"content":{"rendered":"<p><strong>Microservizi vs monolite<\/strong>: nel 2021 e&#8217; la domanda architetturale piu&#8217; dibattuta tra CTO, IT manager e developer senior. Da una parte i microservizi, presentati come la soluzione moderna a ogni problema di scalabilita&#8217;; dall&#8217;altra il vecchio caro monolite, dichiarato &#8220;morto&#8221; decine di volte e pero&#8217; ancora vivissimo in migliaia di aziende che funzionano benissimo.<\/p>\n<p>La verita&#8217;, come spesso accade nell&#8217;ingegneria del software, sta nel mezzo. Non esiste un&#8217;architettura &#8220;giusta&#8221; in assoluto: esiste un&#8217;architettura giusta per il <em>tuo<\/em> contesto, in <em>questo<\/em> momento, con <em>questo<\/em> team e <em>questo<\/em> budget. In questa guida vediamo le differenze concrete tra <strong>architettura microservizi<\/strong> e architettura monolitica, quando conviene davvero passare ai microservizi, quando il monolite e&#8217; ancora la scelta migliore e quali errori commettono piu&#8217; spesso le PMI italiane quando affrontano questa decisione.<\/p>\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1880\" height=\"1253\" src=\"https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/architettura-software-codice.jpg\" alt=\"Architettura software e codice su schermo\" class=\"wp-image-587\" srcset=\"https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/architettura-software-codice.jpg 1880w, https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/architettura-software-codice-300x200.jpg 300w, https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/architettura-software-codice-1024x682.jpg 1024w, https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/architettura-software-codice-768x512.jpg 768w, https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/architettura-software-codice-1536x1024.jpg 1536w\" sizes=\"(max-width: 1880px) 100vw, 1880px\" \/><figcaption>Architettura software: la struttura del codice determina costi e velocita di sviluppo per anni.<\/figcaption><\/figure>\n<h2>1. Microservizi vs monolite: il dibattito architetturale<\/h2>\n<p>Il termine &#8220;microservizi&#8221; e&#8217; stato reso popolare nel 2014 da <strong>Martin Fowler e James Lewis<\/strong> in un <a href=\"https:\/\/martinfowler.com\/articles\/microservices.html\" target=\"_blank\" rel=\"noopener\">articolo diventato pietra miliare<\/a>. Da allora, soprattutto tra il 2017 e il 2020, i microservizi sono diventati mainstream: Netflix, Amazon, Spotify, Uber e altri giganti hanno raccontato pubblicamente come hanno smontato i loro monoliti per costruire ecosistemi di centinaia (o migliaia) di servizi indipendenti.<\/p>\n<p>Il messaggio che e&#8217; arrivato alle PMI italiane, pero&#8217;, si e&#8217; spesso semplificato in slogan pericolosi: &#8220;il monolite e&#8217; morto&#8221;, &#8220;se non fai microservizi sei indietro&#8221;, &#8220;il cloud richiede microservizi&#8221;. Tutti slogan falsi. Nel 2021 la realta&#8217; e&#8217; molto piu&#8217; sfumata: aziende come <strong>Shopify, Basecamp, Stack Overflow<\/strong> continuano a usare con orgoglio architetture monolitiche modulari (DHH, creatore di Ruby on Rails, le chiama <em>&#8220;majestic monolith&#8221;<\/em>) e il nuovo trend e&#8217; il <strong>modular monolith<\/strong>, che cerca di prendere il meglio dei due mondi.<\/p>\n<p>Capire <strong>monolite o microservizi<\/strong> non e&#8217; una scelta di moda: e&#8217; una scelta strategica con impatti diretti su costi infrastruttura, velocita&#8217; di sviluppo, complessita&#8217; operativa e capacita&#8217; di scalare il team. Vediamo cosa significa davvero ciascuna delle due opzioni.<\/p>\n<h2>2. Cos&#8217;e&#8217; un&#8217;architettura monolitica (e quando funziona)<\/h2>\n<p>Un&#8217;<strong>architettura monolitica<\/strong> e&#8217; un&#8217;applicazione costruita come un singolo blocco unificato: tutto il codice (frontend, backend, logica di business, accesso al database) vive nello stesso codebase, viene compilato e rilasciato come un&#8217;unica unita&#8217; deployabile. Esempi tipici nel mondo italiano: un gestionale aziendale in Laravel, un e-commerce Magento, un ERP custom in Java o .NET, una web app Django.<\/p>\n<p>I monoliti hanno una pessima reputazione, ma e&#8217; bene chiarire un punto: <strong>&#8220;monolite&#8221; non significa &#8220;spaghetti code&#8221;<\/strong>. Un monolite ben fatto puo&#8217; essere modulare, testabile, manutenibile e scalabile per anni. La maggior parte delle applicazioni di successo e&#8217; partita come monolite e per molte di esse il monolite e&#8217; rimasto la scelta migliore anche dopo il successo.<\/p>\n<p><strong>Caratteristiche tipiche di un monolite:<\/strong><\/p>\n<ul>\n<li>Un solo codebase, una sola repository, una sola pipeline CI\/CD<\/li>\n<li>Un unico processo runtime (o pochi, se in cluster con load balancer)<\/li>\n<li>Un database condiviso (tipicamente relazionale: MySQL, PostgreSQL, SQL Server)<\/li>\n<li>Comunicazione interna tramite chiamate di funzione in-process (zero latenza di rete)<\/li>\n<li>Deploy &#8220;tutto-o-niente&#8221;: rilasci l&#8217;intera applicazione, non singoli moduli<\/li>\n<\/ul>\n<p>Quando funziona benissimo? Quando il dominio applicativo e&#8217; coerente, il team e&#8217; piccolo (1-15 sviluppatori), il carico e&#8217; prevedibile e l&#8217;azienda non ha esigenze di scalabilita&#8217; selettiva. La maggior parte dei <a href=\"https:\/\/brentasoft.com\/soluzioni\/gestionali-personalizzati.php\">gestionali personalizzati<\/a> per PMI italiane rientra in questa categoria e funziona perfettamente come monolite.<\/p>\n<h2>3. Cos&#8217;e&#8217; un&#8217;architettura a microservizi<\/h2>\n<p>L&#8217;<strong>architettura microservizi<\/strong> rovescia il paradigma: invece di un singolo blocco, l&#8217;applicazione viene scomposta in tanti servizi piccoli, autonomi, ciascuno con una sua responsabilita&#8217; precisa, un suo team, un suo database e un suo ciclo di rilascio indipendente.<\/p>\n<p>Un classico esempio: invece di avere un unico e-commerce monolitico, hai un servizio &#8220;catalogo prodotti&#8221;, un servizio &#8220;carrello&#8221;, un servizio &#8220;ordini&#8221;, un servizio &#8220;pagamenti&#8221;, un servizio &#8220;spedizioni&#8221;, un servizio &#8220;notifiche email&#8221;. Ognuno gira in un suo container, ognuno espone API REST o gRPC, ognuno puo&#8217; essere scritto in un linguaggio diverso, ognuno puo&#8217; essere rilasciato senza toccare gli altri.<\/p>\n<p><strong>Caratteristiche distintive dei microservizi:<\/strong><\/p>\n<ul>\n<li><strong>Single responsibility<\/strong>: ogni servizio fa una cosa sola e la fa bene<\/li>\n<li><strong>Database per service<\/strong>: ogni servizio possiede il suo database, nessuno accede direttamente ai dati altrui<\/li>\n<li><strong>Comunicazione via rete<\/strong>: API HTTP\/REST, gRPC, code di messaggi (RabbitMQ, Kafka)<\/li>\n<li><strong>Deploy indipendente<\/strong>: rilascio del servizio &#8220;ordini&#8221; senza toccare &#8220;catalogo&#8221;<\/li>\n<li><strong>Team autonomi<\/strong>: un team possiede un servizio dall&#8217;inizio alla fine (Conway&#8217;s Law applicata)<\/li>\n<li><strong>Polyglot<\/strong>: liberta&#8217; di usare lo stack tecnologico migliore per ciascun servizio<\/li>\n<\/ul>\n<p>Wikipedia definisce i <a href=\"https:\/\/it.wikipedia.org\/wiki\/Microservizi\" target=\"_blank\" rel=\"noopener\">microservizi<\/a> come &#8220;un approccio architetturale per la creazione di un&#8217;applicazione come insieme di piccoli servizi autonomi, modellati attorno a un dominio di business&#8221;. E&#8217; una definizione corretta ma asciutta: la realta&#8217; operativa e&#8217; molto piu&#8217; complessa, come vedremo.<\/p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1880\" height=\"1253\" src=\"https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/team-architettura-software.jpg\" alt=\"Team di developer in riunione su architettura software\" class=\"wp-image-588\" srcset=\"https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/team-architettura-software.jpg 1880w, https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/team-architettura-software-300x200.jpg 300w, https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/team-architettura-software-1024x682.jpg 1024w, https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/team-architettura-software-768x512.jpg 768w, https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/team-architettura-software-1536x1024.jpg 1536w\" sizes=\"(max-width: 1880px) 100vw, 1880px\" \/><figcaption>Conway s Law: l architettura del software riflette inevitabilmente l organizzazione del team.<\/figcaption><\/figure>\n<h2>4. Le 7 differenze chiave tra monolite e microservizi<\/h2>\n<p>Vediamo in modo concreto le differenze operative tra le due architetture, perche&#8217; e&#8217; qui che si gioca la decisione vera.<\/p>\n<h3>4.1 Deployment<\/h3>\n<p><strong>Monolite<\/strong>: un solo artefatto da deployare. Una pipeline CI\/CD, un solo deploy, semplicita&#8217; operativa massima. Lo svantaggio: se vuoi cambiare una virgola nel modulo &#8220;fatturazione&#8221; devi rilasciare tutta l&#8217;applicazione.<br \/>\n<strong>Microservizi<\/strong>: deploy indipendenti per ogni servizio. Cambi solo il servizio &#8220;fatturazione&#8221; e lo rilasci da solo. Vantaggio enorme per team grandi. Svantaggio: 30 servizi = 30 pipeline CI\/CD da gestire.<\/p>\n<h3>4.2 Scaling<\/h3>\n<p><strong>Monolite<\/strong>: scali tutto insieme (scaling orizzontale dell&#8217;intero blocco). Se solo il modulo &#8220;ricerca&#8221; e&#8217; sotto stress, devi comunque replicare tutta l&#8217;app. Inefficiente quando il carico e&#8217; molto sbilanciato tra moduli.<br \/>\n<strong>Microservizi<\/strong>: scaling selettivo. Il servizio &#8220;ricerca&#8221; puo&#8217; avere 20 repliche, &#8220;amministrazione&#8221; solo 1. Ottimizza l&#8217;uso delle risorse cloud. La <strong>scalabilita&#8217; software architettura<\/strong> a microservizi e&#8217; qui che brilla davvero.<\/p>\n<h3>4.3 Team<\/h3>\n<p><strong>Monolite<\/strong>: tutti i developer lavorano sullo stesso codebase. Ottimo fino a 10-15 persone, sopra inizia il caos: merge conflict, rilasci bloccati, decisioni architetturali contese.<br \/>\n<strong>Microservizi<\/strong>: ogni team possiede 1-3 servizi (la regola &#8220;two-pizza team&#8221; di Amazon). Autonomia massima, ma serve cultura e processi maturi.<\/p>\n<h3>4.4 Technology stack<\/h3>\n<p><strong>Monolite<\/strong>: un solo stack. Cambiare linguaggio significa riscrivere tutto. Vincolo, ma anche coerenza.<br \/>\n<strong>Microservizi<\/strong>: liberta&#8217; totale. Servizio A in Node.js, B in Python, C in Go. Vantaggio per casi specifici, ma attenzione alla &#8220;zoo tecnologica&#8221;: ogni stack richiede competenze diverse, monitoring diverso, sicurezza diversa.<\/p>\n<h3>4.5 Data<\/h3>\n<p><strong>Monolite<\/strong>: un database condiviso. Transazioni ACID semplici, JOIN tra entita&#8217; immediati, consistenza dei dati garantita dal DB. Modello concettualmente piu&#8217; semplice.<br \/>\n<strong>Microservizi<\/strong>: <em>database per service<\/em>. Niente JOIN tra servizi, transazioni distribuite (Saga pattern), eventual consistency. La gestione dei dati diventa il problema architetturale piu&#8217; complesso.<\/p>\n<h3>4.6 Complexity<\/h3>\n<p><strong>Monolite<\/strong>: complessita&#8217; tutta dentro il codice (rischio: spaghetti se mal gestito).<br \/>\n<strong>Microservizi<\/strong>: complessita&#8217; spostata sull&#8217;infrastruttura (Kubernetes, service mesh, distributed tracing, network policies, certificati TLS interni). Il codice di ciascun servizio e&#8217; semplice; l&#8217;ecosistema che li tiene insieme e&#8217; molto complesso.<\/p>\n<h3>4.7 Communication<\/h3>\n<p><strong>Monolite<\/strong>: chiamate di funzione in-process. Zero latenza, debug banale con uno stack trace.<br \/>\n<strong>Microservizi<\/strong>: chiamate di rete. Latenza, timeout, retry, circuit breaker, idempotenza, tracciamento distribuito. Un singolo &#8220;click utente&#8221; puo&#8217; attraversare 10 servizi: capire perche&#8217; qualcosa fallisce diventa un&#8217;arte.<\/p>\n<h2>5. I 5 vantaggi dei microservizi<\/h2>\n<p>I microservizi non sono moda: in certi contesti danno vantaggi reali e misurabili. Ecco i cinque piu&#8217; importanti nel 2021.<\/p>\n<ol>\n<li><strong>Scalabilita&#8217; selettiva e ottimizzazione costi cloud<\/strong>: scali solo i servizi che ne hanno bisogno, riduci la spesa AWS\/Azure\/GCP. Per app con carichi molto sbilanciati (es. e-commerce con picchi sul checkout in Black Friday) puo&#8217; significare risparmi del 30-50%.<\/li>\n<li><strong>Indipendenza dei team<\/strong>: 50 sviluppatori in 8 team possono rilasciare in produzione senza coordinarsi tra loro. Velocita&#8217; di sviluppo che un monolite non puo&#8217; eguagliare.<\/li>\n<li><strong>Resilienza<\/strong>: un servizio che cade non abbatte tutto il sistema. Se il servizio &#8220;wishlist&#8221; ha un bug, il checkout continua a funzionare. Con il pattern <em>circuit breaker<\/em> isoli i fallimenti.<\/li>\n<li><strong>Tecnologia ottimale per problema<\/strong>: il servizio &#8220;ricerca&#8221; puo&#8217; usare Elasticsearch, &#8220;raccomandazioni&#8221; Python con Pandas, &#8220;pagamenti&#8221; Java per le librerie bancarie. Niente compromessi tecnologici globali.<\/li>\n<li><strong>Riscrittura graduale<\/strong>: vuoi modernizzare un&#8217;area legacy? Riscrivi un solo servizio mentre gli altri restano in piedi. Strategia chiamata &#8220;strangler fig pattern&#8221;, coniata da Martin Fowler.<\/li>\n<\/ol>\n<h2>6. I 5 svantaggi e la complessita&#8217; nascosta<\/h2>\n<p>Ora la parte che gli evangelisti dei microservizi sottovalutano sempre. I vantaggi sopra hanno un prezzo molto alto, e per molte PMI italiane il prezzo non e&#8217; giustificato.<\/p>\n<ol>\n<li><strong>Complessita&#8217; operativa esplosiva<\/strong>: Kubernetes, Helm, service mesh (Istio\/Linkerd), API Gateway (Kong\/Tyk), distributed tracing (Jaeger\/Zipkin), centralized logging (ELK), service discovery, secret management. Hai bisogno di un team DevOps\/SRE dedicato. Costo: 2-4 figure senior aggiuntive.<\/li>\n<li><strong>Latenza di rete<\/strong>: chiamate che in un monolite sono nanosecondi, qui sono millisecondi. Una richiesta utente puo&#8217; attraversare 8-12 servizi, ognuno aggiunge latenza. Le performance peggiorano se non disegnate con cura.<\/li>\n<li><strong>Distributed transactions<\/strong>: la transazione ACID che davi per scontata sparisce. Devi implementare Saga pattern, compensating transactions, idempotenza. Bug sottili in produzione, difficili da riprodurre.<\/li>\n<li><strong>Debugging e osservabilita&#8217;<\/strong>: capire perche&#8217; una richiesta e&#8217; lenta in un sistema con 30 servizi richiede strumenti dedicati e cultura ingegneristica matura. &#8220;Funziona sul mio PC&#8221; non esiste piu&#8217;, perche&#8217; nessuno ha 30 servizi sul suo PC.<\/li>\n<li><strong>Costo infrastrutturale piu&#8217; alto<\/strong>: ogni servizio e&#8217; un container in piu&#8217;, ogni database e&#8217; un costo cloud in piu&#8217;, ogni comunicazione di rete genera traffico. Per workload piccoli, un monolite costa molto meno.<\/li>\n<\/ol>\n<p>Sam Newman, autore di &#8220;Building Microservices&#8221;, ha sintetizzato bene il punto in una conferenza del 2020: <em>&#8220;I microservizi sono uno strumento per gestire la complessita&#8217; organizzativa, non un modo per evitare la complessita&#8217; tecnica. La complessita&#8217; totale aumenta sempre.&#8221;<\/em><\/p>\n<h2>7. Quando scegliere i microservizi (i casi tipici)<\/h2>\n<p>I microservizi sono la scelta giusta quando si verificano <strong>contemporaneamente<\/strong> piu&#8217; delle seguenti condizioni:<\/p>\n<ul>\n<li><strong>Team grande<\/strong>: 30+ sviluppatori, organizzati in piu&#8217; team che faticano a coordinarsi su un unico codebase<\/li>\n<li><strong>Carichi molto sbilanciati<\/strong>: parti del sistema con traffico 100x rispetto ad altre, dove il scaling selettivo paga davvero<\/li>\n<li><strong>Domini di business chiaramente separati<\/strong>: aree applicative con confini netti, modellabili come <em>bounded context<\/em> del Domain Driven Design<\/li>\n<li><strong>Necessita&#8217; di rilasci frequenti e indipendenti<\/strong>: deploy multipli al giorno per area, dove un release train monolitico diventerebbe collo di bottiglia<\/li>\n<li><strong>Cultura DevOps matura<\/strong>: il team sa gia&#8217; gestire CI\/CD, container, monitoring, observability<\/li>\n<li><strong>Budget infrastrutturale e di personale<\/strong>: hai i soldi per pagare il sovraccarico operativo (almeno 2-3 SRE\/DevOps senior)<\/li>\n<li><strong>Esigenze di stack diversificati<\/strong>: hai problemi che si risolvono molto meglio con linguaggi\/runtime specifici diversi<\/li>\n<\/ul>\n<p>Esempi italiani reali nel 2021: Satispay, Bending Spoons, ShippyPro, Velasca lato backend, alcuni team in Generali e Intesa SanPaolo. Tutte realta&#8217; con team da 50+ developer e carichi che giustificano l&#8217;investimento.<\/p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1880\" height=\"1255\" src=\"https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/cluster-microservizi-cloud.jpg\" alt=\"Cluster di server cloud per microservizi\" class=\"wp-image-589\" srcset=\"https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/cluster-microservizi-cloud.jpg 1880w, https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/cluster-microservizi-cloud-300x200.jpg 300w, https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/cluster-microservizi-cloud-1024x684.jpg 1024w, https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/cluster-microservizi-cloud-768x513.jpg 768w, https:\/\/brentasoft.com\/blog\/wp-content\/uploads\/2021\/04\/cluster-microservizi-cloud-1536x1025.jpg 1536w\" sizes=\"(max-width: 1880px) 100vw, 1880px\" \/><figcaption>Cluster Kubernetes: il prezzo dei microservizi e una infrastruttura cloud complessa da governare.<\/figcaption><\/figure>\n<h2>8. Quando il monolite e&#8217; ancora la scelta giusta (il &#8220;majestic monolith&#8221;)<\/h2>\n<p>Per la stragrande maggioranza delle PMI italiane, nel 2021, il monolite ben fatto e&#8217; ancora la scelta giusta. DHH (David Heinemeier Hansson), creatore di Ruby on Rails, l&#8217;ha chiamato <strong>&#8220;the majestic monolith&#8221;<\/strong> e ha scritto pagine memorabili spiegando perche&#8217; Basecamp continua a essere un monolite Rails dopo 17 anni e milioni di utenti.<\/p>\n<p>Il monolite e&#8217; la scelta giusta quando:<\/p>\n<ul>\n<li>Il team e&#8217; piccolo (1-15 sviluppatori)<\/li>\n<li>Il prodotto e&#8217; nelle fasi iniziali (MVP, prodotto-market fit non ancora trovato)<\/li>\n<li>I confini del dominio non sono ancora chiari (decomporre prematuramente e&#8217; un disastro)<\/li>\n<li>Il budget operativo non puo&#8217; sostenere infrastrutture complesse<\/li>\n<li>Le esigenze di scaling sono moderate e prevedibili<\/li>\n<li>La cultura ingegneristica e&#8217; acerba sui temi DevOps\/observability<\/li>\n<\/ul>\n<p>Errore tipico: una PMI con 5 sviluppatori che decide di &#8220;partire microservizi dall&#8217;inizio perche&#8217; tanto cresceremo&#8221;. Risultato quasi garantito: progetto in ritardo di 6-12 mesi, costi cloud tripli, sviluppatori che spendono il 60% del tempo a debuggare problemi distribuiti invece di costruire feature di business. Le <a href=\"https:\/\/brentasoft.com\/soluzioni\/web-app-pwa.php\">web app e PWA<\/a> per PMI partono quasi sempre come monoliti, ed e&#8217; la scelta corretta.<\/p>\n<h2>9. Il pattern intermedio: modular monolith<\/h2>\n<p>La grande riscoperta del 2020-2021 e&#8217; il <strong>modular monolith<\/strong>: un monolite organizzato internamente in moduli con confini netti (come fossero microservizi), ma deployato come singolo artefatto. E&#8217; la scelta che molti team consigliano oggi come <em>default<\/em> per progetti nuovi, soprattutto in PMI.<\/p>\n<p>Caratteristiche del modular monolith:<\/p>\n<ul>\n<li>Un solo deploy, un solo database (semplicita&#8217; operativa)<\/li>\n<li>Codice organizzato per <strong>bounded context<\/strong> (DDD): modulo &#8220;ordini&#8221; non puo&#8217; chiamare direttamente codice del modulo &#8220;magazzino&#8221;, deve passare da API interne<\/li>\n<li>Database con schemi separati per modulo (logica di &#8220;database per service&#8221; applicata internamente)<\/li>\n<li>Pronto per essere &#8220;spezzato&#8221; in microservizi se e quando servira&#8217; davvero<\/li>\n<\/ul>\n<p>Stack tipici nel 2021: Laravel con moduli ben separati, Spring Boot con multi-module Maven, .NET con Clean Architecture e bounded context. Aziende come <strong>Shopify<\/strong> (Ruby on Rails) hanno reso famoso questo approccio dimostrando che si puo&#8217; arrivare a centinaia di milioni di utenti con un monolite ben organizzato.<\/p>\n<p>Il modular monolith e&#8217; la scelta che noi di Brentasoft suggeriamo nel 95% dei progetti per PMI italiane. Ti da i benefici della modularita&#8217; (codice pulito, team che lavorano in parallelo) senza il costo dei microservizi (DevOps complesso, latenza, transazioni distribuite).<\/p>\n<h2>10. Tecnologie 2021 per microservizi (Docker, Kubernetes, service mesh)<\/h2>\n<p>Se hai deciso che i microservizi fanno per te, ecco lo stack tecnologico mainstream nel 2021. Conoscerlo aiuta anche a misurare il <em>costo<\/em> dell&#8217;investimento.<\/p>\n<p><strong>Containerizzazione e orchestrazione:<\/strong><\/p>\n<ul>\n<li><strong>Docker<\/strong>: ormai standard di fatto, ogni microservizio gira in un container<\/li>\n<li><strong>Kubernetes<\/strong>: orchestratore dominante (oltre l&#8217;80% del mercato secondo CNCF Survey 2020). Gestisce scheduling, scaling, self-healing dei container<\/li>\n<li><strong>Managed Kubernetes<\/strong>: AWS EKS, Azure AKS, Google GKE. Eviti di gestire il control plane, paghi un sovrapprezzo<\/li>\n<li><strong>Alternative serverless<\/strong>: AWS ECS Fargate, Azure Container Instances, Google Cloud Run per workload meno orchestrati<\/li>\n<\/ul>\n<p><strong>Service mesh (gestione comunicazione tra servizi):<\/strong><\/p>\n<ul>\n<li><strong>Istio<\/strong>: il piu&#8217; diffuso, ricco ma complesso. Gestisce mTLS, traffic management, observability<\/li>\n<li><strong>Linkerd<\/strong>: piu&#8217; leggero, ottimo per team che non vogliono la complessita&#8217; di Istio<\/li>\n<li><strong>Consul Connect<\/strong> (HashiCorp): integrato con Consul per service discovery<\/li>\n<\/ul>\n<p><strong>API Gateway:<\/strong><\/p>\n<ul>\n<li><strong>Kong<\/strong>: open source, basato su Nginx, plugin ecosystem ricco<\/li>\n<li><strong>Tyk<\/strong>: alternativa europea, ottima documentazione<\/li>\n<li><strong>AWS API Gateway, Azure API Management, Google Apigee<\/strong>: managed services dei cloud provider<\/li>\n<\/ul>\n<p><strong>Comunicazione asincrona:<\/strong> RabbitMQ, Apache Kafka, AWS SQS\/SNS. Per pattern come event-driven architecture e Saga.<\/p>\n<p><strong>Observability stack:<\/strong> Prometheus + Grafana per metriche, ELK (Elasticsearch + Logstash + Kibana) per logging centralizzato, Jaeger o Zipkin per distributed tracing, Sentry per error tracking. Per <a href=\"https:\/\/brentasoft.com\/soluzioni\/integrazione-api.php\">integrazione API<\/a> tra microservizi e sistemi esterni: OpenAPI\/Swagger per i contratti, AsyncAPI per gli eventi.<\/p>\n<p>Questo stack e&#8217; potente ma costoso da padroneggiare. Aspettati 6-12 mesi prima che un team senza esperienza precedente lo gestisca con fluidita&#8217;.<\/p>\n<h2>11. Errori frequenti delle PMI quando passano a microservizi<\/h2>\n<p>Negli ultimi 4 anni abbiamo visto decine di PMI italiane intraprendere il viaggio verso i microservizi, spesso con risultati deludenti. Ecco gli errori piu&#8217; frequenti, in ordine di pericolosita&#8217;.<\/p>\n<p><strong>1. Iniziare con i microservizi un progetto greenfield.<\/strong> Senza un dominio chiaro, decomponi su confini sbagliati. Risultato: <em>distributed monolith<\/em>, il peggio dei due mondi. La regola di Martin Fowler &#8220;monolith first&#8221; resta valida.<\/p>\n<p><strong>2. Spezzare il monolite per moda, non per necessita&#8217;.<\/strong> Se non hai un problema concreto che il monolite non puo&#8217; risolvere, il refactoring verso microservizi e&#8217; uno spreco. &#8220;Migliorare il codice&#8221; non e&#8217; una motivazione sufficiente.<\/p>\n<p><strong>3. Decomporre per layer tecnologico invece che per dominio.<\/strong> Errore classico: un servizio &#8220;database&#8221;, uno &#8220;frontend&#8221;, uno &#8220;backend&#8221;. Sbagliato: i confini devono seguire il <em>business<\/em>, non l&#8217;architettura tecnica.<\/p>\n<p><strong>4. Database condiviso tra microservizi.<\/strong> &#8220;Tanto risparmiamo costi&#8221;. No: appena due servizi accedono allo stesso DB hai un monolite mascherato, peggio del precedente.<\/p>\n<p><strong>5. Sottovalutare il costo DevOps.<\/strong> Pensare che bastino 2 sviluppatori per gestire Kubernetes in produzione 24\/7. Spoiler: non basta. Servono SRE dedicati, on-call rotation, runbook.<\/p>\n<p><strong>6. Non investire in observability.<\/strong> Senza tracing distribuito e logging centralizzato, un sistema a microservizi e&#8217; debugabile come una macchina nera in fiamme. Strumenti dal giorno uno, non dopo il primo incidente.<\/p>\n<p><strong>7. Decomporre senza modello dei dati.<\/strong> Senza Domain Driven Design e bounded context, ti ritrovi a fare JOIN distribuiti tra 5 servizi per mostrare una pagina. Performance disastrose.<\/p>\n<p>Una <a href=\"https:\/\/brentasoft.com\/soluzioni\/software-cloud.php\">soluzione cloud aziendale<\/a> ben fatta ti permette di iniziare con un monolite, scalarlo orizzontalmente, e migrare gradualmente verso microservizi solo dove e quando serve davvero. E&#8217; la strada che consigliamo alle PMI italiane nel 2021.<\/p>\n<h2>12. Domande frequenti<\/h2>\n<h3>I microservizi sono sempre piu&#8217; veloci di un monolite?<\/h3>\n<p>No, anzi: nella maggior parte dei casi sono <em>piu&#8217; lenti<\/em> per singola richiesta a causa della latenza di rete. Sono piu&#8217; performanti su <em>throughput aggregato<\/em> grazie al scaling selettivo e parallelo. La velocita&#8217; percepita dall&#8217;utente dipende molto dal disegno architetturale.<\/p>\n<h3>Quanto costa passare da monolite a microservizi per una PMI?<\/h3>\n<p>Per una PMI italiana media (gestionale interno, 10-30k linee di codice, 5-10 utenti concorrenti) il costo realistico e&#8217; tra 80.000 e 250.000 euro nel primo anno, considerando refactoring, infrastruttura cloud aggiuntiva, formazione team, eventuali consulenze esterne. Ed e&#8217; un costo che spesso non porta benefici proporzionati.<\/p>\n<h3>Kubernetes e&#8217; obbligatorio per i microservizi?<\/h3>\n<p>No. Si possono fare microservizi anche con Docker Swarm, AWS ECS, Nomad di HashiCorp, o servizi managed come AWS App Runner o Google Cloud Run. Kubernetes e&#8217; lo standard di fatto, ma per piccoli numeri di servizi alternative piu&#8217; semplici sono spesso preferibili.<\/p>\n<h3>Posso fare microservizi senza cloud?<\/h3>\n<p>Tecnicamente si&#8217;, ma e&#8217; molto piu&#8217; costoso e complesso. Il cloud (con servizi managed di Kubernetes, database, code, observability) abbatte drasticamente il costo operativo. Microservizi on-premise nel 2021 hanno senso solo per ragioni di compliance\/sovranita&#8217; del dato molto stringenti.<\/p>\n<h3>Quanti microservizi sono &#8220;troppi&#8221;?<\/h3>\n<p>Non c&#8217;e&#8217; un numero magico, ma una regola empirica: <strong>meno servizi che team<\/strong> e&#8217; generalmente sano (1-3 servizi per team). Se hai 100 servizi e 10 sviluppatori, hai un problema (lo stesso vale al contrario: 1 servizio per 50 developer e&#8217; un altro problema).<\/p>\n<h3>Modular monolith o microservizi? Quale scelgo nel 2021?<\/h3>\n<p>Se sei una PMI con meno di 30 sviluppatori e non hai problemi di scaling concreti misurati, modular monolith. Quasi sempre. Puoi sempre migrare verso microservizi dopo, quando avrai dati e necessita&#8217; reali, non ipotetiche. Il viaggio inverso (microservizi -> monolite) e&#8217; invece quasi sempre doloroso.<\/p>\n<h2>Conclusione: la decisione e&#8217; di contesto, non ideologica<\/h2>\n<p>Tornando alla domanda iniziale: <strong>microservizi vs monolite<\/strong>? La risposta seria e&#8217; &#8220;dipende&#8221;. Dipende dal team, dal dominio, dal carico, dal budget, dalla maturita&#8217; DevOps. Chiunque ti dica &#8220;microservizi sempre&#8221; o &#8220;monolite sempre&#8221; sta vendendo dogmi, non architettura.<\/p>\n<p>Nel 2021, la nostra raccomandazione per la maggior parte delle PMI italiane e&#8217; chiara: <strong>parti modular monolith<\/strong>, costruisci confini puliti tra moduli, misura, e migra a microservizi solo gli specifici componenti che hanno bisogno reale di scalabilita&#8217; indipendente o team autonomi. Eviterai mesi di sofferenza inutile e arriverai prima sul mercato.<\/p>\n<p>Se vuoi approfondire i temi correlati: abbiamo scritto una guida completa su <a href=\"https:\/\/brentasoft.com\/blog\/sviluppo-software-custom-pmi-quando-conviene\/\">sviluppo software custom per PMI: quando conviene davvero<\/a> e su <a href=\"https:\/\/brentasoft.com\/blog\/saas-vs-on-premise-pmi-guida\/\">SaaS vs on-premise per PMI<\/a>, due decisioni architetturali strettamente collegate alla scelta tra monolite e microservizi.<\/p>\n<div style=\"background:#f5f7fa;border-left:4px solid #0066cc;padding:20px;margin:30px 0;border-radius:4px;\">\n<h3 style=\"margin-top:0;\">Stai progettando un&#8217;architettura software per la tua azienda?<\/h3>\n<p>Brentasoft sviluppa applicazioni custom per PMI italiane: monoliti modulari ben fatti, microservizi quando necessari, su stack moderni (PHP\/Laravel, Python, Node.js, Docker, Kubernetes).<\/p>\n<p style=\"margin-bottom:0;\"><a href=\"https:\/\/brentasoft.com\/erp-brenta.php\" style=\"display:inline-block;background:#0066cc;color:#fff;padding:12px 24px;border-radius:4px;text-decoration:none;font-weight:600;\">Scopri ERP Brenta &rarr;<\/a><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Microservizi vs monolite nel 2021: differenze chiave, vantaggi, svantaggi, quando scegliere ognuno e perche&#8217; il modular monolith e&#8217; spesso la scelta giusta.<\/p>\n","protected":false},"author":2,"featured_media":586,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"Microservizi vs monolite: quale scegliere nel 2021","_seopress_titles_desc":"Microservizi vs monolite nel 2021: differenze chiave, vantaggi, svantaggi e quando scegliere ognuno. Guida tecnica per CTO e IT manager PMI.","_seopress_robots_index":"0","footnotes":""},"categories":[9],"tags":[296,297,298,294,295,299,94],"class_list":["post-585","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guide-e-tutorial","tag-architettura-software","tag-docker","tag-kubernetes","tag-microservizi","tag-monolite","tag-scalabilita","tag-sviluppo-software"],"_links":{"self":[{"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/posts\/585","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/comments?post=585"}],"version-history":[{"count":0,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/posts\/585\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/media\/586"}],"wp:attachment":[{"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/media?parent=585"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/categories?post=585"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/brentasoft.com\/blog\/wp-json\/wp\/v2\/tags?post=585"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}