Umleiten von Benutzern basierend auf dem Serverdatenverkehr mit PHP

8

Ich mache eine Website und möchte meinen Traffic verbreiten, um einen Absturz zu vermeiden und sicherzustellen, dass ich 100% Verfügbarkeit anbieten kann. Ich werde dies tun, indem ich 5 verschiedene Server und einen Hauptserver habe. Erlaube mir das zu erklären.

Ich habe eine Website (domain.com) und auf der Homepage dieser Seite gibt es einen cURL-Rahmen, der Benutzer mit einem der fünf anderen Server verbindet, die am wenigsten Verkehr haben. Ich möchte, dass das Skript den cURL-Frame so ändert, dass der Server mit dem geringsten Datenverkehr angezeigt wird.

Kann jemand mir helfen oder vorschlagen, wie ich das kodieren könnte, da ich ein PHP-Anfänger bin.

Vielen Dank im Voraus, Callum

    
Cosmo Posmo 13.11.2010, 00:36
quelle

3 Antworten

10

Hier gehen wir:

Holen Sie die 5 Slave-Server dazu, eine Tabelle in einer Datenbank auf dem Hauptserver zu aktualisieren, indem Sie ihre Last alle X Sekunden / Minuten eingeben. Dann überprüfen Sie auf dem Hauptserver, welcher von ihnen die niedrigste Last hat, und leiten Sie den Benutzer zu diesem bestimmten Server um.

Wie bekomme ich die Serverlast?

Es gibt eine Funktion namens sys_getloadavg(); , die drei Muster zurückgibt, die die durchschnittliche Systemauslastung (die Anzahl der Prozesse in der Systemlaufwarteschlange) über die letzten 1, 5 bzw. 15 Minuten in einem Array darstellen.

Wenn die Systemlast über eine festgelegte Anzahl liegt, sollten Sie den Besucher auf einen anderen Slave-Server umleiten. Zum Beispiel:

%Vor%

Beachten Sie, dass 0 auf $load bedeutet, dass es die Serverlast für die letzte Minute erhält, 1 oder 2 für die durchschnittliche Systemlast von 5 und 15 Minuten. Die Abfrage würde sich auf einem Skript auf den Slave-Servern befinden, und bei jeder Ausführung würde sie die durchschnittliche Serverlast für die Tabelle server_load aktualisieren.

So wählen Sie vom Hauptserver aus

Sobald Sie die Funktion zum Abrufen der Serverlast von den Slave-Servern isoliert haben. Alles, was Sie vom Hauptserver aus tun müssen, ist, die Datenbank abzufragen und die niedrigste Auslastung aus der Tabelle server_load zu erhalten. Die erwähnte Tabelle wäre funktional genug mit einem Zeitstempelfeld, einem ID-Feld und einem Ladefeld mit der folgenden Struktur:

%Vor%

Für ein grundlegendes Tutorial zur Einführung von mysql und php interaction empfehle ich diesen Link von phpsense. Wenn Sie genügend Zeit darauf verwenden, die Dokumentation zu lesen, mit der ich Sie verlinkt habe, sollten Sie Ihr Ziel erreichen können. Stellen Sie sicher, dass Sie alle folgenden Fragen als unabhängige Entitäten stellen, wenn Sie sie auf dieser Site nicht bereits finden können. Es besteht die Möglichkeit, dass sie von Leuten, die dir vorausgegangen sind, immer wieder gefragt wurden. Ich hoffe, ich habe geholfen.

Quellen:

Juan Cortés 13.11.2010, 00:52
quelle
1

Sie werden etwas benötigen, um den Datenverkehr auf jedem Server zu bestimmen. Dies sollte eine Metrik ausgeben, mit der Sie vergleichen können. Jeder der fünf Server sollte seine Verkehrslast dynamisch berechnen und diese irgendwo aktualisieren (ich würde eine Datenbank vorschlagen). So kann Ihr Front-End-Server bei einem eingehenden Benutzer die Datenbank nach dem Server mit der geringsten Auslastung abfragen und sie dorthin leiten.

    
Paul Sonier 13.11.2010 00:48
quelle
0

Callum, ich bin neu hier und ich bin nicht ganz sicher, ob das gegen die Regeln ist, aber da es kein Nachrichtensystem gibt, poste ich das hier ... Die Antwort auf deine Frage, die du gestellt und gelöscht hast Die abgerundeten Ecken fügen Sie dies Ihrem CSS hinzu: (Ich habe es herausgefunden, als Sie es gelöscht haben und dann ließ es mich nicht posten)

%Vor%     
tsdexter 10.07.2011 00:27
quelle

Tags und Links