Workerman schreibt den Beispielcode des MySQL-Verbindungspools

Workerman schreibt den Beispielcode des MySQL-Verbindungspools

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:
  • Detaillierte Erläuterung der versionierten Verbindungspoollösung für Spring Boot Mysql
  • Python verwendet PyMysql und DBUtils, um einen Verbindungspool zur Leistungsverbesserung zu erstellen
  • Beispiel für die Verwendung eines MySQL-Verbindungspools in Node.js
  • Beispiel dafür, wie nodeJs eine Methode zur Verbindung mit MySQL basierend auf einem Verbindungspool implementiert
  • Beispiel für die Verwendung von Transaktionen zum automatischen Wiederverwenden von Verbindungen im MySQL-Verbindungspool mithilfe von Node.js
  • PHP realisiert den Implementierungscode für den MySQL-Verbindungspool-Effekt
  • Detaillierte Erläuterung der Python MySQL-Datenbankverbindungspoolkomponente pymysqlpool
  • Java verwendet MySQL, um ein Codebeispiel für einen Verbindungspool zu implementieren

<<:  Springboot + Vue-Cropper realisiert den Effekt des Avatar-Ausschneidens und -Hochladens

>>:  Nginx Reverse Proxy Springboot JAR-Paket-Prozessanalyse

Artikel empfehlen

Installations- und Verwendungsschritte für vue-amap

Ich habe zuvor die Verwendung des asynchronen Lad...

Hinweise zum MySQL-Datenbank-Sicherungsprozess

Heute habe ich mir einige Dinge im Zusammenhang m...

Zusammenfassung der Methode von React zum Erstellen von Komponenten

Inhaltsverzeichnis 1. Komponenten mit Funktionen ...

Tutorial zur HTML-Tabellenauszeichnung (2): Tabellenrahmenattribute BORDER

Standardmäßig beträgt der Rand der Tabelle 0 und ...

Zusammenfassung gängiger Befehle für Ubuntu-Server

Die meisten der folgenden Befehle müssen in der K...

So verwenden Sie vue.js zum Implementieren der Drag & Drop-Funktion

Vorwort Durch das Hinzufügen einer Drag & Dro...

Beispiel für die Methode „Mysql implementiert Nullwerte zuerst/letzten“

Vorwort Wir wissen bereits, dass MySQL den SQL-Be...

Eine eingehende Analyse von MySQL erläutert die Verwendung und die Ergebnisse

Vorwort Bei unserer täglichen Arbeit führen wir m...

So installieren und konfigurieren Sie den Apache-Webserver

Erfahren Sie, wie Sie Ihre eigene Website auf Apa...

Erläuterung des Arbeitsmechanismus von Namenode und SecondaryNameNode in Hadoop

1) Prozess 2) FSImage und Bearbeitungen Nodenode ...

Probleme bei der Installation von MySQL 8.0 und beim Zurücksetzen des Kennworts

Mysql 8.0 Installationsprobleme und Passwort-Rese...