Anforderungen: Verwenden Sie Nginx, um einen Reverse-Proxy zu erstellen, der für die Planung aller Anfragen verantwortlich ist; das Backend wird von ASP.NET MVC entwickelt und auf mehreren verschiedenen Servern bereitgestellt, wodurch ein Backend-Cluster entstehtSitzungsinformationen können nicht geteilt werden, was dazu führt, dass einige Anfragen nicht korrekt verarbeitet werden。 Folgende Probleme werden auftreten:
ASP.NET Die Website kann wie folgt bezeichnet werden:
Häufig verwendete Lösungen sind wie folgt:
Nutze die Datenbank, um die SESSION zu speichern
Da jeder Server dieselbe Sitzung verwenden muss, können wir die Sitzung in derselben Datenbank speichern; jedes Mal, wenn wir zugreifen, gehen wir in die Datenbank, um zu prüfen, ob es diese Sitzung gibt oder ob sie abgelaufen ist, und dann können wir die Sitzung mehrerer Server synchronisieren;
Verdienst:Diese Methode ist einfach, bequem und ein leichter Einstieg;
Mangel:Die Nutzung der Datenbank zur Synchronisation von Sitzungen erhöht den IO der Datenbank und erhöht die Belastung für die Datenbank. Gleichzeitig muss jeder Zugriff Anfragen abfangen und die Datenbank abfragen, was zu einer zusätzlichen Zugriffsschicht und verschwendeter Datenbanksitzungszeit führt.
Verwenden Sie einen Caching-Mechanismus wie Memcache oder Redis, um die SESSION zu speichern
Die Verwendung verteilter Caching-Mechanismen wie Memcache oder Redis zur Speicherung von Sitzungsdaten ist eine beliebte Lösung für Lastverteilung und synchrone Sitzungen in vielen groß angelegten Projekten. Das Prinzip ist, dass das Projekt den Memcache- oder Redis-Cache an derselben Stelle verwendet; wenn der Benutzer sich anmeldet, wird die Sitzung im Cache gespeichert, und unabhängig davon, auf welchen Server des Projekts der Nutzer zugegriffen wird, wird der Sitzungscache vom selben Ort abgerufen, sodass die Sitzungssynchronisation leicht realisiert werden kann;
Verdienst:Die Verwendung von Caches zur Synchronisation von Sitzungen erhöht die Belastung für die Datenbank nicht, und Sie müssen auch nicht manuell beurteilen, ob die Sitzung existiert oder abläuft, wodurch einige Geschäfts-Logiken entfallen.
Mangel:MemCache oder Redis teilt den Speicher in viele Spezifikationen von Speicherblöcken auf, und es gibt Blöcke mit Größen, was auch bestimmt, dass Memcache oder Redis den Speicher nicht vollständig nutzen können, was zu einer Speicherfragmentierung führt, und wenn die Speicherblöcke unzureichend sind, tritt ebenfalls ein Speicherüberlauf auf.
Nutze das ip_hash-Muster in Nginx
Diese Technik, auch bekannt als Session Keeping, ist die ip_hash Technologie in nginx, die es dir ermöglicht,Anfragen von einer bestimmten IP-Adresse werden an denselben Backend-Anwendungsserver gepinnt, sodass ein Client und ein Backend unter dieser IP eine stabile Sitzung aufbauen können.
(Aber es gibt auch einen Nachteil, wenn das Netz des Betreibers volatiler und instabiler ist,Egress IP ist dynamischJa, es wird Probleme mit dieser Methode geben. )
Die Testmethode besteht darin, zwei Standorte basierend auf Docker zu eröffnen,Du musst eine neue index.html-Datei unter den Verzeichnissen /data/testsite/a bzw. /data/testsite/b erstellen, lautet der Befehl wie folgt:
Zugriff über einen Browser wie unten gezeigt:
Wenn Sie einen neuen nginx-Container basierend auf Docker erstellen, ohne ip_hash Technologie zu verwenden, kann die Anfrage an verschiedene Backend-Server gesendet werden, wie in der untenstehenden Abbildung gezeigt:
Mit ip_hash Technologie erstellen Sie eine neue /data/testsite/nginx.conf-Datei mit folgender Konfiguration:
Der Docker-Startbefehl lautet wie folgt:
(Cookie-basierte Sitzungsführung, die im Sticky-Modul konsultiert werden kann, wurde weggelassen)
Nginx-Konfiguration:Der Hyperlink-Login ist sichtbar.
(Ende)
|