phpbar.de logo

Mailinglisten-Archive

[php] header("Location: ..."); sofort zur Anwendung bringen

[php] header("Location: ..."); sofort zur Anwendung bringen

Frank Rasche phpml at raschesweb.de
Mi Jul 13 18:11:20 CEST 2011


On 13.07.2011 17:41, "Mario Haßler" wrote::
> Danke für den Hinweis. Die reine Rechenzeit ist ja klein, da im Wesent-
> lichen Wartezeit auf die Antwort des Remote-Aufrufs. Aber ich sehe ein,
> dass zumindest viele Prozesse gestartet werden können. Siehe dazu aber
> auch den folgenden Absatz.

Webserver-Prozesse, die für 40 Sekunden geblockt sind... pro Prozess,
das ist schon suboptimal. Dein Webserver stellt nicht beliebig viele
Prozesse zur Verfügung und dann nimmt er keine Requests mehr an.

>> [...] Wenn ein Bild veraltet ist und viele User klicken darauf, dann
>> startest du viele Prozesse, die dieses Bild neu generiert [...]. Hier
>> hilft nur ein Locking-Mechanismus, der garantiert das Bild X nur
>> einmal generiert wird, auch wenn da 50 User requests die Generierung
>> anstossen wollen.
> 
> Und dieser Mechanismus könnte ja zugleich dafür sorgen, dass alle
> Prozesse, die nach dem ersten gestartet wurden, gleich wieder beendet
> werden. 

Genau, du musst halt in irgendeiner Art speichern, welches Bild gerade
generiert wird. (File, DB-Eintrag, memcached,... ) und falls ein Prozess
 kommt, der genau dasselbe Bild auch generieren will, direkt aussteigen.

Obwohl diese Lösung vielleicht schneller zu implementieren ist, würde
ich sie in einigen Situationen nicht einsetzen wollen (ist halt schon
etwas quick n dirty). Einfach weil die Bildgenerierung nicht
kontrollier- und auch schlecht skalierbar ist. Im worst-case müssen mal
alle Bilder neu generiert werden. Hintergrund-prozesse kannst du viele
starten, aber wie sieht es mit der Last deines Servers aus? Wieviel
Speicher frisst ein solcher Prozess? Wieviel CPU-Last benötigt er?
Wieviele Requests nimmt der "externe Service" für die Bilder
gleichzeitig entgegen?

> Damit sollte auch das Problem "überfordern und lahmlegen"
> erledigt sein, oder?

Das "überfordern und lahmlegen" bezog auf den Webserver, der dann
irgendwann keine Requests mehr annimmt, weil er auf Generierung wartet.

Wenn du ein Script im Hintergrund aufrufst ( z.B passthru() oder exec()
siehe vorherige mails), dann hat der Webserver (Apache) damit kein
Problem... geht ihn ja nix mehr an.

Gruss
Frank



php::bar PHP Wiki   -   Listenarchive