Comunicazione sincrona vs asincrona: quando usare l'una o l'altra
La scelta dipende dal fatto che il client debba attendere una risposta prima di continuare.
Usa Sincrona (Request-Response) quando:
- Risultato immediato necessario: Azioni rivolte all'utente (login, ricerca, checkout) dove l'UI si blocca fino alla risposta del server.
- Integrità transazionale: Operazioni che richiedono garanzie ACID tra servizi (es. trasferimento fondi).
- Interazione in tempo reale: Chat, videochiamate, editing collaborativo, gaming — bassa latenza è critica.
- Orchestrazione semplice: Pochi servizi, latenza prevedibile.
Usa Asincrona (Event-Driven) quando:
- Elaborazione in background: Invio email, generazione report, elaborazione immagini, sincronizzazione dati — l'utente non aspetta.
- Disaccoppiamento e resilienza: I servizi comunicano tramite code di messaggi (Kafka, RabbitMQ) o bus di eventi; i guasti non si propagano immediatamente.
- Scalabilità: I consumatori si scalano indipendentemente; i picchi di traffico vengono assorbiti dalla coda.
- Flussi di lavoro di lunga durata: Evasione ordini, approvazione prestiti, provisioning multi-step.
Approccio ibrido
La maggior parte dei sistemi usa entrambi: sincrona per le API rivolte all'utente, asincrona per i flussi di lavoro interni. Scegli in base ai requisiti di latenza, esigenze di coerenza e semantica di fallimento.