Angenommen, die Bewerbungs-App verbraucht 5 W RMB für Einkäufe bei Lieferanten. Am Tag der Registrierung strömt eine große Anzahl von Kandidaten herein und die Anzahl der gleichzeitigen Anfragen steigt auf über 30 W, was dazu führt, dass das System ausfällt und ablehnt Service, und Kandidaten können sich nicht registrieren. Kann 5W RMB 30W+ unterstützen?
Aber für uns könnten wir das Problem genauso gut aus einem anderen Blickwinkel betrachten: „Wie kann man die Parallelitätsfähigkeit des Servers innerhalb begrenzter Ressourcen maximieren?“ Angenommen, Sie sind ein technischer Leiter. Wie würden Sie ein Projekt mit einem hohen Maß an Parallelität entwerfen und strukturieren?
Zunächst können wir die allgemeine Idee dieses Projekts zusammenfassen. Aus der obigen Beschreibung ist nicht schwer zu erkennen, dass der Engpass dieses Projekts eher im „gleichzeitigen Schreiben“ als im „Lesen“ liegt Was die Ressourcenzuteilung betrifft, können wir uns dem „Schreiben“ zuwenden. Hier schreibe ich alle Daten in Redis. Darüber hinaus müssen wir unser Bestes geben, um MySQL-Lesevorgänge auf Redis zu migrieren. Die von MySQL geleistete Arbeit ist eher auf einige herkömmliche nicht gleichzeitige Lese- und Schreibvorgänge ausgerichtet.
Server
Wenn eine Benutzeranfrage eingeht, lädt der Load Balancer sie auf jeden Server
Dies sind Stresstestdaten von Symfony mit 1 CPU, 4 GB und PHP 7-Konfiguration.
Die Daten im obigen Bild stammen von der offiziellen Swoole-Website. Nachdem wir die Ausführung unserer eigentlichen Geschäftslogik hinzugefügt haben, können wir feststellen, dass 3 Server mit niedrigerer Konfiguration das Problem lösen können. Für die Lösung des obigen Problems sind 16 Einheiten erforderlich.
Datenbank
Tatsächlich werden viele Leute verstehen, dass die Engpässe vieler aktueller Internetprojekte eher im Datenbank-E/A-Bereich liegen Besonders großer Unterschied zwischen den verschiedenen Sprachen. Einschließlich der viel kritisierten PHP-FPM-Startmethode können Sie diese auch durch Swoole und andere Methoden ersetzen. Daher konzentrieren wir uns in diesem Projekt mehr auf die Datenbank und können versuchen, Redis zur Lösung zu verwenden. Natürlich müssen wir im spezifischen Code auch eine bestimmte Anzahl von Datenverbindungspools vorbereiten. Darüber hinaus wird auch davon ausgegangen, dass die Schreibgeschwindigkeit von MongoDB bei gleicher Konfiguration zwar viel schneller ist als die von MySQL, im Vergleich zu Redis jedoch immer noch offensichtliche Mängel aufweist.
Registrieren und Anmelden
Registrierung und Anmelden sollten eigentlich in zwei Teile unterteilt werden, die jeweils dem „Schreiben“ und dem „Lesen“ entsprechen. Im Falle einer hohen Anzahl gleichzeitiger Lese- und Schreibvorgänge wird die direkte Verwendung von MySQL erwartungsgemäß explodieren. Daher können wir Benutzerdaten während des Erstellungsprozesses des gesamten Projekts in Redis zwischenspeichern. „Schreib“-Problem: Wenn die Anzahl der Benutzer unklar ist und die Parallelität groß ist, bevorzuge ich es, Benutzerdaten nicht direkt in der Datenbank zu speichern. Wir können einen Schalter oder Schwellenwert entwerfen, um die Lagerhaltungsmethode des Benutzers festzulegen. Wenn die Parallelität groß ist, können Benutzer die Lagerhaltung asynchron über MQ durchführen, aber in normalen Zeiten können Benutzer die Lagerhaltung normal durchführen.
Formular absenden
Da es sich bei diesem Projekt nicht um einen gewöhnlichen Flash-Sale handelt und eine sofortige Benachrichtigung erforderlich ist, reduziert das Design unseres Projekts die Schwierigkeit erheblich. Die Funktion des Absendens des Formulars ähnelt der Registrierung. Wir können die Daten vollständig asynchron in die Datenbank laden und sie dann im Hintergrund überprüfen.
Zusammenfassung
Ob andere CDNs und MySQL Master-Slave benötigen, wird nicht im Detail beschrieben, es hängt von der tatsächlichen Situation ab. Wenn Sie PHP-FPM verwenden, kostet die Lösung dieses Projektproblems etwa 4.500 Yuan/Monat. Was ich erklären möchte ist das, wenn wir mit großen gleichzeitigen Projekten konfrontiert sind, insbesondere wenn die Geschäftslogik relativ komplex ist, können wir das Problem besser lösen, indem wir residenten Speicher verwenden, und das hat nichts mit der Sprache zu tun. Abschließend ist zu beachten, dass es sich bei dem oben Gesagten nur um eine theoretische Phase handelt und die tatsächlichen Daten weiterer Tests bedürfen. Das Material des Artikels stammt aus dem Internet. Wenn es fehlerhafte Formulierungen gibt, weisen Sie bitte darauf hin.
Das obige ist der detaillierte Inhalt vonSo maximieren Sie die Parallelitätsfähigkeit des PHP-Servers innerhalb begrenzter Ressourcen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!