Qual è la consistenza finale?

2

Ho sentito persone parlare di "coerenza finale" (ad esempio in questa domanda e questa risposta ).

Che cos'è la "consistenza finale"? Come si confronta con "consistenza transazionale"? Quando succede?

Che tipo di impatto ha la coerenza finale sulla progettazione dei sistemi che ne sono influenzati? Come può essere mitigato fornire una buona esperienza utente?

    
posta Benjamin Hodgson 02.01.2015 - 22:46
fonte

2 risposte

13

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).

    
risposta data 02.01.2015 - 23:35
fonte
1

Per farla breve:

La coerenza

Transazionale si verifica quando carichi l'aggregato, lo cambi e lo salvi di nuovo in un'unica transazione

questa è la consistenza della transazione

Quando è necessario coinvolgere più aggregati (modificati), alcuni processi aziendali possono coinvolgere anche da diversi contesti limitati. Si aggiorna a livello transazionale l'aggregato locale e l'evento di archiviazione, si pubblica l'evento sulla modifica, quindi (in modo asincrono: ad esempio tramite il broker dei messaggi) il secondo contesto limitato (o anche locale) riceverà l'evento su tale modifica e alla fine secondo aggregato secondario .

questa è la consistenza finale , perché alla fine (non atomicamente) la consistenza si verificherà in un certo tempo ... Può essere millisecondo, può essere ore / giorni ..

    
risposta data 26.09.2017 - 15:26
fonte