Svantaggi e complessità reali
1. Complessità operativa maggiore
Un monolite è semplice da deployare: accendi un server, ci metti la tua applicazione, funziona. Con i microservizi, ogni servizio ha il suo deploy, il suo ciclo di vita, la sua versione. Devi orchestrare, monitorare, aggiornare molte cose. Senza buoni strumenti (Kubernetes, Docker, automazione), diventa un caos.
2. Network complexity e latenza
Dentro un monolite, una funzione chiama un'altra e i dati passano in memoria: istantaneo. Con i microservizi, il servizio A chiama il servizio B tramite rete HTTP/gRPC: più lento, meno affidabile. Una catena di servizi significa round trip di rete multipli. Se uno è lento, tutto rallenta.
3. Debugging diventa un incubo
Con un monolite, un errore è in un punto. Con i microservizi, un bug potrebbe essere causato da interazioni tra servizi, timing, ordini di operazioni. Tracciare una singola operazione attraverso più servizi richiede distributed tracing, log centralizzati, monitoraggio sofisticato.
4. Gestione della coerenza dei dati
Con un database centralizzato, una transazione garantisce coerenza. Con i microservizi, ogni servizio ha il suo database. Se il servizio A aggiorna un cliente e il servizio B aggiorna i suoi ordini, come garantisci che i due dati rimangono coerenti se uno dei due fallisce? Serve application-level logic complessa (compensating transactions, saga pattern).
5. Non adatto a piccoli team o progetti semplici
Se sei una startup di poche persone che scrive una semplice app, i microservizi ti uccidono di overhead. Stai investendo gran parte del tempo a gestire infrastruttura e il resto a scrivere logica di business. È antieconomico.