Tagliare per capacità di business
Definire i confini lungo domini e responsabilità chiare. Le parti tecniche che servono la stessa capacità di solito restano nello stesso servizio.
Versione italiana
Questa pagina raccoglie linee guida per microservizi e architettura event-driven: confini dei servizi, contratti degli eventi, osservabilità, deploy e responsabilità dei team.
Fondamenti
Un microservizio non è solo un piccolo deployable. Incapsula una capacità di business, la proprietà dei dati e una responsabilità operativa.
Definire i confini lungo domini e responsabilità chiare. Le parti tecniche che servono la stessa capacità di solito restano nello stesso servizio.
Ogni servizio possiede i propri dati. Gli altri servizi non leggono direttamente il suo database, ma usano API, eventi o read model replicati.
Usare le chiamate sincrone con cautela, definire timeout e fallback, ed evitare di pubblicare modelli interni come contratti.
Un servizio dovrebbe poter essere testato, deployato, scalato e ripristinato in modo indipendente. Le librerie condivise restano piccole.
Architettura event-driven
Gli eventi disaccoppiano i flussi, ma richiedono disciplina su contratti, idempotenza, ordine e gestione degli errori.
Un evento descrive ciò che è accaduto: OrderPlaced, PaymentCaptured o ContractCancelled. Non è una chiamata remota mascherata.
Gli schemi sono interfacce di produzione. Le modifiche vanno pianificate in modo compatibile, documentate e coperte da consumer test.
I consumer devono tollerare consegne duplicate. Event ID, Aggregate ID, Inbox/Outbox e retry tracciabili sono elementi chiave.
L’eventual consistency è una scelta di design. Interfacce, SLA e supporto devono rendere comprensibili ritardi e stati intermedi.
Operation
I sistemi distribuiti richiedono disciplina operativa. Senza osservabilità, ownership e resilienza, piccoli servizi creano grandi dipendenze.
Propagare metriche, log, trace e correlation ID attraverso servizi ed eventi. Le dashboard combinano segnali di business e tecnici.
Timeout, circuit breaker, bulkhead e dead-letter queue evitano guasti a cascata. I retry hanno limiti, backoff e alert chiari.
Test automatici, contract check, migrazioni e release progressive riducono il rischio. Il rollback deve essere una procedura normale.
Ogni servizio ha un team, un contatto, runbook, SLO e regole esplicite per breaking change.
Pratico
Queste domande rendono concrete le decisioni architetturali e mantengono visibili i rischi fin dall’inizio.