What is "eventual consistency"? How does it compare to "transactional consistency"? When does it happen?
I modelli di consistenza descrivono come un sistema (nominalmente un sistema distribuito) risponde al cambiamento.
- In un sistema alla fine coerente, tutti i nodi avranno finalmente una visione coerente dello stato generale del sistema. Tuttavia, ci sarà un periodo di tempo dopo il cambiamento iniziale in cui i diversi nodi avranno viste differenti dello stato.
- In un sistema coerente con le transazioni, il punto in cui tutti i nodi hanno una vista di stato coerente viene definito applicando i limiti transazionali alla modifica. O la transazione si completa o fallisce e la cosa che ha avviato la modifica saprà che cosa è successo. Tutti i nodi vedranno lo stesso stato sia prima che dopo il completamento della transazione.
Ecco un esempio del mondo reale: vai in banca e deposita un assegno. Hai avviato una modifica a due account: il tuo account e l'account della persona che ha scritto (emesso) il controllo.
- In un sistema coerente con le transazioni, l'aggiunta di fondi al tuo conto avviene contemporaneamente alla rimozione dei fondi dal conto di emissione. In nessun caso i fondi verranno visualizzati in entrambi i conti (o in nessuno dei due).
- In un sistema alla fine coerente, i fondi potrebbero essere aggiunti al tuo account prima che vengano addebitati dall'account di emissione. Durante alcuni periodi di tempo, entrambi i conti possono mostrare i fondi aggiunti.
Quest'ultimo scenario sembra molto spaventoso per la maggior parte delle persone. Ma è stato esattamente il modo in cui il sistema finanziario degli Stati Uniti ha funzionato per tutto il 20 ° secolo: hai depositato un assegno e quell'assegno è stato fisicamente trasportato alla banca emittente, che ha poi addebitato i soldi sul conto del cliente.
Quando si progetta il tuo sistema per essere infine coerente, devi essere a conoscenza dei problemi che possono sorgere da diversi nodi con differenti visioni di il mondo e prendi provvedimenti per compensare. Tuttavia, questa compensazione può portarti in una buca di topo se non stai attento; è facile spendere cifre esorbitanti per preparare il caso in cui l'aereo di linea che trasporta i controlli non ancora eliminati si blocca e brucia.
D'altra parte, con un sistema coerente alle transazioni, devi essere pronto per l'errore di qualsiasi nodo (o canale di comunicazione) per indicare l'errore dell'intero sistema (o almeno di ogni tentativo di transazione).