8

Wenn ich eine Webanwendung in einer Farm ausführe, die einen konsistenten Datenspeicher verwendet, der letztendlich konsistent ist (CouchDB in meinem Fall), sollte ich sicherstellen, dass ein bestimmter Benutzer immer an die Datenspeicherinstanz weitergeleitet wird?Sollten Benutzer bei Verwendung eines möglicherweise konsistenten Datenspeichers zu bestimmten Datenknoten weitergeleitet werden?

Es scheint mir, dass der alternative Ansatz, bei dem jede Webanforderung einen beliebigen Datenspeicher verwenden kann, eine erhebliche Komplexität bei der Behandlung von Konsistenzproblemen (Wiederholungen, Prüfungen usw.) mit sich bringt. Auf der anderen Seite, wenn ein Benutzer in einer bestimmten Sitzung immer an den gleichen Couch-Knoten gerichtet ist, werden sich meine Konsistenzprobleme nicht hauptsächlich um "gemeinsame" Benutzerdaten drehen und somit stark vereinfacht werden?

Ich bin auch neugierig auf Strategien zur Steuerung von Benutzern, aber vielleicht behalte ich das für eine andere Frage (Kommentare willkommen).

Antwort

2

Gemäß der CAP Theorem können verteilte Systeme entweder vollständige Konsistenz (alle Knoten sehen die gleichen Daten zur gleichen Zeit) oder Verfügbarkeit (jede Anfrage erhält eine Antwort) haben. Bei einem Ausfall einer Partition oder eines Datenspeicherinhalts müssen Sie einen gegen den anderen tauschen.


Soll ich sichergestellt werden, dass ein bestimmte Benutzer immer auf dieselbe Datenspeicher-Instanz gerichtet ist?

Idealerweise sollten Sie nicht! Was machen Sie, wenn die angegebene Instanz fehlschlägt? Ein Hauptmerkmal eines verteilten Datenspeichers soll trotz Netzwerk- oder Instanzfehlern verfügbar sein.


Wenn ein Benutzer in einer Sitzung immer auf die gleiche Couch Knoten gerichtet ist, wird nicht meine Konsistenzprobleme drehen sich meist um „shared“ Benutzerdaten und somit stark vereinfacht werden?

Sie haben Recht, die Architektur wäre auf diese Weise viel einfacher, aber wieder, was würden Sie tun, wenn diese Instanz fehlschlägt? In verteilten Systemen wurde viel Entwicklungsaufwand investiert, damit mehrere Instanzen auf eine Abfrage antworten können. Ich bin nicht sicher über CouchDB, aber Cassandra erlaubt Ihnen, Ihr Konsistenzmodell zu wählen, Sie müssen die Verfügbarkeit für einen höheren Grad an Konsistenz abwägen. Der Client ist so konfiguriert, dass standardmäßig Server Round-Robin angefordert werden, die die Last verteilen.

Ich würde empfehlen, lesen Sie die Dynamo paper. Die Autoren beschreiben viele technische Details hinter einer verteilten Datenbank.

+0

Couchbase ist stark konsistent. Sie lesen Ihren eigenen Schreibvorgang und es gibt nur eine aktive Darstellung der Daten im Cluster. Es gibt Replikate, aber Konsistenz ist nicht garantiert, wenn Sie diese abfragen. Sie können auch bei jedem Schreibvorgang auswählen, ob Sie warten möchten, bis das Dokument auf dem Datenträger gespeichert, bis zum vierten Mal repliziert oder im Master und in anderen Replikaten gespeichert wurde. –

+0

Die Frage spezifiziert CouchDB, nicht Couchbase. –

+0

@Mr Trauer, Entschuldigung, ich meinte CouchDB. Obwohl ich nicht sicher bin, wie CouchDB die Replikation implementiert, steht meine Antwort immer noch. Sie müssen starke Konsistenz für bessere Verfügbarkeit aufgeben. – Paras

Verwandte Themen