La comunicazione sincrona blocca il chiamante finché non arriva una risposta; la comunicazione asincrona invia un messaggio e continua senza attendere. Ognuna presenta compromessi diversi in termini di accoppiamento, latenza e resilienza.
La comunicazione sincrona blocca il chiamante finché non arriva una risposta; la comunicazione asincrona invia un messaggio e continua senza attendere. Ognuna presenta compromessi diversi in termini di accoppiamento, latenza e resilienza.
| Aspetto | Sincrona (REST/gRPC) | Asincrona (messaging) |
|---|
| Il chiamante aspetta? | Sì | No |
| Accoppiamento temporale | Stretto | Lasco |
| Resilienza ai guasti | Bassa | Alta (il broker memorizza) |
| Coerenza | Immediata | Eventuale |
| Complessità | Inferiore | Superiore |
| Debuggabilità | Più facile (lineare) | Più difficile (flussi) |
SYNC: Caller ──request──▶ Service
Caller ◀─response── Service (blocked the whole time)
ASYNC: Caller ──message──▶ [ Queue ] ──▶ Service
Caller continues immediately; Service handles it later
Async nasconde i guasti — un messaggio perso o tossico può interrompere silenziosamente un flusso di lavoro. Hai bisogno di code di lettere morte e monitoraggio.
La scelta controlla direttamente come si propagano i guasti: le chiamate sync falliscono rapidamente e visibilmente, i messaggi async disaccoppiano ma rimandano i problemi ai consumer.
Miscelare bene — sync al bordo, async per i flussi di lavoro — è un'abilità fondamentale nella costruzione di microservizi resilienti.