Frage Was installieren: Apache Worker oder Prefork? Was sind die (Vor-) Vorteile eines jeden?


Basierend auf den Beschreibungen für beide Vorarbeit und Arbeitnehmer MPM, es scheint, der Prefork-Typ ist etwas veraltet, aber ich kann nicht wirklich einen richtigen Vergleich der beiden Typen finden.

Was ich gerne wissen würde:

  • Was sind die Unterschiede zwischen den beiden Versionen?
  • Was sind die (Vor-) Vorteile jedes Servertyps?
  • Gibt es grundlegende Richtlinien für den Typ, der basierend auf den Bedingungen ausgewählt werden kann?
  • Gibt es große Leistungsunterschiede zwischen den beiden?

54
2017-07-24 08:47


Ursprung


Sehen Wie wähle ich aus, welches Apache MPM verwendet werden soll? - Janus Troelsen


Antworten:


Wie die Dokumentation sagt, sollten Sie das Prefork-MPM verwenden, wenn Sie Threading für die Kompatibilität mit nicht threadsicheren Bibliotheken vermeiden müssen. In der Regel ist jedes nicht-triviale Apache-Modul (mod_php - oder, genauer gesagt, die unzähligen Erweiterungen und Bibliotheken, mit denen es verknüpft ist - da es sich um das kanonische Beispiel handelt - hat eine Art nicht threadsichere Bibliothek (oder enthält nicht threadsicheren Code), außer Sie Wenn ich eine hübsche Apache-Installation verwende, würde ich mich für das Prefork-MPM entscheiden.


39
2017-07-24 09:04



Ich hätte das Worker MPM empfohlen, es sei denn, Sie führen PHP aus. Worker ist das empfohlene MPM von Apache und bietet eine bessere Leistung und geringeren Overhead. Es ist nur so, dass PHP-Entwickler noch nie von Threadsicherheit gehört haben, dass Sie Prefork verwenden müssen. - David Pashley
PHP ist seit langer Zeit threadsicher. Sie schlagen nur die Verwendung von Pre-Forkern vor, da sie nicht kontrollieren können, was andere Bibliotheken tun. Beenden Sie die Schuld an PHP für andere Entwickler von Inactions. - Alister Bulman
PHP kann threadsicher sein (obwohl ich es bezweifle), aber alle Bibliotheken, zu denen es verlinkt, sind definitiv nicht. Hier laufen einige ziemlich große PHP-Anwendungen und alle paar Monate versuchen wir, vom Prefork zum Worker zu wechseln, aber wir bekommen sofort korrupte Daten. - Aleksandar Ivanisevic
Zumindest die Funktion, die die ENV-Variable ändert, ist nicht Thread-sicher, setlocal php.net/manual/en/function.setlocale.php ist ein typisches Beispiel dafür. - radius
Eine Anmerkung: Diese Probleme gelten nicht, wenn PHP z. mit php-fpm über FastCGI. Dann ist das worker MPM in Ordnung - dann wird die fpm jede PHP Anfrage in einem eigenen Prozess ausführen, während der Apache threaded ausführen kann. Das PHP-Thread-Sicherheitsproblem verhindert nur die Verwendung mod_php, die PHP innerhalb des Apache-Prozesses ausführt. - mschuett


Die klassische Lösung für die Ausführung unsicherer Erweiterungen bei gleichzeitiger Bereitstellung von mehr als 100 gleichzeitigen Verbindungen besteht darin, PHP auf fastCGI (mod_fcgid, einem nativen Apache-Modul) und dynamische Proxyanforderungen von einer Apache-Instanz auszuführen, auf der das Worker-MPM ausgeführt wird.

Auf diese Weise können Sie von einigen hundert bis zu über 1000 gleichzeitigen Verbindungen mit einer geringen Speicherkapazität (4 bis 8 GB) skalieren, wenn Sie eine Mischung aus statischen und dynamischen Inhalten bereitstellen.

Natürlich sollten Sie auch Front-End-Caching-Lösungen als Teil Ihrer gesamten Bereitstellung (Memcached, Lack) untersuchen.

Alternativ können Sie auch auf Apache 2.4 und seine native Version aktualisieren Veranstaltung MPM, das die Parallelität in einer viel besseren Weise behandelt (Threads werden bei der Verbindung abgefeuert und warten nicht darauf abgefragt zu werden).


12
2018-04-02 13:21



Könntest du den Event mpm Kommentar erweitern? Wie stapelt es gegen mpm-worker? - Sirex
Während das Worker-MPM bereits threadbasiert war und daher viel schneller gestartet und einfacher ausgeführt werden kann, fragt das Ereignis MPM den Socket nicht mehr ab - es wird über die Aktivität benachrichtigt. daher "Ereignis". - adaptr
also sollte es besser auf stark frequentierten (13k / sec) Seiten funktionieren? - Sirex


Es ist ungefähr 3 Jahre her, seit die Frage bekanntgegeben wurde, aber ich würde dir empfehlen, mit Worker MPM zu gehen, anstatt Pre-Fork, auch wenn du PHP verwendest, um die bessere Leistung zu bekommen.

Was die Unterschiede anbelangt, ist Pre-Fork ohne Threads, daher gibt der Server einen Prozess für jede Client-Anforderung aus (er pre-forks im Vorgriff auf neue Anforderungen, so dass Forking die Antwortzeit nicht beeinträchtigt). Da Anfragen Server in einem separaten Prozess sind, wird dies in der Regel Ihren Speicher und CPU viel mehr Steuern als. Der Arbeiter bringt Multi-Threading, das leichter ist und eine bessere Speicherauslastung hat.


6
2017-10-21 17:02





Das ist etwas sehr Besonderes zu dem, was Sie servieren. Wenn Sie viele kleine statische Verbindungen machen, wären Threads leichter und schneller. Wenn Sie nur wenige große Apps ständig erstellt haben, könnte Prefork aufgrund seiner Reife und Stabilität einen Vorteil haben. Warum richte ich nicht einfach das ein, was du brauchst, probiere es aus, tausche das MPM-Modul aus, probiere es noch einmal aus, um zu sehen, welches besser zu dir passt?


2
2017-07-24 13:33



Sie können das MPM in Apache 2.2 nicht beliebig "auslagern"; Es wird zur Kompilierzeit festgelegt. - adaptr
Sie können mit apt oder RPMs. Debian hat mehrere verschiedene Apache 2-Pakete, je nachdem, welchen Stil Sie bevorzugen. - Brendan Byrd


Das braucht Art und Art des Verkehrs, den Sie haben werden. Und außerdem müssen Sie zuerst den Hauptunterschied zwischen Prefork und Worker verstehen. Hoffe der folgende Artikel wird Ihnen helfen herauszufinden! http://slashroot.in/how-is-nginx-different-from-apache


1
2017-11-16 15:30



Wir bevorzugen Antworten auf Inhalte, nicht auf Links zu Inhalten. Wenn Sie eine Zusammenfassung des Linkziels bereitstellen könnten, ist dies die beste Vorgehensweise. Link-Rot passiert. - sysadmin1138♦
Die Frage war über Apache (Nginx ist nicht Apache) und die relativen Vorzüge von Prefork oder Threads (nginx verwendet keine) - symcbean