2016-06-30 8 views
0

Dies fühlt sich wie eine offensichtliche Frage, aber die Antwort spielt auf mich an. Wie zeige ich an, dass ich eine Instanz eines Stateful-Service auf allen Knoten in einem Cluster haben möchte? Bei zustandslosen Diensten ist es so einfach wie -1 für die Anzahl der Instanzen zu verwenden, aber das wird für Stateful nicht unterstützt.Stateful Service auf allen Cluster-Knoten

Ich verschiebe meinen bestehenden zustandslosen Webapi-Dienst in Stateful, so dass ich meine Verwendung eines Redis-Cache zu einem zuverlässigen Wörterbuch ersetzen kann. Da es sich um einen Dienst handelt, der extern und vor einem azure Load Balancer sichtbar ist, muss der Dienst in allen Instanzen ausgeführt werden.

Was fehlt mir?

Antwort

1

Stateless-Instanzen können -1 haben, weil sie erstellt und zerstört werden können, ohne den Status zu beeinflussen.

Die Anzahl der Partitionen für einen Stateful Service ist nicht dynamisch. Es legt fest, wie Daten über Ihre Knoten verteilt werden. Sobald Sie sich für X-Partitionen entschieden haben, können Sie diese Zahl nicht mehr ändern, ohne selbst die Auswirkungen auf den Status zu berücksichtigen.

Alternative Ansatz:

Sie einen Stateless Service (als Gateway) hinzufügen könnte, führen, dass auf allen Knoten, und eine Partition eines zustandsbehaftete Service von ihnen nennen.

Die Partitionierung des Stateful Service erhöht die Skalierbarkeit. Sie könnten zum Beispiel auf Benutzergruppe/Mieter/Abonnementlevel etc. partitionieren.

1

Da es zustandsbehaftet ist, wird nur einem Knoten/VM eine primäre im Cluster und zwei sekundäre Replikate zugewiesen. Die Primärdatenbank verwaltet das Lesen/Schreiben in die zuverlässigen Wörterbücher/Warteschlangen und aktualisiert die Replikate (Transaktion). So bleiben Zuverlässigkeit, Verfügbarkeit und Haltbarkeit der Daten erhalten. Aus Ihren Stateful-Services können Sie dann Ihre Stateless Services aufrufen, um diese Daten zu verarbeiten. Und Sie können alle Stateles-Dienste (die in allen Knoten/VM in Ihrem Cluster implementiert sind) diese Daten ausführen/verarbeiten lassen.

+0

OK, ich sehe einen Samen eines Designs hier. Ich denke, wenn ich deine Gedanken umblättere, wird es funktionieren. Das heißt: Ich fahre mit meinem zustandslosen Dienst fort und erstelle einen neuen zustandsbehafteten Dienst, bei dem es sich im Wesentlichen nur um meinen Datenspeicher handelt. Ich rufe das von meinem zustandslosen Dienst an, um Daten zu lesen/zu schreiben, die ich lokal beibehalten/teilen möchte. Es fühlt sich für mich wie ein Overkill an, da ich im Wesentlichen nur einige zuverlässige Lese-/Schreib-Aufrufe in einem Stateful Service verpacke, der nur dazu dient, Daten an einen zustandslosen Service zu liefern, aber es sollte funktionieren und meinen zustandslosen WebApi erlauben alle Knoten. – BrettRobi