Heim >Backend-Entwicklung >PHP-Tutorial >PHP, Nginx, Apache, MySQL Wie löst PHP das Problem des großen Website-Verkehrs und der hohen Parallelität? />
Bestätigen Sie zunächst, ob die Serverhardware ausreicht, um den aktuellen Datenverkehr zu unterstützen.
Gewöhnliche P4-Server können im Allgemeinen bis zu 100.000 unabhängige IPs pro Tag unterstützen. Wenn die Anzahl der Besuche höher ist, müssen Sie zunächst einen dedizierten Server mit höherer Leistung konfigurieren, um das Problem zu lösen Dadurch werden Leistungsprobleme nicht vollständig gelöst.
Zweitens optimieren Sie den Datenbankzugriff. Natürlich ist es am besten, eine vollständige Statik der Rezeption zu erreichen, da überhaupt kein Zugriff auf die Datenbank erforderlich ist. Bei Websites, die häufig aktualisiert werden, kann die Statik jedoch häufig bestimmte Funktionen nicht erfüllen.
Caching-Technologie ist eine weitere Lösung, die darin besteht, dynamische Daten in Cache-Dateien zu speichern und dynamische Webseiten diese Dateien direkt aufzurufen, ohne auf die Datenbank zugreifen zu müssen. Sowohl WordPress als auch Z-Blog nutzen diese Caching-Technologie in großem Umfang.
Wenn es tatsächlich unvermeidlich ist, auf die Datenbank zuzugreifen, können Sie versuchen, die Abfrage-SQL der Datenbank zu optimieren. Vermeiden Sie die Verwendung von Anweisungen wie „Select * from“. Jede Abfrage gibt nur die Ergebnisse zurück, die Sie benötigen, und vermeidet so eine große Menge von SQL in kurzer Zeit.
Drittens ist das externe Hotlinking verboten.
Hotlinking von Bildern oder Dateien von externen Websites bringt oft einen hohen Lastdruck mit sich, daher sollte das Hotlinking von externen Bildern oder Dateien strikt eingeschränkt werden. Glücklicherweise kann Hotlinking derzeit einfach über Verweis gesteuert werden, und Apache selbst kann Hotlinking durchführen kann durch Konfiguration verboten werden. IIS verfügt auch über einige ISAPIs von Drittanbietern, die dieselbe Funktion erreichen können. Natürlich können gefälschte Verweise auch verwendet werden, um Hotlinking durch Code zu erreichen. Allerdings gibt es derzeit nicht viele Leute, die absichtlich Verweise auf Hotlinks fälschen. Sie können dies vorerst ignorieren oder nichttechnische Mittel verwenden, um das Problem zu lösen Wasserzeichen für Bilder.
Viertens kontrollieren Sie den Download großer Dateien.
Das Herunterladen großer Dateien nimmt viel Datenverkehr in Anspruch, und bei Nicht-SCSI-Festplatten verbraucht das Herunterladen einer großen Anzahl von Dateien die CPU und verringert die Reaktionsfähigkeit der Website. Versuchen Sie daher, keine Downloads großer Dateien mit einer Größe von mehr als 2 MB bereitzustellen. Wenn Sie diese bereitstellen müssen, wird empfohlen, die großen Dateien auf einem anderen Server zu platzieren.
Fünftens: Verwenden Sie verschiedene Hosts, um den Hauptverkehr umzuleiten.
Platzieren Sie Dateien auf verschiedenen Hosts und stellen Sie den Benutzern unterschiedliche Bilder zum Herunterladen zur Verfügung. Wenn Sie beispielsweise das Gefühl haben, dass RSS-Dateien viel Datenverkehr beanspruchen, verwenden Sie Dienste wie FeedBurner oder FeedSky, um die RSS-Ausgabe auf anderen Hosts zu platzieren. Auf diese Weise wird der größte Teil des Datenverkehrsdrucks durch den Zugriff anderer Personen konzentriert Der Host von FeedBurner und RSS belegen nicht zu viele Ressourcen.
Sechstens: Verwenden Sie eine Verkehrsanalyse- und Statistiksoftware.
Durch die Installation einer Verkehrsanalyse- und Statistiksoftware auf der Website können Sie sofort erkennen, wo viel Verkehr verbraucht wird und welche Seiten optimiert werden müssen. Daher ist eine genaue statistische Analyse erforderlich, um das Verkehrsproblem zu lösen. Zum Beispiel: Google Analytics.
Hohe Parallelität und hohe Lastbeschränkungen: Hardware, Bereitstellung, Betriebssystem, Webserver, PHP, MySQL, Tests
Bereitstellung: Servertrennung, Datenbankcluster und Bibliothekstabelle Hashing, Spiegelung, Lastausgleich
Lastausgleichsklassifizierung: 1) DNS-Round-Robin 2) Proxyserver-Lastausgleich 3) Adressübersetzungs-Gateway-Lastausgleich 4) NAT-Lastausgleich 5) Reverse-Proxy-Lastausgleich 6) Hybrider Lastausgleich
Bereitstellungsplan 1:
Anwendungsbereich: Websites und Anwendungssysteme mit statischen Inhalten als Hauptteil; Websites und Anwendungssysteme mit hohen Systemsicherheitsanforderungen.
Hauptserver: Der Hauptserver
trägt den Hauptlaufdruck des Programms und verarbeitet dynamische Anforderungen auf der Website oder im Anwendungssystem.
überträgt statische Seiten an mehrere Veröffentlichungsserver ;
Übertragen Sie die Anhangsdatei auf den Dateiserver
Für Websites mit hohen Sicherheitsanforderungen und hauptsächlich statischen, kann der Server im internen Netzwerk platziert werden, um den Zugriff vom externen Netzwerk zu blockieren.
DB-Server: Der Datenbankserver
trägt den Lese- und Schreibdruck der Datenbank
tauscht nur Daten mit dem Hauptserver aus und blockiert den externen Netzwerkzugriff.
Datei-/Videoserver: Der Datei-/Videoserver
überträgt Datenströme, die große Systemressourcen und Bandbreitenressourcen im System beanspruchen.
dient zum Speichern, Lesen und Schreiben von Lager für große Anhänge
Als Videoserver verfügt er über automatische Videoverarbeitungsfunktionen.
Veröffentlichungsservergruppe:
ist nur für die Veröffentlichung statischer Seiten verantwortlich und überträgt die überwiegende Mehrheit der Webanfragen.
führt die Lastausgleichsbereitstellung über Nginx durch.
Bereitstellungsplan 2:
Anwendungsbereich: Websites oder Anwendungssysteme mit dynamischem interaktivem Inhalt als Hauptteil; Websites oder Anwendungssysteme mit hohem Lastdruck und ausreichendem Budget; >Webservergruppe:
Webdienste haben keine Master-Slave-Beziehung und sind parallele redundante Designs
Der Lastausgleich wird durch Front-End-Lastausgleichsgeräte oder Nginx-Reverse-Proxy erreicht;
Durch die Aufteilung dedizierter Dateiserver/Videoserver werden leichte/schwere Busse effektiv getrennt.Jeder Webserver kann über DEC eine Verbindung zu allen Datenbanken herstellen und diese gleichzeitig in Master und Slave aufteilen. Datenbankservergruppe: Hält relativ ausgeglichenen Datenbank-Lese- und Schreibdruck bereit Erreicht die Datensynchronisierung mehrerer Datenbanken durch die Zuordnung physischer Datenbankdateien. Gemeinsame Festplatte/Festplatten-ArrayWird zum einheitlichen Lesen und Schreiben von physischen Datendateien verwendetSpeicherlager für große AnhängeÜber seine eigene physische Datei Festplattenbalance und Redundanz zur Gewährleistung der E/A-Effizienz und Datensicherheit des Gesamtsystems; Lösungsmerkmale:Angemessene Verteilung des Webdrucks durch Front-End-Lastausgleich;
Angemessene Verteilung von leichten und schweren Datenflüssen durch die Trennung von Datei-/Videoservern und regulären Webservern; durch Datenbankservergruppen Datenbank-E/A-Druck;
Jeder Webserver stellt normalerweise nur eine Verbindung zu einem Datenbankserver her. Durch die Heartbeat-Erkennung kann in sehr kurzer Zeit automatisch auf einen redundanten Datenbankserver umgeschaltet werden >Festplattenarray Die Einführung von IO verbessert die System-IO-Effizienz erheblich und erhöht die Datensicherheit erheblich.
Webserver:
Ein großer Teil der Ressourcennutzung des Webservers entsteht durch die Verarbeitung von Webanfragen. Dies ist der Druck, der von Apache erzeugt wird Verbindungen, Nginx ist Apache Eine gute Alternative zu Servern. Nginx („Engine x“) ist ein in Russland geschriebener Hochleistungs-HTTP- und Reverse-Proxy-Server. In China verwenden viele Websites und Kanäle wie Sina, Sohu Pass, NetEase News, NetEase Blog, Kingsoft Xiaoyao.com, Kingsoft iPowerWord, Xiaonei.com, YUPOO Photo Album, Douban, Xunlei Kankan usw. Nginx-Server.
Vorteile von Nginx:
Hohe gleichzeitige Verbindung: Der offizielle Test kann 50.000 gleichzeitige Verbindungen unterstützen, und in der tatsächlichen Produktionsumgebung erreicht die Anzahl gleichzeitiger Verbindungen 20.000 bis 30.000.
Geringer Speicherverbrauch: Unter 30.000 gleichzeitigen Verbindungen verbrauchen die 10 gestarteten Nginx-Prozesse nur 150 MB Speicher (15 MB * 10 = 150 MB).
Eingebaute Health-Check-Funktion: Wenn ein Webserver im Backend von Nginx Proxy ausfällt, ist der Front-End-Zugriff nicht beeinträchtigt.
Strategie: Im Vergleich zum alten Apache wählen wir Lighttpd und Nginx, Webserver mit geringerem Ressourcenverbrauch und höherer Lastkapazität.
MySQL:
Die MySQL-Optimierung selbst ist eine sehr komplizierte Aufgabe, da sie letztendlich ein gutes Verständnis der Systemoptimierung erfordert. Jeder weiß, dass die Datenbankarbeit eine große Anzahl kurzfristiger Abfragen, Lese- und Schreibvorgänge umfasst. Zusätzlich zu Softwareentwicklungstechniken wie der Indizierung und der Verbesserung der Abfrageeffizienz, auf die bei der Programmentwicklung geachtet werden muss, sind die Hauptauswirkungen auf die MySQL-Ausführungseffizienz Aus Sicht der Hardware kommt es auf die Festplattensuche, die Festplatten-IO-Level, die CPU-Zyklen und die Speicherbandbreite an.
Führen Sie eine MySQL-Optimierung entsprechend den Hardware- und Softwarebedingungen auf dem Server durch. Der Kern der MySQL-Optimierung liegt in der Zuweisung von Systemressourcen. Dies bedeutet nicht, dass MySQL unbegrenzt mehr Ressourcen zugewiesen werden muss. In der MySQL-Konfigurationsdatei führen wir einige der bemerkenswertesten Parameter ein:
Ändern Sie die Indexpufferlänge (key_buffer)
Ändern Sie die Tabellenlänge (read_buffer_size)
Einstellungen öffnen Die maximale Anzahl von Tabellen (table_cache)
Legen Sie ein Zeitlimit (long_query_time) für langsame lange Abfragen fest
Wenn die Bedingungen es zulassen, ist es im Allgemeinen am besten, den MySQL-Server im Linux-Betriebssystem zu installieren. und Nicht in FreeBSD installiert.
Strategie: Die MySQL-Optimierung erfordert die Formulierung verschiedener Optimierungspläne basierend auf den Datenbank-Lese- und Schreibeigenschaften des Geschäftssystems und der Server-Hardwarekonfiguration, und die Master-Slave-Struktur von MySQL kann nach Bedarf bereitgestellt werden. PHP:
1. Laden Sie so wenige Module wie möglich.
2. Wenn es sich um eine Windows-Plattform handelt, versuchen Sie, IIS oder Nginx zu verwenden Verwenden Sie Apache;
3. Installieren Sie einen Beschleuniger (beide verbessern die Ausführungsgeschwindigkeit von PHP-Code, indem Sie die vorkompilierten Ergebnisse von PHP-Code und Datenbankergebnissen zwischenspeichern)
eAccelerator, eAccelerator ist ein kostenloser und Open-Source-PHP-Beschleuniger, Optimiertes und dynamisches Content-Caching verbessert die Caching-Leistung von PHP-Skripten, wodurch der Server-Overhead von PHP-Skripten im kompilierten Zustand fast vollständig eliminiert wird. Apc: Alternative PHP Cache (APC) ist ein kostenloser und öffentlich optimierter Code-Cache für PHP. Es wird verwendet, um ein kostenloses, offenes und robustes Framework zum Zwischenspeichern und Optimieren von PHP-Zwischencode bereitzustellen.
Memcache: Memcache ist ein leistungsstarkes, verteiltes Speicherobjekt-Caching-System, das von Danga Interactive entwickelt wurde und dazu dient, die Datenbanklast zu reduzieren und die Zugriffsgeschwindigkeit in dynamischen Anwendungen zu verbessern. Der Hauptmechanismus besteht darin, eine einheitliche riesige Hash-Tabelle im Speicher zu verwalten, mit der Daten in verschiedenen Formaten gespeichert werden können, einschließlich Bildern, Videos, Dateien und Datenbanksuchergebnissen usw.
Xcache: von Chinesen entwickelt people Cache,
Strategie: Beschleuniger für PHP installieren.
Proxyserver (Cache-Server):
Squid Cache (als Squid bezeichnet) ist ein beliebter Proxyserver und Web-Caching-Server für freie Software (GNU General Public License). Squid hat ein breites Einsatzspektrum, angefangen bei der Funktion als Front-End-Cache-Server für Webserver, um die Geschwindigkeit von Webservern durch Zwischenspeichern relevanter Anfragen zu erhöhen, bis hin zum Zwischenspeichern des World Wide Web, des Domain Name Systems und anderer Websuchen für eine Gruppe von Personen zur gemeinsamen Nutzung von Netzwerkressourcen, zur Unterstützung des Netzwerks durch Filterung des Datenverkehrs und zum LAN über ein Proxy-Netzwerk. Squid ist in erster Linie für die Ausführung auf Unix-ähnlichen Systemen konzipiert.
Strategie: Die Installation des Squid-Reverse-Proxy-Servers kann die Servereffizienz erheblich verbessern.
Stresstests: Stresstests sind ein grundlegendes Qualitätssicherungsverhalten, das Teil jedes wichtigen Softwaretests ist. Die Grundidee von Stresstests ist einfach: Anstatt manuelle oder automatisierte Tests unter normalen Bedingungen durchzuführen, führen Sie Tests unter Bedingungen durch, bei denen die Anzahl der Computer gering oder die Systemressourcen knapp sind. Zu den Ressourcen, die typischerweise einem Stresstest unterzogen werden, gehören der interne Speicher, die CPU-Verfügbarkeit, der Festplattenspeicher und die Netzwerkbandbreite. Parallelität wird im Allgemeinen für Stresstests verwendet.
Stresstest-Tools: Webbench, ApacheBench usw.
Schwachstellentest: Zu den Schwachstellen in unserem System gehören hauptsächlich: SQL-Injection-Schwachstellen, XSS-Cross-Site-Scripting-Angriffe usw. Sicherheit umfasst auch Systemsoftware, wie z. B. Schwachstellen im Betriebssystem, Schwachstellen in MySQL, Apache usw., die im Allgemeinen durch Upgrades behoben werden können.
Tool zum Testen von Sicherheitslücken: Acunetix Web Vulnerability Scanner