Heim >Betrieb und Instandhaltung >Sicherheit >Sitzungskonsistenzdesign
Sitzungskonsistenz
Was ist eine Sitzung? Der Webserver kann automatisch Sitzungen für Benutzer erstellen, die auf denselben Browser zugreifen, und Speicherfunktionen bereitstellen. Im Allgemeinen werden Benutzeranmeldeinformationen in der Sitzung gespeichert.
Was ist das Problem der Sitzungskonsistenz?
Wenn es nur einen Webserver im Backend gibt, kann für jede HTTP-Anfrage die richtige Sitzung gefunden werden. Das Problem besteht darin, dass die Hochverfügbarkeit nicht erreicht werden kann. Wenn ein Server hängt, ist es vorbei. Redundanz + Failover, Bereitstellung mehrerer Webserver und Nginx-Routen zu verschiedenen Webservern. Jede HTTP-Anfrage wird weitergeleitet und es kann nicht garantiert werden, dass sie an denselben Server weitergeleitet wird, was zu Konsistenzproblemen führt.
Gemeinsame Lösungen zur Lösung der Sitzungskonsistenz
Konsistenter Hash
Die erste Lösung, die mir in den Sinn kommt, ist ein Hash basierend auf der Client-IP, um sicherzustellen, dass dieselbe IP auf denselben Webserver fällt. Sie können auch Hashes verwenden, die auf Geschäftsfeldern wie „userId“ und „cityId“ basieren und flexibler einsetzbar sind. Dies zerstört jedoch das Prinzip der Einheitlichkeit und macht das Gateway und das Geschäft klebrig. Es wird nicht empfohlen, es zu verwenden, es sei denn, dies ist erforderlich. Vorteile: Speichert Cache, kann horizontal erweitert werden. Nachteile: Beim Neustart einiger Dienste gehen Sitzungen verloren, sodass sich einige Benutzer erneut anmelden müssen. Wenn der Hash horizontal erweitert wird und die Sitzung nach dem erneuten Aufwärmen neu verteilt wird, können einige Benutzer die Sitzung nicht weiterleiten
Sitzungssynchronisierung
Die Sitzungen zwischen mehreren Webservern werden miteinander synchronisiert, sodass jeder Webserver enthält Alle Sitzungsinformationen. Nachteile: Da alle Sitzungen enthalten sind, ist die Anzahl der Cluster durch den Speicher begrenzt und die Erweiterung ist begrenzt.
Client-Speicherung
Anmeldeinformationen werden beim Client gespeichert und jede Anfrage enthält Benutzerinformationen. Der Server ist völlig zustandslos und leicht erweiterbar. Vorteile: Auf der Serverseite ist kein Speicher erforderlich. Nachteile: Jede HTTP-Anfrage überträgt Benutzerinformationen, wodurch Datenverkehr verschwendet wird. Es besteht die Gefahr, dass Informationen verloren gehen.
Zentraler Back-End-Speicher
Webserver stellt eine Verbindung zu einem einheitlichen Speicher her, um Sitzungsinformationen zu speichern. Es wird empfohlen, diese im Redis-Cluster zu speichern, um eine spätere Erweiterung zu erleichtern. Vorteile: Es besteht kein Risiko eines Informationsverlusts. Bei der horizontalen Erweiterung werden keine Daten verloren. Es wird eine zusätzliche Netzwerkanforderung hinzugefügt und der Geschäftscode muss geändert werden, um Redis abzufragen.
Das obige ist der detaillierte Inhalt vonSitzungskonsistenzdesign. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!