Unterschiede zwischen Apache Prefork, Event und Worker

Bei der erstmaligen Installation von Apache in Version 2 hat sich herausgestellt, dass der verwendete Apache-Typ in den Tutorials unterschiedlich ist. In diesem Artikel werden wir über die verschiedenen Apache-Multiprozessor-Module und die Unterschiede zwischen Apache-Prefork, -Ereignis und -Arbeiter (die verschiedenen Arten von Multiprozessor-Modulen) sprechen.

Ich muss klarstellen, dass in diesem Artikel nicht gezeigt wird, wie die einzelnen Module installiert oder konfiguriert werden, sondern dass die Vor- und Nachteile der Verwendung eines Apache-Multiprozessormoduls oder eines anderen Moduls aufgezeigt werden . Stellen Sie außerdem klar, dass sich alles, was wir in diesem Artikel sagen und wenn wir über Apache sprechen, auf Apache Version 2 und höher bezieht.

Verschiedene Multiprozessor-Module von Apache.

Zum Zeitpunkt des Artikels haben wir drei Apache-Multiprozessormodule, die als stabil gelten, und eines in einer experimentellen Version. Dies sind die folgenden:

  • Multiprocessing Type Prefork (MPM-Prefork).
  • Multiprozessortyp Worker (mpm-worker).
  • Event Multiprocessing (MPM-Event).
  • Multiprocessing Typ ITK (mpm-itk noch in experimenteller Phase).

Wenn wir in Apache über Multiprocessing-Module sprechen, meinen wir das Akronym MPM. Diese Module sind für die grundlegenden internen Funktionen des Apache-Servers verantwortlich, z. B. die Verarbeitung von HTTP-Anforderungen, die Verwaltung von Apache-Prozessen oder -Threads und vieles mehr. Wir sollten uns darüber im Klaren sein, dass mehrere MPM-Module installiert sein können, aber nur eines geladen ist und funktioniert. In diesem Artikel werden wir versuchen, Ihnen bei der Auswahl des für Sie am besten geeigneten MPM-Moduls von Apache zu helfen.

Die von der Linux-Distribution verwendeten Namen für die verschiedenen MPM-Pakete lauten: apache2-mpm-prefork, apache2-mpm-worker, apache2-mpm-event und apache2-mpm-itk.

Multiprocessing Type Prefork (MPM-Prefork).

Es ist das MPM-Modul, das standardmäßig in den Installationen installiert und verwendet wird. Dieses Modul erstellt unterschiedliche unabhängige Prozesse, um die unterschiedlichen Anforderungen zu bearbeiten . Diese Technik zum Erstellen mehrerer Prozesse wird als Gabeln bezeichnet , daher der Name mpm-prefork. Beim Starten von Apache Prefork werden mehrere untergeordnete Prozesse erstellt (die Anzahl der erstellten Prozesse hängt von unserer Konfiguration ab).

Dies ist die Standardinstallation, da diese die größte Kompatibilität mit den verschiedenen Modulen bietet. Es gibt Apache-Module, deren Verwendung mit Threads nicht sicher ist (sie sind nicht thread-sicher ). Sie müssen daher eine Version von Apache verwenden, die keine Threads verwendet, z. B. den Apache MPM Prefork (der Prozesse anstelle von Threads verwendet). Ein klares Beispiel für ein weit verbreitetes Modul, das nicht threadsicher ist, ist mod_php.

MPM Prefork ist das stabilste Modul, verbraucht jedoch auch die meisten Ressourcen (RAM und CPU), da die Wartung der verschiedenen Apache-Prozesse in Bezug auf die Ressourcen „teuer“ ist.

See also  Wie komme ich in die Wiederherstellung des Galaxy S8?

Multiprozessortyp Worker (mpm-worker).

Es ist ein MPM-Modul, das die Leistung gegenüber MPM Prefork verbessern soll und tatsächlich erfolgreich ist. Dieses Modul verwendet Prozesse und verwendet gleichzeitig Threads (auch Threads genannt), dh es kombiniert die Techniken des Gabelns und des Einfädelns . Beim Starten von Apache Worker werden mehrere untergeordnete Prozesse erstellt, und jeder untergeordnete Prozess verwendet wiederum mehrere Threads. Auf diese Weise wird erreicht, dass jeder untergeordnete Prozess dank der Threads mehrere gleichzeitige Anforderungen verarbeiten kann.

Wenn wir das oben Gesagte verstehen, gehen wir davon aus, dass die Verwendung dieser Methode, die Prozesse und Threads kombiniert, eine geringere Anzahl von untergeordneten Prozessen erfordert und folglich weniger CPU- und RAM-Ressourcen verbraucht (wobei die Auswirkungen bei der Verwendung von CPUs deutlicher sind, was sich verringert drastisch über Prefork).

Aber alles, was glänzt, ist nicht Gold wert , da MPM Worker bei Verwendung von Threads nur Apache-Module unterstützt, die thread-sicher sind , sodass das berühmte mod_php nicht mit Apache MPM Worker verwendet werden kann . Ein weiterer Nachteil von MPM Worker ist, dass alle Verbindungen, die die Threads dieses abgebrochenen untergeordneten Prozesses verarbeiten, verloren gehen, wenn ein untergeordneter Prozess aus bestimmten Gründen abgebrochen werden muss. Das heißt, bei Fehlern verhält sich MPM Worker schlechter .

Um auf das Problem von mod_php und seine Inkompatibilität mit MPM Worker zurückzukommen, gibt es offensichtlich eine Alternative zu mod_php, die mit Worker kompatibel ist und php-fpm heißt und auch seine Vor- und Nachteile gegenüber mod_php bietet. Ein Vergleich zwischen mod_php und php-fpm lässt sich wie folgt zusammenfassen:

  • Vorteile von mod_php : Es bietet uns Geschwindigkeit und einfache Konfiguration.
  • Vorteile von PHP-FPM : Es bietet uns eine bessere Nutzung der Ressourcen (RAM und CPU) und eine höhere Effizienz.
  • Nachteile von mod_php : Verbrauchen Sie mehr Ressourcen.
  • Nachteile von php-fpm : kompliziertere Konfiguration.

Event Multiprocessing (MPM-Event).

MPM Event galt bis vor kurzem als experimentell, ist aber heute eine stabile Option. Es ist eine Verbesserung von MPM Worker und behebt ein Optimierungsproblem, das MPM Worker mit der Keep Alive-Option von Apache gezeigt hat. Ich möchte nicht auf das Optimierungsproblem näher eingehen und Sie mit technischen Daten verwechseln. Daher möchte ich mich kurz fassen und sagen, dass MPM Event die Apache-Leistung bei Anfragen mit Keep Alive verbessert , die sehr häufig sind.

See also  Können Sie sich vorstellen, was passieren würde, wenn Google und Apple zusammengeführt würden?

Da MPM Event auf MPM Worker basiert, hat es die gleichen Vor- und Nachteile wie dieses, so dass MPM Event offensichtlich nicht mit mod_php kompatibel ist und php-fpm verwendet werden muss.

ITK Multiprocessing (mpm-itk).

MPM ITK ist ein neues und experimentelles Modul, dessen Funktionsweise mit MPM Prefork identisch ist, dh es verwendet untergeordnete Prozesse für die Funktionsweise und keine Threads. Die Neuheit von MPM ITK besteht darin, dass jedem virtuellen Host (Virtualhost) ein Benutzer des Systems zugewiesen werden kann. Auf diese Weise können diese Benutzer auf einem gemeinsam genutzten Server, auf dem sich mehrere Websites verschiedener Benutzer befinden, nicht mit den Dateien der anderen Benutzer interagieren.

Dieses MPM ist innovativ, befindet sich jedoch in der Experimentierphase und ist sogar in der offiziellen Apache-Dokumentation nicht enthalten . Es gibt einige Module wie suPHP oder mod_ruid2, mit denen wir ähnliche Ergebnisse wie mit MPM ITK erzielen können. Ich persönlich verwende mod_ruid2 und bin damit zufrieden.

Welchen Apache soll ich wählen? Welches Multiprozessormodul von Apache installiere ich?

Nachdem wir nun die verschiedenen Arten von Apache-Multiprozessen kennen, werden Sie sich fragen, welche Sie wählen sollen oder welche MPM-Version von Apache zu Ihnen passt .

Die endgültige Entscheidung liegt bei Ihnen und wird in vielen Fällen von Ihrem Kenntnisstand im Umgang mit Linux-Servern abhängen. Ich werde jedoch versuchen, Ihnen eine Vorstellung davon zu geben, was Sie berücksichtigen müssen, um die für Sie geeignete Apache-Version richtig auszuwählen .

Faktoren, die wir bei der Auswahl eines Apache MPM-Moduls berücksichtigen müssen:

  • Besuchsvolumen oder Datenverkehr von unserem Server : Wenn wir große Besuchsvolumina verarbeiten, sollten wir die Verwendung von Apache Prefork sofort verwerfen. Ich muss hinzufügen, dass wir die Anzahl der Besuche, die unser Server unterstützt, erhöhen können, wenn wir Apache Prefork mit einem Cache-System wie Varnish Cache unterstützen.
  • Art des Inhalts (dynamisch oder statisch) : Ein weiterer wichtiger Faktor ist die Art des Inhalts, den wir mit Apache bereitstellen möchten. Wenn es sich zweifellos um statischen Inhalt (Bilder, komprimierte Dateien usw.) handelt, sind MPM Worker oder MPM Event die richtige Wahl. Bei dynamischen Inhalten müssen wir den Rest der Faktoren auswerten, um die beste Wahl zu treffen, da MPM Worker und MPM Event für dynamische Inhalte immer noch weniger Ressourcen benötigen, aber möglicherweise ein anderer Faktor entscheidender ist als die Art des Inhalts.
  • Serverressourcen : Dies wird unsere Haupteinschränkung sein. Wenn wir Ressourcen zur Verfügung haben, können wir uns für eine Apache Prefork-Installation entscheiden und Kopfschmerzen mit den Einstellungen speichern. Im Gegenteil, wenn wir Ressourcen schonen, sind MPM Worker oder MPM Event wieder die bevorzugten Optionen.
  • Spezifisches Wissen über Server : Das Wissen über die Installation und Konfiguration von Apache und PHP kann ein entscheidender Faktor sein, da die Installation von MPM Prefork mit mod_php sehr einfach ist, die Installation von MPM Worker oder Event mit php-fpm jedoch komplexer .
  • Spezifische Anforderungen : Unser Projekt hat möglicherweise sehr spezifische Anforderungen und erlaubt uns nicht, ein bestimmtes Apache MPM zu verwenden. Zum Beispiel könnte es sein, dass unser Projekt ein Modul benötigt, das nicht threadsicher ist, sodass wir gezwungen wären, MPM Prefork zu verwenden.
See also  Funktioniert mein Telefon mit dem 3G- und 4G-Netz in Costa Rica?

Als Beispiel kann ich nur meine persönliche Wahl für einen Server mit mehreren WordPress-Blogs und ungefähr 1000 täglichen Besuchen treffen. Ich habe mich für Apache MPM Prefork in Kombination mit Varnish Cache entschieden. Ich musste mich für Prefork entscheiden, da sich auf meinem Server mehrere Benutzer mit unterschiedlichen Anforderungen und Websites befinden. Daher brauchte ich die Unterstützung von Prefork und mod_php.

Bevor ich mich entscheide, empfehle ich, in einem billigen VPS-Test zu testen und darüber nachzudenken, wie Ihr Projekt sein wird, um die Anforderungen zu kennen.

Woher weiß ich, welchen Apache-Typ ich installiert habe?

Wenn Sie Apache bereits auf Ihrem Linux-Server installiert haben und wissen müssen , welches Apache MPM Sie verwenden , können Sie den folgenden Befehl verwenden:
apache2ctl -V
Dieser Befehl zeigt Ihnen viele Informationen auf dem Bildschirm und in einer der Zeilen, die Sie wie folgt einfügen sollten:
Server MPM: Prefork
In diesem Fall wird der MPM Prefork verwendet.

Eine andere Möglichkeit ist die Verwendung des Befehls:
apache2ctl -t -D DUMP_MODULES
Dieser Befehl zeigt uns eine Liste mit allen geladenen Modulen und darunter können wir etwas sehen wie:
mpm_prefork_module (static)
In diesem Fall wurde der MPM Prefork geladen.

Für cPanel-Benutzer.

Ich bin kein Experte für cPanel, aber was ich in der EasyApache-Dokumentation sehen konnte, sind die Versionen Prefork, Worker und Event verfügbar. Unter diesem Aspekt macht es Ihnen cPanel sehr leicht, von einer MPM zu einer anderen und ihrer jeweiligen PHP-Konfiguration zu wechseln.

Ich hoffe, Sie haben einige Fragen zu diesem Artikel geklärt und zögern wie immer nicht, die Kommentare durchzufragen.

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *