Wie viele Webserver hat StackOverflow / ServerFault?
Wenn die Antwort "mehr als eins" lautet, wird dann beim DNS-Polling Sitzungsstabilität erreicht ?
Wie viele Webserver hat StackOverflow / ServerFault?
Wenn die Antwort "mehr als eins" lautet, wird dann beim DNS-Polling Sitzungsstabilität erreicht ?
Antworten:
Große Websites können auf mehreren Computern "lastausgeglichen" werden. In vielen Setups mit Lastenausgleich kann ein Benutzer während einer Sitzung auf einen beliebigen Back-End-Computer zugreifen. Aus diesem Grund gibt es eine Reihe von Methoden, mit denen viele Computer Benutzersitzungen gemeinsam nutzen können.
Die gewählte Methode hängt von der Art des Lastausgleichs sowie von der Verfügbarkeit / Kapazität des Back-End-Speichers ab:
Nur in Cookies gespeicherte Sitzungsinformationen: Sitzungsinformationen (nicht nur eine Sitzungskennung) werden in einem Cookie eines Benutzers gespeichert. Beispielsweise kann der Cookie des Benutzers den Inhalt seines Einkaufskorbs enthalten. Um zu verhindern, dass Benutzer die Sitzungsdaten manipulieren, kann ein HMAC zusammen mit dem Cookie bereitgestellt werden. Diese Methode ist wahrscheinlich für die meisten Anwendungen am wenigsten geeignet:
Load Balancer leitet Benutzer immer auf denselben Computer weiter : Viele Load Balancer setzen möglicherweise ein eigenes Sitzungscookie, das angibt, von welchem Back-End-Computer ein Benutzer Anforderungen stellt, und leiten sie in Zukunft auf diesen Computer weiter. Da der Benutzer immer auf denselben Computer verwiesen wird, ist keine Sitzungsfreigabe zwischen mehreren Computern erforderlich. Dies kann in einigen Situationen gut sein:
Freigegebene Backend-Datenbank oder Schlüssel- / Wertspeicher : Sitzungsinformationen werden in einer Backend-Datenbank gespeichert, auf die alle Webserver Zugriff haben, um Abfragen und Aktualisierungen durchzuführen. Der Browser des Benutzers speichert ein Cookie mit einer Kennung (z. B. der Sitzungs-ID), die auf die Sitzungsinformationen verweist. Dies ist wahrscheinlich die sauberste der drei Methoden:
Insgesamt führen die meisten dynamischen Webanwendungen eine Reihe von Datenbankabfragen oder Schlüssel- / Wertspeicheranforderungen aus, sodass die Datenbank oder der Schlüssel- / Wertspeicher der logische Speicherort für Sitzungsdaten ist.
Wenn Sie sich die Frage stellen, wie Sitzungen über mehrere Front-End-Webserver hinweg verwaltet werden sollen, müssen Sie in der Regel eine zentralisierte Datenbank verwenden. Anstatt sich auf die Webserver-Instanzen zu verlassen, um Sitzungsdateien auf den lokalen Dateisystemen zu verfolgen, würden Sie die Sitzungs-IDs und -Daten in eine zentrale Datenbank schreiben, und alle Webserver würden stattdessen die Daten von dort abrufen.
Die Verwendung von nemcached scheint eine gute Lösung zu sein, die von @David Pashley nicht erwähnt wird
Dies bedeutet, dass eine remote zwischengespeicherte Instanz von allen Servern gemeinsam genutzt wird und die Memcache-PECL-Erweiterung verwendet wird, die einen eigenen Sitzungshandler bereitstellt.
Es müssen nur zwei Parameter in der PHP-Konfiguration geändert werden!
Hier ist ein gutes Tutorial: http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/
IIRC, in DotNetRocks # 440 hieß es eine Serverperiode. Ich weiß nicht, ob das noch der Fall ist.
Edit: Eigentlich war es Hanselminutes # 134 . Es tut uns leid.
Sie können ein Cookie setzen.
Sie können einen Hash der Remote-IP berechnen (die einfachsten Hosts mit ungerader Nummer gehen zu Server A, die Hosts mit gerader Nummer gehen zu Server B).
Sieht so aus, als könnten Sie dies auch über einige Werte tun, die im Quellsystem verbleiben, wenn Sie einen SSL-Tunnel verwenden.
Typischerweise erfordert jeder der oben genannten Mechanismen einen "Reverse-Proxy" -Server oder eine Art Load-Balancer. Dieser Load Balancer akzeptiert den Datenverkehr und leitet ihn dann basierend auf einem der oben genannten Kriterien an den Server weiter, auf dem die Sitzung ursprünglich stattgefunden hat.
Ich bin mir jedoch nicht sicher, was Sie unter "DNS-Polling" verstehen.
a) Sie können Sitzungsinformationen in einem Benutzer-Cookie speichern. Siehe zustandslos gehärtete Cookies, die keine Daten auf der Serverseite speichern, aber den Sitzungsstatus http://www.cl.cam.ac.uk/~sjm217/papers/protocols08cookies.pdf beibehalten . b) Sie können den Sitzungs-Backend-Speicher auf Datenbank oder zwischengespeichert ändern. Um einen einzelnen Fehlerpunkt zu beseitigen, können Sie die Datenbankreplikation oder mehrere zwischengespeicherte Knoten festlegen. Beachten Sie, dass memcached in solchen Setups empfohlen wird, in denen der Verlust des Benutzerstatus in einer Sitzung kein großer Fehler ist und ihn nicht sehr unglücklich macht. Verwenden Sie für Fälle, in denen die Aufrechterhaltung des Status von entscheidender Bedeutung ist, Datenbanken. Sowohl mit PHP als auch mit Django und Rails kann der Entwickler ein benutzerdefiniertes Sitzungs-Backend erstellen.