![Skalieren eines Apache-Servers](https://rvso.com/image/515059/Skalieren%20eines%20Apache-Servers.png)
Ich habe einen Ubuntu-Server mit Apache2, auf dem voraussichtlich für eine begrenzte Zeit etwa 500-1000 (gleichzeitige) Benutzer arbeiten werden. Der Server stellt eine Mischung aus benutzerdefinierten (eher leichten) PHP-Seiten bereit, die mit einer PostgreSQL-Datenbank (etwa 20 MB groß) verbunden sind, und statischen Inhalten. Die Hardware ist stabil und ziemlich leistungsstark:
- Intel Xeon E5420 mit 2,5 GHz
- 12 GB RAM
Während früherer Rushes auf diesem Server habe ich ServerLimit und die MaxClients für die MPM-Module erhöht und Timeout und KeepAliveTimeout verringert. Das hat funktioniert, war aber träge und ich habe das Gefühl, dass noch mehr getan werden kann. Wie würden Sie vorschlagen, den Apache-Server zu konfigurieren, um diese Art von Last zu bewältigen?
Antwort1
Ihr Engpass in diesem Szenario wird PHP und das, was es mit der Datenbank macht, sein. Wenn Sie bei jedem Aufruf eine neue Verbindung öffnen, werden Sie höchstwahrscheinlich vor allem beim Festplattenzugriff auf I/O-Mauern stoßen. Am besten ist es, die Datenbank und den statischen Inhalt auf einer RAM-Disk zu speichern und Änderungen nach Bedarf an der Datenbank auf der Festplatte vorzunehmen. Pflegen Sie außerdem einen effizienten Abfrage-Caching-Mechanismus mithilfe einer RAM-dedizierten schnellen Hash-Suche in PHP, damit Sie PostgreSQL nicht mit unnötigen Verarbeitungszyklen im Zusammenhang mit Abfrage-Cache-Suchen belasten. Obwohl PostgreSQL beim Abfrage-Caching wahrscheinlich effizienter ist als Ihr eigener Code, ist es nicht so schnell, als ob es überhaupt keine Verbindung herstellen müsste.
Antwort2
Ihr Server sollte damit problemlos zurechtkommen. Nur ein paar Anmerkungen:
- Die Verwendung von SSL erhöht Ihren Rechenleistungsbedarf. Verwenden Sie daher einfaches HTTP.
- Die Verwendung von Prefork MPM erhöht Ihren Speicherbedarf. Verwenden Sie daher Worker MPM.
- Die Verwendung von mehr Parallelität mit mehr Kernen verbessert die Leistung.
- Reservieren Sie mehr RAM für Ihre PostgreSQL-Datenbank.
Dies sind nur allgemeine Richtlinien.