Heim >PHP-Framework >Laravel >Verständnis für Lastausgleich, Verteilung und Clustering sowie die Synchronisierung mehrerer Servercodes

Verständnis für Lastausgleich, Verteilung und Clustering sowie die Synchronisierung mehrerer Servercodes

步履不停
步履不停Original
2019-07-03 14:42:184477Durchsuche

Verständnis für Lastausgleich, Verteilung und Clustering sowie die Synchronisierung mehrerer Servercodes

Die Konzepte dieser Begriffe werden im Folgenden erläutert

Cluster

Wenn unser Projekt auf einer Maschine läuft, wenn diese Maschine ausfällt. Wenn ja, oder Das Volumen der Benutzeranfragen ist relativ hoch und kann von einer Maschine nicht unterstützt werden. Unsere Website ist möglicherweise nicht zugänglich. Wie kann man es also lösen? Wir müssen mehrere Computer verwenden und dasselbe Programm bereitstellen, damit mehrere Computer gleichzeitig unsere Website ausführen können. Wie verteilen wir also Anfragen an alle unsere Maschinen? So entstand das Konzept des Lastausgleichs.

Load Balancing

Load Balancing bedeutet, dass basierend auf Reverse Proxy alle aktuellen Anfragen gemäß dem angegebenen Richtlinienalgorithmus auf verschiedene Server verteilt werden können. Häufig werden zum Erreichen des Lastausgleichs Nginx und LVS verwendet. Aber jetzt gibt es auch ein Problem, was soll ich tun, wenn es ein Problem mit dem Lastausgleichsserver gibt? Alle Konzepte der Redundanz tauchen auf.

Redundanz

Redundanz besteht eigentlich aus zwei oder mehr Servern, einem Master-Server und einem Slave-Server. Angenommen, es liegt ein Problem mit dem Lastausgleichsserver eines Master-Servers vor und der Slave-Server kann den Master-Server ersetzen, um den Lastausgleich fortzusetzen. Der Weg, dies zu erreichen, besteht darin, Keepalive zu verwenden, um den virtuellen Host zu besetzen.

Verteilt

Verteilt bedeutet eigentlich, ein großes Projekt aufzuteilen und unabhängig auszuführen.

Nehmen Sie das obige Beispiel. Nehmen wir an, unser Traffic ist besonders hoch. Wir können es mit demselben Mechanismus wie CDN verteilen. Ein identischer Cluster wird an drei Orten aufgebaut: Peking, Hangzhou und Shenzhen. Benutzer in der Nähe von Peking erhalten Zugriff auf den Cluster in Peking, und Benutzer in der Nähe von Shenzhen erhalten Zugriff auf den Cluster in Shenzhen. Auf diese Weise ist unser Online-Kampf in drei Bereiche unterteilt, die jeweils unabhängig voneinander sind.

Ein weiteres Beispiel ist unsere Redis-Distribution. Die Redis-Verteilung verteilt die Daten in Redis auf verschiedene Server. Jeder Server speichert unterschiedliche Inhalte, während der MySQL-Cluster auf jedem Server dieselben Daten speichert. Dies versteht auch die Konzepte der Verteilung und des Clusterings.

MySQL-Master-Slave

MySQL Der Master-Server schreibt das SQL-Operationsprotokoll in das bin.log-Protokoll. Der Slave-Server liest das Bin.log-Protokoll des Masters und führt dann die SQL-Anweisung aus .

Master und Slave haben die folgenden Probleme.

1. Der Master-Server kann schreiben und lesen, aber der Slave kann nur schreiben.

Die vom Slave gelesenen Daten wurden noch nicht geschrieben.

1. Wenn zwischengespeichert, aus dem Cache lesen.
2. Lesen vom Master erzwingen.
3. Mit dem pxc-Cluster ist jeder Knoten lesbar und beschreibbar, mit hoher Konsistenz beim Lesen und Schreiben.

Wie Laravel Dateninkonsistenzen löst

Sticky im MySQL-Konfigurationsblock config/database.php auf true setzen

sticky ist ein optionaler Wert, der zum sofortigen Lesen verwendet werden kann Rufen Sie die Datensätze ab, die während des aktuellen Anforderungszyklus in die Datenbank geschrieben wurden. Wenn die Sticky-Option aktiviert ist und während des aktuellen Anforderungszyklus ein „Schreib“-Vorgang ausgeführt wurde, verwenden alle „Lese“-Vorgänge die „Schreib“-Verbindung. Dadurch wird sichergestellt, dass im selben Anforderungszyklus geschriebene Daten sofort gelesen werden können, wodurch das Problem der Dateninkonsistenz durch Master-Slave-Verzögerung vermieden wird. Ob es jedoch aktiviert werden soll, hängt von den Anforderungen der Anwendung ab.

Was passiert, wenn unser Code mit mehreren Servern synchronisiert wird?

Laravel stellt uns das Erweiterungspaket laravel/envoy zur Verfügung, das eine Reihe prägnanter und leichter Syntax zum Definieren täglicher Aufgaben von Remote-Servern bereitstellt. Die Blade-Stil-Syntax kann zum Konfigurieren von Bereitstellungsaufgaben, zum Ausführen von Artisan-Befehlen usw. verwendet werden.

composer global require laravel/envoy

Envoy-Aufgaben sollten alle in Envoy.blade.php im Projektstammverzeichnis definiert werden. Schreiben Sie den Inhalt

@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2'])

@task('deploy', ['on' => ['web-1', 'web-2']])
    cd site
    git pull origin {{ $branch }}
    composer update
    php artisan migrate
@endtask

Die Bedeutung des obigen Codes ist, dass wir, wenn envoy in der Befehlszeile „deploy“ ausführt, per SSH zu Web-1 und Web-2 wechseln und

    cd site
    git pull origin {{ $branch }}
    php artisan migrate

Natürlich ausführen. Diese Voraussetzung ist, dass wir SSH mit dem Remote-Server verbunden haben.

Weitere technische Artikel zu Laravel finden Sie in der Spalte Laravel-Tutorial, um mehr darüber zu erfahren!

Das obige ist der detaillierte Inhalt vonVerständnis für Lastausgleich, Verteilung und Clustering sowie die Synchronisierung mehrerer Servercodes. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn