Mailinglisten-Archive |
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