So skalieren Sie den Signalgeber für eine große Anzahl von Benutzern

8

Ich habe eine Menge über die Skalierung im Signalgerät gelesen und die Favoriten scheinen die zu sein, die in: Ссылка Nämlich die folgenden Servicebusse: - SQL - Redis - Azure

Das Problem ist sogar im Text angegeben: "Bei Verwendung einer Backplane ist der maximale Nachrichtendurchsatz geringer als wenn Clients direkt mit einem einzelnen Serverknoten sprechen. Das liegt daran, dass die Backplane jede Nachricht an jeden Knoten weiterleitet, sodass die Backplane zu einem Engpass werden kann."

Ich erschaffe ... warte darauf ... YEP! Eine Chat-Anwendung. Und ich möchte es auf MILLIONEN von Nutzern ausweiten können. Egal ob ich es groß mache (ha!) Oder nicht, ich werde den Schritt für Schritt dokumentieren. Jetzt habe ich die meisten der App bereit, und ich frage mich, über dieses Problem skalieren. Ich habe mir dieses sehr nützliche Video angesehen:

Ссылка

Springe zu 55 Minuten. "Benutzerdefinierte Skalierung" Und die anderen Ideen wie das Filtern des Nachrichtenbusses.

Jetzt hoffentlich bist du aufgeregt und denkst nicht Selbstmord über die Langeweile die ich dir vorschlage ... Meine Idee ist wie folgt:  - Pro populäre Räume geben Sie einen einzelnen Server  - Jeder Raum kann daher problemlos mit dem Verkehr umgehen und der Signalgeber kann gut mit den Clients kommunizieren und das Nachrichtenprotokoll auf einem GROUPS-Server speichern (dh es werden alle Gruppennachrichten pro Gruppe gespeichert)  - Dann private Nachricht muss entweder eine Backplane oder Server Push verwenden  - Die Benutzerverbindungen müssen daher in einer SQL-Server-DB aktualisiert werden (einfach genug) und die Daten werden über Ajax anstatt über Signal gesendet

Ich möchte jedoch alle Möglichkeiten erkunden. (Bitte posten Sie bessere Ideen, wenn Sie sie haben) Ich möchte auch versuchen, REDIS für die private Nachrichtenübermittlung zu testen. WARUM?!! Was, wenn ich möchte, dass die Benutzer private Messaging-Gruppen haben können ... und die Benutzer 1,2 und 3 sind alle sehr nervig und befinden sich auf den Servern 1,2 und 3. (Ah du kleines ...!) Zum Besseren Leistung, aber ich möchte einen Redis-Nachrichtenfilter implementieren, um nur an die Server mit den Clients auf ihnen zu senden!

Also, wonach genau suche ich? Grundsätzlich brauche ich Ressourcen. Ich kann keine nützlichen Redis-Nachrichtenbus-Beispiele finden (asp.net-Beispiel hat keinen Filter. Ja, ich kann die AddResolverblabla-Zeile hinzufügen! :))

Ich brauche auch Beispiele für Folgendes:  - Server zu Server Ajax Post: Ich bin ein Server noobie!  - ein Load-Balancer-Beispiel, um einen bestimmten Raum pro Chatraum (oder nur eine Seite) anzugeben  - Wie viele Nachrichten kann der Redis-Nachrichtenbus verarbeiten? Wird es auch mit dem Filter leicht ein Flaschenhals sein? Ich finde kein Beispiel für Performances mit einem Filter

Endlich brauche ich deine Gehirne! ;) Wenn Sie dort sitzen und denken, dass es einen besseren Weg gibt, lassen Sie es mich wissen.

Vielen Dank an alle, die diesen Aufsatz gelesen haben, ich freue mich auf Ihre Antworten. (Bitte stimmen Sie dies ab, wenn Sie es nützlich finden! Es gibt viele Foren mit ähnlichen Fragen, aber keine richtigen Antworten)

    
user2330270 13.03.2014, 13:13
quelle

1 Antwort

4

Ich habe vor, dies zu beantworten, da ich Dokumentation finde. Hoffentlich wird mehr beitreten!

1.

Wie eine Verbindung definieren String zu einer SQL Server 2008-Datenbank?

2.

SQL Server-Filter: Ссылка

3. Webfarm

Ссылка

4. WF Tutorials:

Ссылка

3/12/2014 Eine mögliche bessere Lösung ist Memecache zu verwenden - was Facebook basiert auf

muss immer noch herausfinden, ob Sie angeben können: Verwenden Sie den Signalgeber oder verwenden Sie den Redis Message Bus.

muss noch Redis-Filter-Tutorials finden

14/03

GlobalHost.DependencyResolver.UseRedis ( "Server", Port, "Passwort", "AppName"); Definiert die Server für die Verwendung von redis. Brauchen Sie einen Filter

6/10/2014

Nach mehr Forschung über horizontale Skalierung, ein possibleanswer ist nicht als ein Netz von Kommunikation von Servern zu denken, aber eigenständig. Der Server verwendet sends, um die DB zu aktualisieren, und mit einem Zeitgeber können Sie alle erforderlichen Informationen (Nachrichten usw.) für jede Schleife aus der DB für die Benutzer abrufen, die CURRENTLY auf diesem Server angemeldet sind. Als solche wird es viel einfacher skalieren. Nicht billig aber.

    
user2330270 14.03.2014 08:44
quelle