Zunächst müssen Sie verstehen, warum Sie Verbindungspools verwenden und welche Probleme sie für Sie lösen können. Die Hauptfunktionen des Verbindungspools sind: 1. Reduzieren Sie den Overhead von Drei-Wege-Handshakes zum Herstellen einer TCP-Verbindung mit dem Datenserver und von Vier-Wege-Handshakes zum Schließen der Verbindung, wodurch die Belastung des Clients und des MySQL-Servers verringert und die Anforderungsantwortzeit verkürzt wird 2. Reduzieren Sie die Anzahl gleichzeitiger Verbindungen zur Datenbank, dh lösen Sie das Problem zu vieler Verbindungen zur Datenbank, das durch zu viele Anwendungsserver verursacht wird Wenn es das Problem lösen soll 1 Bei Workerman ist die Verwendung eines Datenbankverbindungspools nicht die effizienteste Methode, sondern eher ein problematischer Ansatz. Da PHP ein Single-Prozess- und Single-Thread-Programm ist, erfordert die Verwendung von PHP zur Implementierung eines Datenbankverbindungspools einen separaten Prozess. Dies erfordert eine Interprozesskommunikation, die den ursprünglichen Prozess der direkten Kommunikation mit MySQL in eine Kommunikation mit dem Verbindungspool und dann mit MySQL ändert, was die Belastung auf der Anwendungsseite erhöht. Die effizienteste Methode zur Lösung von Problem 1 besteht darin, für jeden Geschäftsprozess ein Datenbank-Singleton zu erstellen (z. B. die von Workerman bereitgestellte DB-Klasse), um eine dauerhafte Datenbankverbindung zu implementieren. Auf diese Weise verwenden alle Anforderungen jedes Prozesses seine eigene dauerhafte Datenbankverbindung. Der gesamte Lebenszyklus des Prozesses hat nur einen TCP-Handshake und einen Disconnection-Wave-Overhead. Darüber hinaus kommuniziert die Anwendung direkt mit MySQL, ohne eine Zwischenschicht der Interprozess-IPC-Kommunikation wie einen Verbindungspool. Die Leistung ist zweifellos die höchste. Wenn es um Frage 2 geht Überprüfen Sie zunächst, wie viele Anwendungsserver Sie haben und wie viele gleichzeitige Verbindungen jeder Server mit MySQL hat. Wenn Sie nur 10 Anwendungsserver haben, jeder Server 50 Prozesse hat und jeder Prozess 1 Datenbankverbindung hat, dann gibt es nur 10*50=500 gleichzeitige Verbindungen zum MySQL-Server (keine aktiven Verbindungen). 500 gleichzeitige Verbindungen sind für MySQL ein Kinderspiel. Um Problem 2 zu lösen, ist es nicht erforderlich, einen Verbindungspool zu verwenden. Wenn Sie 1.000 Anwendungsserver haben, ist ein Verbindungspool erforderlich. Dieser Verbindungspool kann jedoch kein Verbindungspool sein, der auf dem lokalen Anwendungsserver ausgeführt wird, da 1.000 Anwendungsserver 1.000 Verbindungspools haben. Selbst wenn jeder Verbindungspool nur 10 Verbindungen öffnet, ist die Anzahl der Datenbankverbindungen leicht erschöpft. Erwarten Sie also nicht, dass das Öffnen einiger Taskprozesse auf dem aktuellen Server zum Implementieren eines Verbindungspools dieses Problem löst. Für einen Cluster mit 1.000 Anwendungsservern ist es außerdem keine zuverlässige Methode, auf jedem Server einen Verbindungspool mit mehreren Prozessen zu implementieren. Die wirkliche Lösung für Problem 2 besteht darin, einen unabhängigen Datenbankverbindungspoolserver oder -cluster einzurichten, um alle Datenbankverbindungen global zu verwalten. Zusammenfassend: Wenn Sie den MySQL-Verbindungspool von PHP nur für Problem 1 implementieren möchten, ist ein Datenbank-Singleton ein einfacherer und effizienterer Ansatz als ein sogenannter Verbindungspool. Wenn das Ziel darin besteht, Frage 2 zu erfüllen, muss das Unternehmen eine gewisse Größe haben. Wenn Sie Workerman wirklich verwenden möchten, um einen separaten Verbindungspool-Cluster zu erstellen, ist der folgende Ansatz einfach. Erstellen Sie einige Taskprozesse, jeder Prozess erstellt eine Datenbankverbindung und der Taskprozess sendet die SQL-Anforderung nach Erhalt an den MySQL-Server. Nachdem der MySQL-Server zurückgekehrt ist, sendet der Taskprozess das Ergebnis an den SQL-Initiator. Der Verbindungspoolcode ähnelt dem folgenden. Wenn es sich um einen Verbindungspoolcluster handelt, der aus mehreren Servern besteht, fügen Sie am besten ein lvs davor hinzu: // Task-Worker, verwendet Textprotokoll $task_worker = new Worker('Text://0.0.0.0:1234'); $task_worker->Anzahl = 64; $task_worker->name = "MysqlTask"; $task_worker->onMessage = Funktion($Verbindung, $sql) { // SQL ausführen.... Ergebnis abrufen, hier ausgelassen.... $sql_result = Ihre_MySQL-Abfrage($sql); // Ergebnis senden $connection->send(json_encode($sql_result)); }; Arbeiter rufen: verwenden Sie \Workerman\Connection\AsyncTcpConnection; // Eine asynchrone Verbindung mit dem Remote Connection Pool-Dienst herstellen. Die IP-Adresse ist die IP-Adresse des Remote Connection Pool-Dienstes. Wenn es sich um einen Cluster handelt, ist es die IP-Adresse des LVS-Dienstes. $sql_connection = neue AsyncTcpConnection('Text://ip:1234'); // SQL senden $sql_connection->send("AUSWÄHLEN ... AUS ...."); // SQL-Ergebnisse asynchron abrufen $sql_connection->onMessage = function($sql_connection, $sql_result) { // Hier drucken wir einfach das Ergebnis var_dump(json_decode($task_result)); }; // Asynchrone Verbindung ausführen $sql_connection->connect(); Das Obige sind alle Wissenspunkte zum Schreiben eines MySQL-Verbindungspools in Workerman, die dieses Mal vorgestellt werden. Wenn Sie Ergänzungen haben, wenden Sie sich bitte an den Herausgeber von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: Springboot + Vue-Cropper realisiert den Effekt des Avatar-Ausschneidens und -Hochladens
>>: Nginx Reverse Proxy Springboot JAR-Paket-Prozessanalyse
Ich habe zuvor die Verwendung des asynchronen Lad...
Ich habe kürzlich bei der Entwicklung eines Proje...
Heute habe ich mir einige Dinge im Zusammenhang m...
Inhaltsverzeichnis 1. Komponenten mit Funktionen ...
Standardmäßig beträgt der Rand der Tabelle 0 und ...
Die meisten der folgenden Befehle müssen in der K...
Über die Baumdarstellung von Vue wird im Projekt ...
Vorwort Durch das Hinzufügen einer Drag & Dro...
Vorwort Wir wissen bereits, dass MySQL den SQL-Be...
Vorwort Bei unserer täglichen Arbeit führen wir m...
Erfahren Sie, wie Sie Ihre eigene Website auf Apa...
Inhaltsverzeichnis V-Modell .sync Der Unterschied...
1) Prozess 2) FSImage und Bearbeitungen Nodenode ...
Mysql 8.0 Installationsprobleme und Passwort-Rese...
Vorwort Bei der Entwicklung kleiner Programme müs...