Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 2945|Antwort: 0

Nginx-Lastverteilung adressiert das Backend-SESSION-Single-Point-Problem

[Link kopieren]
Veröffentlicht am 10.01.2023 20:38:39 | | | |
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:

asp.net Sitzungsfreigabe (über StateServer)
https://www.itsvse.com/thread-6613-1-1.html

. Netzverteilte Architektur: Sitzungsfreigabe basierend auf Redis
https://www.itsvse.com/thread-5189-1-1.html

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)




Vorhergehend:【Praktische Aktion】Verwenden Sie Docker, um ein privates Gitlab-Repository zu erstellen.
Nächster:IIS-URL-Umschreib-Modul-Regel-Clearing
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com