Heim  >  Artikel  >  Backend-Entwicklung  >  Eine Anleitung zum Lastausgleich mit PHP

Eine Anleitung zum Lastausgleich mit PHP

藏色散人
藏色散人nach vorne
2019-12-04 11:34:493961Durchsuche

Früher bedeutete die Ausführung einer großen Webanwendung, dass ein großer Webserver betrieben werden musste. Da Ihre Anwendung eine große Anzahl von Benutzern anzieht, müssen Sie Ihrem Server mehr Speicher und Prozessoren hinzufügen. Heutzutage gibt es das Modell „Großer Server“ nicht mehr, sondern wird durch eine große Anzahl kleiner Server ersetzt, die verschiedene Lastausgleichstechniken nutzen.

Die Vorteile von „mehr kleinen Servern“ gegenüber dem bisherigen „Großserver“-Modell spiegeln sich in zwei Aspekten wider:

 1. Wenn der Server ausfällt, stellt das Lastausgleichssystem die Anfragen ein Der Server fällt aus und verteilt die Last dann auf andere Server, die normal laufen.

 2. Die Skalierung Ihres Servers ist einfacher. Sie müssen lediglich neue Server zum Lastausgleichssystem hinzufügen. Sie müssen Ihre Bewerbung nicht unterbrechen.

Also, nutzen Sie diese Gelegenheit. Der Nachteil besteht natürlich darin, dass dies eine etwas höhere Komplexität Ihrer Anwendungsentwicklung erfordert. Darum geht es in diesem Artikel.

An diesem Punkt fragen Sie sich vielleicht: „Aber woher weiß ich, dass ich Lastausgleich verwende?“ Die ehrlichste Antwort, wenn Sie diese Frage stellen, ist, dass Sie wahrscheinlich kein Lastausgleichssystem verwenden und Ihr System dies nicht berücksichtigen muss. Wenn die Anwendung groß genug wird, muss in den meisten Fällen der Lastausgleich explizit vorgeschlagen und eingerichtet werden. Gelegentlich sehe ich jedoch, dass Webhosting-Unternehmen diesen Lastausgleich für Kundenanwendungen durchführen oder ihn wie unten beschrieben selbst durchführen.

Beachten Sie, dass ich immer wieder „Webanwendungen“ anstelle von Websites erwähne. Dies dient dazu, „Webanwendungen“ von komplexen Websites zu unterscheiden, die häufig serverseitige Programmierung und Datenbanken beinhalten, und nicht von Websites, die nur einfache statische Inhalte anzeigen. .

1. PHP-Datei

Die erste Frage ist: Wenn Sie eine große Anzahl kleiner Server haben, wie laden Sie Ihre PHP-Dateien auf alle Server hoch? Es gibt die folgenden Methoden für Sie :

 ◆ Laden Sie alle Dateien separat auf jeden Server hoch. Das Problem bei dieser Methode ist: Stellen Sie sich vor, Sie haben 20 Server, dann führt dies leicht zu Fehlern beim Hochladen und beim Aktualisieren. Das ist sehr wahrscheinlich Es gibt unterschiedliche Versionen der Dateien auf verschiedenen Servern.

 ◆Verwenden Sie „rsync“ (oder eine ähnliche Software), um Dateien in einem lokalen Verzeichnis und Verzeichnissen auf mehreren Remote-Hosts zu synchronisieren.

 ◆Verwenden Sie Versionskontrollsoftware (z. B. Subversion). Dadurch kann ich meinen Code sehr gut pflegen, und wenn ich meine Anwendung veröffentliche, kann ich den Befehl svn update auf jedem Server ausführen, um ihn zu synchronisieren. Dieser Ansatz erleichtert auch den Serverwechsel auf eine frühere Version des Codes.

 ◆Verwenden Sie einen Dateiserver (Sie finden, dass NFS dafür sehr gut geeignet ist). Wenn Ihr Dateiserver ausfällt, ist dies natürlich der Fall Ihre Websites sind nicht verfügbar. Zu diesem Zeitpunkt müssen Sie mehr Geld für die Wiederherstellung ausgeben.

Welche Methode Sie wählen, hängt von Ihren Bedürfnissen und Ihren Fähigkeiten ab. Wenn Sie ein Versionskontrollsystem verwenden, möchten Sie möglicherweise eine Möglichkeit planen, den Code auf allen Servern zu aktualisieren, indem Sie gleichzeitig einen Aktualisierungsbefehl ausführen. Wenn Sie jedoch einen Dateiserver verwenden, müssen Sie einen Mechanismus zur Wiederherstellung nach Fehlern implementieren, um Anforderungsfehler zu verhindern, falls der Server ausfällt.

  2. Datei-Upload

Wenn nur ein Server vorhanden ist, ist das Hochladen von Dateien kein Problem. Aber wie sollen die hochgeladenen Dateien gespeichert werden, wenn wir mehrere Server haben? Das Problem beim Hochladen von Dateien ähnelt der serverübergreifenden PHP-Dateispeicherung. Hier sind mehrere mögliche Lösungen:

 ◆ Speichern Sie die Datei in der Datenbank. Die meisten Daten ermöglichen die Speicherung binärer Daten. Wenn Sie einen Dateidownload anfordern, gibt access data die Binärdaten sowie den entsprechenden Dateinamen und -typ an den Benutzer aus. Bevor Sie diese Lösung verwenden, sollten Sie überlegen, wie die Datenbank Ihre Dateien speichert. Das Problem bei diesem Ansatz besteht darin, dass die Dateien nicht mehr verfügbar sind, wenn der Datenbankserver ausfällt.

 ◆ Hochgeladene Dateien auf einem Dateiserver speichern. Wie in der vorherigen Einführung müssen Sie alle hochgeladenen Dateien hier hochladen Benutze es. Wenn der Dateiserver jedoch ausfällt, kann es zu Unterbrechungen beim Herunterladen der Bilddateien kommen.

 ◆ Entwerfen Sie Ihren eigenen Upload-Mechanismus, um Dateien auf jeden Server zu übertragen. Diese Methode weist nicht die Nachteile einer einzelnen Dateiserver- oder Datenbanklösung auf, erhöht jedoch die Komplexität Ihres Codes. Wenn beispielsweise der Server beim Hochladen auf mehrere Server ausfällt, wie gehen Sie damit um?

Die Verwendung einer Datenbank zum Speichern hochgeladener Dateien, aber die Entwicklung eines Datei-Caching-Mechanismus ist eine gute Lösung. Wenn der Server eine Datei-Download-Anfrage erhält, prüft er zunächst, ob die Datei im Cache-System vorhanden ist. Wenn sie gefunden wird, lädt er sie aus der Datenbank herunter und speichert sie im Dateisystem.

 3. Sitzungen

Wenn Sie mit der Sitzungsverarbeitung von PHP vertraut sind, wissen Sie wahrscheinlich, dass es Sitzungsdaten standardmäßig in temporären Dateien auf dem Server speichert. Darüber hinaus befindet sich diese Datei nur auf dem Server, auf dem Sie sie angefordert haben. Nachfolgende Anforderungen können jedoch von einem anderen Server verarbeitet werden, wodurch eine neue Sitzung auf dem anderen Server generiert wird. Dies führt dazu, dass Sitzungen häufig nicht erkannt werden, z. B. dass angemeldete Benutzer immer wieder aufgefordert werden, sich erneut anzumelden.

Meine empfohlene Lösung besteht darin, entweder den in PHP integrierten Sitzungsverarbeitungsmechanismus wiederherzustellen, um Sitzungsdaten in der Datenbank zu speichern, oder einen eigenen Mechanismus zu implementieren, um sicherzustellen, dass die Anfrage eines Benutzers an denselben Server gesendet wird.

4. Konfiguration

Obwohl dieses Thema nicht besonders mit PHP zu tun hat, halte ich es dennoch für notwendig, es zu erwähnen. Beim Betrieb geclusterter Server ist es sinnvoll, die Konfigurationsdateien zwischen den Servern auf irgendeine Weise synchron zu halten. Wenn die Konfigurationsdateien inkonsistent sind, kann dies zu einem sehr seltsamen, zeitweise auftretenden Verhalten führen, das schwierig zu beheben sein kann.

Ich empfehle die Verwendung eines Versionskontrollsystems, um sie einzeln zu verwalten. Auf diese Weise können Sie verschiedene PHP-Konfigurationsdateien für verschiedene Projektinstallationen speichern und außerdem alle Serverkonfigurationsdateien synchron halten.

 5. Protokollierung

Wie Konfigurationsprobleme hängt auch die Protokollierung nicht nur mit PHP zusammen. Dennoch ist es sehr wichtig, dass Ihr Server fehlerfrei läuft. Wie würden Sie ohne ein ordnungsgemäßes Protokollierungssystem feststellen, ob Ihr PHP-Code anfängt, Fehler zu generieren (Sie schalten die display_errors-Einstellung immer aus, wenn das System läuft, nicht wahr?)

Es gibt mehrere Möglichkeiten, wie Sie dies tun können Protokollierung implementieren:

 1. Protokolle auf jedem Server aufzeichnen. Dies ist der einfachste Weg. Jede Maschine zeichnet nur eine Datei auf. Der Vorteil besteht darin, dass es einfach ist und möglicherweise nur sehr wenig Konfiguration erfordert. Mit zunehmender Serveranzahl wird die Überwachung der Protokolldateien auf jedem Server jedoch sehr schwierig.

2. Auf einer Freigabe protokollieren Bei dieser Methode liegen die Protokolldateien immer noch auf jedem Server, sie werden jedoch über den Freigabemechanismus auf einem zentralen Dateiserver gespeichert, was die Überwachung der Protokolle erleichtert. Das Problem bei dieser Lösung besteht darin, dass bei Nichtverfügbarkeit des Dateiservers ein einfaches Protokollschreibproblem schließlich zum Absturz der gesamten Anwendung führt.

 3. Protokolle auf dem Protokollierungsserver aufzeichnen Sie können eine Protokollierungssoftware wie Syslog verwenden, um alle Protokolle auf einen zentralen Server zu schreiben. Obwohl diese Methode mehr Konfiguration erfordert, bietet sie auch die robusteste Lösung.

Das obige ist der detaillierte Inhalt vonEine Anleitung zum Lastausgleich mit PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:examw. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen