Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Wie funktioniert SignalR.Redis unter der Haube?

Nein, es gibt kein Whitepaper und es sind ungefähr 200 Codezeilen, also nicht so viel zu schlucken.

In SignalR durchläuft jede Nachricht einen sogenannten Nachrichtenbus. Wenn Sie Knoten (oder Prozesse oder Anwendungsdomänen) skalieren möchten, muss die Implementierung dieses Busses in der Lage sein, mit jeder Instanz Ihrer Anwendung zu kommunizieren. Dazu können Sie den RedisMessageBus verwenden. Redis hat einen Pub-Sub-Mechanismus sowie die Fähigkeit, Schlüssel-Wert-Paare zu speichern, und wir verwenden nur ersteren für SignalR.

OffTopic:Das ist SEHR wichtig! SignalR ist KEIN zuverlässiges Messaging, sondern eine Verbindungsabstraktion. Wir können Nachrichten für Longpolling puffern, aber Sie können sich **nicht* darauf verlassen, dass die Nachrichten für immer da sind. Wenn Sie wichtige Nachrichten haben, die Sie beibehalten müssen, dann behalten Sie sie bei.

Jeder Webserver verbindet sich mit einem (oder mehreren in der neuen Implementierung) Redis-Ereignissen, um Nachrichten zwischen ihnen zu senden. Wenn eine Nachricht für einen oder mehrere Clients eingeht, wird sie an die Backplane (Redis) gesendet und kommt auf allen Webservern an. Jeder Webserver erhält die Nachricht von Redis und speichert sie in einem lokalen Cache. In diesem lokalen Cache werden SignalR-Clients (Browser usw.) bereitgestellt.

Ein wichtiger Teil des Scale-Out-Designs sind Cursor. Ein Cursor stellt dar, wo sich ein bestimmter Client in einem unendlichen Strom von Nachrichten befindet. Wenn Clients sich nach dem Abbruch einer Verbindung wieder verbinden oder eine Longpolling-Verbindung nach dem Erhalt einer Nachricht zurückkehrt, fordert sie den Bus auf, mir alles seit einem Cursorwert zu holen. Cursor werden durch die Message-Bus-Implementierung definiert und wir haben dies in den neuesten Quellen normalisiert (zum Zeitpunkt des Schreibens noch nicht veröffentlicht, aber ich werde hier nicht ins Detail gehen). Der Cursor in der aktuellen Implementierung von Redis ist nur eine Zahl, die inkrementiert wird, nichts zu Kompliziertes.

Hoffentlich gibt das eine Vorstellung davon, wie es funktioniert.