8

Quando si esegue un'applicazione Web in una farm che utilizza un datastore distribuito che è alla fine coerente (CouchDB nel mio caso), dovrei garantire che un determinato utente sia sempre indirizzato alla stessa istanza del datastore?Gli utenti devono essere indirizzati a nodi dati specifici quando si utilizza un archivio dati eventualmente coerente?

Mi sembra che l'approccio alternativo, in cui qualsiasi richiesta Web possa utilizzare qualsiasi archivio dati, aggiunga una notevole complessità per gestire problemi di coerenza (tentativi, verifiche, ecc.). D'altra parte, se un utente in una data sessione è sempre diretto allo stesso nodo divano, i miei problemi di coerenza non ruotano principalmente attorno ai dati utente "condivisi" e quindi sono notevolmente semplificati?

Sono anche curioso di strategie per dirigere gli utenti ma forse lo terrò per un'altra domanda (commenti benvenuti).

risposta

2

Secondo lo CAP Theorem, i sistemi distribuiti possono avere una coerenza completa (tutti i nodi vedono gli stessi dati contemporaneamente) o la disponibilità (ogni richiesta riceve una risposta). Dovrai scambiarne uno per l'altro durante una partizione o un errore dell'istanza del datastore.


Dovrei assicurando che un determinato utente è sempre diretta al medesimo dell'istanza datastore?

Idealmente, non dovresti! Cosa farai quando l'istanza data fallirà? Una caratteristica importante di un datastore distribuito deve essere disponibile nonostante gli errori di rete o di istanza.


Se un utente in una determinata sessione è sempre rivolta allo stesso nodo divano, i miei problemi di coerenza non ruotano principalmente intorno i dati degli utenti "comuni" e quindi essere notevolmente semplificato?

Hai ragione, l'architettura sarebbe molto più semplice in questo modo, ma ancora una volta, che cosa faresti se tale istanza non riesce? Un sacco di sforzo ingegneristico è andato in sistemi distribuiti per consentire a più istanze di rispondere a una query. Non sono sicuro di CouchDB, ma Cassandra ti permette di scegliere il tuo modello di consistenza, dovrai disporre della disponibilità di tradeoff per un maggiore grado di coerenza. Il client è configurato per richiedere i server in modalità round-robin per impostazione predefinita, che distribuisce il carico.

Si consiglia di leggere il Dynamo paper. Gli autori descrivono molti dettagli ingegneristici dietro un database distribuito.

+0

Couchbase è fortemente coerente. Leggi la tua scrittura e c'è solo una rappresentazione attiva dei dati sul cluster. Ci sono repliche, ma la coerenza non è garantita se si esegue una query su tali. È inoltre possibile scegliere su ciascuna scrittura se si desidera attendere la permanenza del documento su disco, replicare fino alla quarta volta o essere conservati nel master e in altre repliche. –

+0

La domanda ha specificato CouchDB, non Couchbase. –

+0

@ Mr Grieves, mi dispiace, volevo dire CouchDB. Anche se non sono sicuro delle specifiche dell'attuazione della replica di CouchDB, la mia risposta è ancora valida. Dovrai rinunciare a una forte coerenza per una migliore disponibilità. – Paras