it-swarm.com.de

Was zu installieren: Apache Worker oder Prefork? Was sind die (Nachteile von jedem?

Basierend auf den Beschreibungen für Prefork und Worker MPM scheint der Prefork-Typ etwas veraltet zu sein, aber ich kann keinen richtigen Vergleich der beiden Typen finden.

Was ich gerne wissen würde:

  • Was sind die Unterschiede zwischen den beiden Versionen?
  • Was sind die (Nachteile) jedes Servertyps?
  • Gibt es grundlegende Richtlinien für die Auswahl des Typs basierend auf den Bedingungen?
  • Gibt es große Leistungsunterschiede zwischen den beiden?
55
Aron Rotteveel

Wie in den Dokumenten angegeben, sollten Sie das Prefork-MPM verwenden, wenn Sie Threading vermeiden müssen, um die Kompatibilität mit nicht threadsicheren Bibliotheken zu gewährleisten. Normalerweise jedes nicht triviale Apache-Modul (mod_php - oder genauer gesagt, die Vielzahl von Erweiterungen und Bibliotheken, auf die es verweist - als kanonisches Beispiel) enthält eine Art nicht threadsichere Bibliothek (oder enthält nicht threadsicheren Code) Wenn Sie keine hübsche Standard-Apache-Installation verwenden, würde ich mich für das Prefork-MPM entscheiden.

40
womble

Die klassische Lösung zum Ausführen unsicherer Erweiterungen bei gleichzeitiger Bereitstellung einer großen Anzahl (> 100) gleichzeitiger Verbindungen besteht darin, PHP auf fastCGI (mod_fcgid, ein natives Apache-Modul) und dynamische Proxy-Anforderungen von einem Apache auszuführen Instanz, die das Worker MPM ausführt.

Auf diese Weise können Sie von einigen hundert bis zu> 1000 gleichzeitigen Verbindungen mit einer bescheidenen Menge an Speicher (4 bis 8 GB) skalieren, wenn Sie eine Mischung aus statischem und dynamischem Inhalt bereitstellen.

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

Alternativ können Sie ein Upgrade auf Apache 2.4 und dessen natives Ereignis MPM durchführen, das die Parallelität erheblich verbessert (Threads werden bei der Verbindung ausgelöst und warten nicht darauf, abgefragt zu werden).

13
adaptr

Es ist ungefähr 3 Jahre her, seit die Frage gestellt wurde, aber ich würde empfehlen, dass Sie Worker MPM anstelle von Pre-Fork verwenden, auch wenn Sie PHP verwenden, um die bessere Leistung zu erzielen.

In Bezug auf die Unterschiede ist Pre-Fork nicht mit einem Thread versehen, daher gibt der Server einen Prozess für jede Client-Anforderung aus (er gibt in Erwartung neuer Anforderungen einen Pre-Fork vor, damit das Forking die Antwortzeit nicht beeinträchtigt). Da Anfragen Server in einem separaten Prozess sind, belastet dies normalerweise Ihren Speicher und Ihre CPU viel mehr als. Der Arbeiter bringt Multithreading mit, das leichter ist und eine bessere Speichernutzung hat.

6
aleemb

Dies ist etwas ganz Besonderes für das, was Sie servieren. Wenn Sie viele kleine statische Verbindungen herstellen, sind die Threads leichter und schneller. Wenn Sie nur wenige große Apps haben, die ständig erscheinen, hat Prefork aufgrund seiner Reife und Stabilität möglicherweise einen Vorteil. Warum nicht einfach das einrichten, was Sie brauchen, eines testen, das MPM-Modul austauschen, es erneut versuchen und herausfinden, welches besser zu Ihnen passt?

2
Marcin

das hängt von der Art und Art des Verkehrs ab, den Sie haben werden. Und 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

1
sarath