Serverkonfiguration für PHP/Apache2/MySQL für 250.000 Zugriffe pro Tag?

Serverkonfiguration für PHP/Apache2/MySQL für 250.000 Zugriffe pro Tag?

Kann mir jemand eine Konfiguration empfehlen oder mir noch besser eine vollständige Fallstudie für dieses Web-Setup nennen?

Im Grunde haben wir eine PHP-Site, die etwa 100.000 Zugriffe pro Tag erhält. Beim Versuch, diese Last auf einem VPS zu bedienen, kommt es bereits zu Verbindungstimeouts usw., da die CPU-Kapazität erreicht wird. Ich möchte etwas spezifizieren, mit dem es auf etwa 250.000 Zugriffe pro Tag skaliert werden kann.

Derzeit ist der Server:

  • ein Single-Core 1GHz Burstable VPS (von einem 2,6GHz Dual Core Xeon)
  • 2 GB Burst-RAM (auch hier finde ich Burst-RAM sehr vage)
  • 32 MB pro PHP-Prozess, bei dem eine Expression Engine (soweit ich weiß) oder etwas ähnlich Schweres ausgeführt wird
  • recht bildintensive Grafikseiten
  • gelegentliche Arbeiten im Hintergrund an einigen Seiten, wie XMLRPC zu Servern von Drittanbietern
  • einfaches Apache mit Modphp (also benötigen auch statische Dateien wie Bilder vollständige PHP-Prozesse – das kann derzeit nicht geändert werden)

Bisher scheint die CPU der größte Engpass zu sein, da einige Apache-Prozesse bei Anfragen etwa 30 % der CPU-Leistung verbrauchen. Einige andere Apache-Prozesse scheinen mit nur 1 % CPU-Leistung viel besser zurechtzukommen. Ich gehe davon aus, dass es sich dabei um Anfragen für statische Dateien handelt.

Also. Wir wollen vom VPS weg und auf eine dedizierte oder virtuelle dedizierte Box mit nicht überhöhter (messbarer, garantierter) Leistung umsteigen. Sie muss in der Lage sein, den aktuellen Netzverkehr zu bewältigen und diesen in Zukunft mindestens zu verdoppeln.

Können Sie mich auf Empfehlungen oder Studien aufmerksam machen?

Gibt es Tools, die Ihnen eine geschätzte Serverspezifikation basierend auf Parametern wie Speicher pro Apache-Prozess, Prozentsatz dynamischer Anfragen, ob es sich bei PHP-Code um schweres CMS-Zeug oder leichtes „Hello World“-Zeug usw. handelt, geben können?

Antwort1

Ich bezweifle, dass es zu diesem Thema brauchbare Fallstudien gibt, da die Leistung je nach Komplexität der Anwendung immer enorm variiert. Die einzige Möglichkeit, eine annähernd passende Leistung zu erreichen, besteht in Messungen und Extrapolationen.

Sie erwähnen das Betriebssystem nicht, aber ich würde eine Reihe von Leistungsmonitoren einrichten, die Threads, CPU-Auslastungen, Speicherstatistiken, Festplatten- und Netzwerkdaten usw. erfassen. Stellen Sie außerdem sicher, dass Sie die Anzahl der Zugriffe erfassen, mit denen Sie es zu tun haben. Daraus sollten Sie in der Lage sein, die minimale, durchschnittliche und maximale Ressourcennutzung für alle diese Komponenten basierend auf der tatsächlich beobachteten Auslastung zu ermitteln. Sobald Sie diese Statistiken haben (MHz/10.000 Benutzer, Speicher/10.000 Benutzer usw.), sollten Sie in der Lage sein, die benötigte Leistung schnell zu extrapolieren. Planen Sie unbedingt etwa 20 % zusätzlichen Spielraum ein, selbst wenn Sie die maximale erwartete Auslastung erreicht haben.

Ich weiß, dass das eine Menge Tabellenkalkulationsarbeit ist, aber nur so können Sie sich sicher fühlen. Es gibt ja immer noch die Methode „das Problem mit Tonnen von Hardware zu lösen“, die auch funktioniert, aber etwas kostet :)

Viel Glück. Kommen Sie später mit einigen Daten noch einmal vorbei, wenn Sie beim Verständnis Hilfe benötigen.

Antwort2

Fügen Sie einfach nginx im Proxy-Modus vor Apache hinzu und richten Sie es so ein, dass es wirklich statische Daten bereitstellt, ohne Apache zu berühren. Sie werden sofort eine Geschwindigkeitssteigerung spüren.

Dann würde ich Apache2 in den Prefork-Modus mit etwa 4–16 Child-Elementen schalten.

Hintergrundarbeit wie externe Verbindungen sind wirklich problematisch. Ich würde den Code umschreiben, um diese Dinge asynchron zu machen.

Schließlich ist möglicherweise die Bandbreite auf dem Masterknoten (d. h. dem Server, auf dem alle VPSses laufen) erschöpft. Fragen Sie Ihren Hosting-Anbieter, ob er eine 1-Gbit-Verbindung auf seinem Masterknoten hat. Wenn es nur 100 Mbit sind, sollten Sie vielleicht den Hosting-Anbieter wechseln.

verwandte Informationen