Basierend auf den Beschreibungen für Prefork und Worker MPM scheint der Prefork-Typ etwas veraltet zu sein, aber ich kann keinen richtigen Vergleich zwischen den beiden Typen finden.
Was ich gerne wissen würde:
- Was sind die Unterschiede zwischen den beiden Versionen?
- Was sind die (Un-) Vorteile jedes Servertyps?
- Gibt es grundlegende Richtlinien für die Auswahl des Typs anhand der Bedingungen?
- Gibt es große Leistungsunterschiede zwischen den beiden?
apache-2.2
mpm-worker
mpm-prefork
Aron Rotteveel
quelle
quelle
Antworten:
Wie in den Dokumenten angegeben, sollten Sie das Prefork-MPM verwenden, wenn Sie aus Gründen der Kompatibilität mit nicht thread-sicheren Bibliotheken das Threading vermeiden möchten. In der Regel hat jedes nicht triviale Apache-Modul (
mod_php
oder genauer gesagt die Vielzahl der Erweiterungen und Bibliotheken, mit denen es verknüpft ist - das kanonische Beispiel) eine Art nicht thread-sichere Bibliothek (oder eine nicht thread-sichere Bibliothek). sicherer Code drin). Wenn Sie also keine Apache-Installation auf ziemlich hohem Standard verwenden, würde ich mich für den Prefork-MPM entscheiden.quelle
php-fpm
via FastCGI verbunden ist. Dann ist das Worker-MPM in Ordnung - dann führt die fpm jede PHP-Anfrage in einem eigenen Prozess aus, während der Apache Threaded ausführen kann. Das PHP-Thread-Sicherheitsproblem verhindert nur die Verwendung vonmod_php
PHP innerhalb des Apache-Prozesses.Die klassische Lösung zur Ausführung unsicherer Erweiterungen bei gleichzeitiger Verwendung einer großen Anzahl (> 100) von Verbindungen besteht darin, PHP auf fastCGI (mod_fcgid, ein natives Apache-Modul) und dynamische Proxy-Anforderungen von einer Apache-Instanz auszuführen, auf der Worker MPM ausgeführt wird.
Auf diese Weise können Sie bei einer Mischung aus statischen und dynamischen Inhalten von einigen hundert bis zu 1000 gleichzeitigen Verbindungen mit einer bescheidenen Speicherkapazität (4 bis 8 GB) skalieren.
Natürlich sollten Sie auch Front-End-Caching-Lösungen als Teil Ihrer Gesamtbereitstellung (memcached, lackiert) untersuchen.
Alternativ können Sie ein Upgrade auf Apache 2.4 und dessen systemeigenes Ereignis- MPM durchführen, das die Parallelität erheblich verbessert (Threads werden beim Herstellen der Verbindung ausgelöst und warten nicht auf eine Abfrage).
quelle
Es ist ungefähr 3 Jahre her, seit die Frage veröffentlicht wurde, aber ich würde empfehlen, dass Sie Worker MPM anstelle von Pre-Fork verwenden, auch wenn Sie PHP verwenden, um eine bessere Leistung zu erzielen.
In Bezug auf die Unterschiede ist Pre-Fork ohne Threading, daher gibt der Server einen Prozess für jede Client-Anfrage vor (er gibt eine Vorab-Abfrage in Erwartung neuer Anfragen vor, damit das Forken nicht die Antwortzeit einschränkt). Da Anfragen in einem separaten Prozess verarbeitet werden, belastet dies in der Regel Ihren Arbeitsspeicher und Ihre CPU erheblich mehr als. Der Arbeiter bringt Multi-Threading mit, das leichter ist und eine bessere Speichernutzung hat.
quelle
Dies ist etwas ganz Besonderes für das, wofür Sie dienen. Wenn Sie viele kleine statische Verbindungen herstellen, sind die Threads leichter und schneller. Wenn Sie nur wenige große Apps haben, die ständig auftauchen, kann Prefork aufgrund seiner Reife und Stabilität einen Vorteil haben. Warum nicht einfach das einrichten, was Sie brauchen, eines testen, das MPM-Modul austauschen, es erneut versuchen und sehen, welches am besten zu Ihnen passt?
quelle
Das hängt von der Art und Art des Verkehrs ab, den Sie haben werden. Und auch zuerst müssen Sie den Hauptunterschied zwischen der Vorgabel und dem Arbeiter verstehen. Hoffe, der folgende Artikel wird Ihnen helfen, herauszufinden! http://slashroot.in/how-is-nginx-different-from-apache
quelle