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

Ansehen: 11633|Antwort: 0

Lastverteilung, Sitzungshalten, Sitzungssynchronisation

[Link kopieren]
Veröffentlicht am 14.05.2015 00:16:44 | | |


1. Was ist Lastverteilung
Eine neue Website sollte nicht lastbalanciert sein, da das Traffic-Volumen nicht groß ist und es daher nicht nötig ist, sich auf diese Dinge einzulassen. Mit dem rasanten Wachstum des Website-Verkehrs und des Traffics ist ein einzelner Server jedoch durch seine eigenen Hardwarebedingungen begrenzt, und es ist schwierig, eine so große Anzahl von Besuchen zu bewältigen. In diesem Fall gibt es zwei Optionen zur Auswahl:
1. Aktualisieren Sie die Hardware eines einzelnen Servers von Dual-Core auf Quad-Core, erhöhen Sie den Speicher usw.
2. Erhöhen Sie die Anzahl der Server, um die Last der Server zu teilen. Um das Ziel zu erreichen, die Netzwerkbandbreite zu erhöhen und die Rechenleistung des Servers zu erhöhen.
Die erste Methode kann als vertikale Entwicklung verstanden werden, die immer begrenzt ist. Die zweite Methode ist die richtige Wahl, um das Problem zu lösen
Die Methoden der Lastverteilung lassen sich in zwei Richtungen unterteilen: Die eine ist die Nutzung von Software zur Lastverteilung, die andere ist die Implementierung von Hardware-Lastverteilung (einschließlich der Kombination von Hardware und Software)
Verwenden Sie Software zur Lastverteilung, und der Prozess der Lastverteilung verbraucht ebenfalls einige Systemressourcen und erhöht die Antwortzeit. Zum Beispiel LVS, nginx, haproxy, apache usw. – diese anwendungsbasierten Lastverteilungsprogramme eignen sich für Websites, die nicht besonders viele Besucher haben. Wenn Sie eine Website mit vielen Besuchen wie Sina und 163 haben, ist die Nutzung von Hardware zur Implementierung von Lastverteilung die naheliegendste Wahl.
Es gibt viele Lastverteilungsalgorithmen, darunter Lastverteilung basierend auf der Anzahl der Anfragen, Root-IP-Adressen und verkehrsbasierten Algorithmen. Es gibt zwei Algorithmen, die ich oft verwende.
Eine basiert auf der Anzahl der Anfragen
A: Er kann erkennen, dass jeder Server die Anfragen des Kunden gleichmäßig teilen kann, und wenn einer der Server ausfällt, hat das keine negativen Auswirkungen.
b. Der Zustand zwischen Servern muss synchronisiert werden, wie z. B. Sitzung, und es sind weitere Mittel erforderlich, um diese Zustände zu synchronisieren.
Einer ist laut IP
A, ip_hash Algorithmus kann eine IP auf einen Server abbilden, was das Problem der Sitzungssynchronisation lösen kann
b. Das Schlechte an ip_hash ist, dass, wenn einer der Server ausfällt, die auf diesen Server zugeordneten Nutzer deprimiert werden.
c, ip_hash leicht zu einer unausgewogenen Last führen kann, filtert die Flusskrabbenregierung Googles Suchbegriffe, man stellt oft fest, dass Google nicht öffnen kann, aber nach einer Weile wird alles in Ordnung sein. Das machte diese Google-Enthusiasten deprimiert, und viele Nutzer gingen ins Ausland, um Agenten zu finden. Wenn dies passiert, werden diese Proxys demselben Server zugewiesen, was zu unsymmetrischer Last und sogar zum Ausfall führt.

Zweitens: Was ist eine Sitzungsführung und welche Funktion hat sie
Session Hold bezeichnet einen Mechanismus im Load Balancer, der sicherstellt, dass Zugriffsanfragen, die mit demselben Benutzer verbunden sind, während Load Balancing auf denselben Server verteilt werden.
Was macht Session Hold? Geben Sie ein Beispiel
Wenn eine Benutzerzugriffsanfrage dem Server A zugewiesen wird und sich auf Server A anmeldet, und dieser Benutzer innerhalb kurzer Zeit eine weitere Anfrage sendet, wenn es keine Sitzungs-Hold-Funktion gibt, wird die Anfrage dieses Benutzers wahrscheinlich Server B zugewiesen. Zu diesem Zeitpunkt gibt es keine Anmeldung auf Server B, sodass man sich erneut anmelden muss, aber der Benutzer weiß nicht, wo seine Anfrage zugewiesen ist. Das Gefühl des Benutzers ist, dass er eingeloggt ist, warum muss er sich erneut anmelden, die Benutzererfahrung ist sehr schlecht.
Und wenn du etwas auf Taobao kaufst, von Login = "Shoot something=" add address = "to pay", ist das eine Reihe von Prozessen, die auch als Operationsprozess verstanden werden können; all diese Operationsprozesse sollten von einem Server abgeschlossen werden und können vom Load Balancer nicht verschiedenen Servern zugewiesen werden.
Sitzungshalten hat ein Zeitlimit (außer Servern, die auf einen festen Server wie ip_hash zugeordnet sind), und verschiedene Lastverteilungstools bieten diese Einstellung für Sitzungs-Wartezeiten, LVS, Apache usw. an. Sogar die PHP-Sprache bietet eine session.gc_maxlifetime, um die Wartezeit der Sitzung festzulegen
Die Sitzungs-Wartezeit sollte höher eingestellt werden als die Überlebenszeit der Sitzung, was die Notwendigkeit der Synchronisation verringern kann, aber sie kann nicht eliminiert werden. Deshalb müssen die Sitzungen synchronisiert werden.

Drittens, Sitzungssynchronisation
Warum Sitzungssynchronisation? Das wurde schon erwähnt, wenn es um Sitzungsführung geht. Weitere Informationen finden Sie unter Drei Methoden der Sitzungssynchronisation in einem Webcluster

In einem Webcluster gibt es drei Methoden der Sitzungssynchronisation

Nach einem Webcluster wirst du definitiv zuerst die Sitzungssynchronisation in Betracht ziehen, denn nach der Lastverteilung wird derselbe IP-Zugriff auf dieselbe Seite verschiedenen Servern zugewiesen. Dieser Artikel bietet also drei verschiedene Möglichkeiten, dieses Problem je nach Situation zu lösen:
Verwenden Sie zunächst die Datenbank, um die Sitzung zu synchronisieren
Ich habe diese Methode bei der Multi-Server-Sitzungssynchronisation nicht verwendet, aber falls ich diese Methode verwenden müsste, fielen mir zwei Methoden ein:
1. Verwenden Sie einen Low-End-Computer, um eine Datenbank zu erstellen, um die Sitzung des Webservers zu speichern, oder bauen Sie diese spezielle Datenbank auf dem Dateiserver auf; wenn der Benutzer auf den Webserver zuruft, geht er zu dieser speziellen Datenbank, um die Sitzungssituation zu überprüfen und so den Zweck der Sitzungssynchronisation zu erreichen.
2. Diese Methode besteht darin, die Tabelle, in der die Sitzung gespeichert ist, zusammen mit anderen Datenbanktabellen zu legen; wenn MySQL ebenfalls clustert ist, muss jeder MySQL-Knoten diese Tabelle haben, und die Datentabelle dieser Sitzungstabelle muss in Echtzeit synchronisiert werden.
Erklärung: Die Nutzung der Datenbank zur Synchronisation von Sitzungen erhöht die Belastung für die Datenbank, da sie von Natur aus anfällig für Engpässe ist. Die erste der beiden oben genannten Methoden ist besser, da sie die Tabelle, in der die Sitzung platziert wird, unabhängig voneinander trennt und so die Belastung für die reale Datenbank verringert
2. Verwenden Sie Cookies zur Synchronisierung von Sitzungen
Session ist die Dateisituation, die auf der Serverseite gespeichert wird, und Cookie ist die Dateisituation auf dem Client – wie erreicht man die Synchronisation? Die Methode ist sehr einfach, das heißt, die von der Visit-Seite des Nutzers generierte Sitzung in den Cookie einzufügen, also den Cookie als Relaisstation zu nutzen. Sie besuchen Webserver A, erzeugen eine Sitzung und legen sie in den Cookie, Ihr Zugriff wird Webserver B zugewiesen, zu diesem Zeitpunkt entscheidet Webserver B zuerst, ob der Server diese Sitzung hat, wenn nicht, gehen Sie zu sehen, ob diese Sitzung im Cookie des Clients vorhanden ist, wenn nicht, bedeutet das, dass die Sitzung wirklich nicht gespeichert wird, falls eine im Cookie vorhanden ist, Synchronisieren Sie den Sessoin im Cookie mit dem Webserver B, damit die Sitzung synchronisiert werden kann.
Hinweis: Diese Methode ist einfach und praktisch umzusetzen und erhöht die Belastung für die Datenbank nicht, aber wenn der Client Cookies deaktiviert, kann die Sitzung nicht synchronisiert werden, was Verluste für die Website verursacht; Cookies sind nicht besonders sicher, und obwohl sie verschlüsselt wurden, können sie dennoch gefälscht werden.

3. Memcache verwenden, um Sitzungen zu synchronisieren
Memcache kann verteilt werden, und ohne diese Funktion kann es nicht für die Sitzungssynchronisation verwendet werden. Er kann den Speicher des Webservers zu einem "Mempool" kombinieren, egal welcher Server Sessoin erzeugt, es kann in diesen "Mempool" eingefügt werden, und alles andere kann verwendet werden.
Vorteile: Die Synchronisation von Sitzungen auf diese Weise erhöht die Belastung der Datenbank nicht, und die Sicherheit ist im Vergleich zur Verwendung von Cookies deutlich verbessert, und das Speichern von Sitzungen im Speicher geht deutlich schneller als das Lesen aus Dateien.
Nachteile: Memcache teilt den Speicher in viele Spezifikationen von Speicherblöcken auf, es gibt Blöcke und Größen, auf diese Weise wird auch festgestellt, dass Memcache den Speicher nicht vollständig nutzen kann, was zu Speicherfragmentierung führt, und wenn der Speicherblock unzureichend ist, verursacht er ebenfalls Speicherüberlauf.

Viertens, Zusammenfassung
Alle drei der oben genannten Methoden sind praktikabel
Die erste Methode, die die Geschwindigkeit des Systems am meisten beeinflusst, wird nicht empfohlen;
Die zweite Methode hat gute Ergebnisse, aber die Sicherheitsrisiken sind gleich;
Die dritte Methode, ich persönlich finde, die dritte ist die beste, ich empfehle jedem, sie anzuwenden;




Vorhergehend:Unsere Schule ist wirklich reich
Nächster:Abschlusssaison Zeigen Sie Ihre Abschlussfotos und Klassenfotos!
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