I sistemi distribuiti si rompono negli spazi intermedi: tra due servizi, tra un commit e un messaggio, tra un timeout e un nuovo tentativo. Noi progettiamo e ripariamo questi punti. Il nostro lavoro di architettura si conclude sempre con qualcosa di concreto: una decisione, un progetto che il vostro team può realizzare, oppure codice che scriviamo noi stessi.
Assessment architetturali
Esaminiamo come è strutturato un sistema, come gestisce dati e guasti, come viene costruito e gestito in esercizio. Leggiamo il codice, non solo i diagrammi, e parliamo con le persone che lo fanno funzionare. Il risultato è un breve elenco di rischi ordinati per impatto sul business, le decisioni che raccomandiamo e i compromessi che le motivano, registrati come architecture decision records che restano al vostro team.
Coerenza tra i servizi
Un ordine confermato senza che la merce sia mai stata riservata. Un pagamento addebitato due volte perché un nuovo tentativo è arrivato dopo un timeout. Uno stato diverso tra il CRM e il sistema centrale. Sono problemi di coerenza, e hanno soluzioni ben note: il transactional outbox, le chiavi di idempotenza, le saga con azioni di compensazione e i processi di riconciliazione dove la coerenza stretta è impossibile. Scegliamo il meccanismo più semplice che garantisca davvero la regola di business.
Sistemi event-driven e Kafka
Kafka è potente e non perdona. Progettiamo topic, partizionamento e chiavi per l'ordinamento che vi serve davvero, consumer group che scalano, strategie di retry e dead letter che non perdono dati, un'evoluzione degli schemi che non rompe i consumer e procedure di replay che potete eseguire con fiducia durante un incidente.
Resilienza e alta disponibilità
Timeout, retry con backoff, circuit breaker, bulkhead e load shedding: ognuno protegge da un guasto specifico e ognuno ha un costo. Li applichiamo dove i modi di guasto lo giustificano, li testiamo e facciamo in modo che una dipendenza lenta degradi una sola funzionalità invece dell'intera piattaforma. L'alta disponibilità si progetta attorno ai disservizi che potete realisticamente aspettarvi, non attorno a un diagramma.
Integrazioni e progettazione delle API
Le API tra team, partner e fornitori sono impegni di lungo periodo. Progettiamo contratti con una semantica degli errori chiara, versionamento e compatibilità all'indietro, e scegliamo consapevolmente tra chiamate sincrone e messaggistica asincrona. Abbiamo realizzato integrazioni con piattaforme bancarie, sistemi di trading, ERP e sistemi industriali, dove i formati dei dati sono rigidi e gli errori si vedono.
Scalabilità e affidabilità in produzione
Pianificazione della capacità basata su misure, test di carico che riproducono i flussi di traffico reali e un'osservabilità che permette di seguire una transazione di business attraverso i servizi. Gli obiettivi di livello di servizio sono utili quando orientano le decisioni: vi aiutiamo a definire i pochi che contano e gli alert che li accompagnano.