Rolf B: PHP bzw. Apache mehr Leistung geben

Beitrag lesen

Hallo Raketenwilli,

das MPM Modul kann ich mir nicht aussuchen, oder? Da gibt's eins je Betriebssystem, wenn ich das richtig lese.

Es gibt aber auch noch die Art, wie PHP angebunden ist: per mod_php oder als FastCGI (von klassischem CGI mit "starte für jeden Request einen neuen Prozess und röhre die Daten hinüber" rede ich mal besser nicht).

Da man für mod_php die Threadsafe-Version von PHP verwenden muss, würde ich annehmen, dass mod_php einmaö PHP lädt und parallele Requests auf einen konfigurierbar großen Schwarm von Threads verteilt. Bei FastCGI würde ich in Analogie zu dem, was IIS treibt, davon ausgehen, dass mehrere PHP Prozesse gestartet werden und der Apache jeden einzelnen davon per Named Pipe oder lokalem IP-Socket versorgt.

Wichtig ist aber auf jeden Fall, dass unabhängig von der Serverkonfiguration ein einzelner Webrequest immer singlethreaded verarbeitet wird, ganz gleich, wieviele Kerne die Maschine hat und wieviele parallele Threads ich dem Webserver gestatte. Für eine echte Parallelverarbeitung muss

  • dem Server das parallele Ausführen mehrerer Requests zu einem Binding gestattet sein
  • das PHP Script, das serverseitig läuft, mit Sessions aufpassen, denn Sessions sind Egoisten - es kann nur einen geben, der sie offen hat.
  • das PHP-Script, das den Request verarbeitet, Parallelthreads eröffnen (z.B. durch Abfeuern von Webrequests an seinen eigenen Host)
  • der Client, der den Request schickt, die Daten auf mehrere Requests aufteilen

Die Idee mit dem Client-Treiber kommt von T-Rex und ist, wenn er ohnehin einen JS-Treiber hat, auch praktikabel. Die Asynchronität eines Webrequests ist in JS auf jeden Fall besser zu handhaben als in PHP: Daten auf N Eimer verteilen, N fetches abschicken. Wenn JS und Server auf der gleichen Kiste laufen, sollte man die fetch-Promises in ein Array packen und mit Promise.all warten, bis der Server fertig ist, um seine Kreise nicht allzusehr zu stören.

Wenn der Server auf einer anderen Dose läuft, kann man überlegen, ob man die Antworten gleich bei Eintreffen so weit verarbeitet, dass sie für die Integration in die Gesamtlösung bereit sind. Das ist ein spannendes Thema 😀

Rolf

--
sumpsi - posui - obstruxi