Manuel: Einführung in FastCGI

Große, dynamische Webseiten kommen kaum ohne ein Framework zur Verarbeitung von Anfragen aus. Aber je umfangreicher das eingesetzte Framework, umso länger dauert es bei Interpreter-Sprachen (z.B. PHP, Perl, etc.), bis alle Module interpretiert und geladen sind und die eigentliche Verarbeitung der Anfrage beginnen kann.

FastCGI

Eine Möglichkeit zur Optimierung bietet hier FastCGI, ein Standard zur Einbindung von externer Software in Webserver. Ähnlich wie bei normalem CGI wird ein externes Programm gestartet, welches alle Informationen übergeben bekommt. Wie auch bei CGI wird die Ausgabe einfach auf die Standard-Ausgabe geschrieben.

Der Unterschied ist jedoch, dass das aufgerufene, externe Programm selbst als Daemon läuft. Der Austausch der Daten findet über TCP (oder UNIX Domain Sockets) statt. Dadurch können die Programme sogar auf einem externen Server arbeiten.

FastCGI im Einsatz

Für viele Sprachen stehen Module zur Verfügung, die das FastCGI Protokoll implementieren und sich um die Kommunikation zwischen CGI-Prozess und Webserver kümmern, zum Beispiel CGI::Fast für Perl, FastCGI Process Manager für PHP, FCGIInterface für Java und viele mehr….
Auch viele Webserver unterstützten FastCGI: Apache, lighttpd, Microsofts IIS und ebenfalls viele mehr

Unter Apache lässt sich FastCGI sehr einfach durch das Modul fgcid einsetzten. Die Konfiguration ist – wenn der Prozess auf der gleichen Maschine läuft – ebenfalls sehr einfach. Es muss nur ein Handler hinzugefügt werden, der ausführbare Skripte mit einer bestimmten Endung mit dem fcgid assoziert, zum Beispiel für Perl und php:

AddHandler fcgid-script .fcgi .fphp

Der Prozess wird vom Apache2 Webserver gestartet, wenn er zum ersten Mal benötigt wird.

Der Codeoverhead, der erzeugt wird ist ebenfalls sehr gering:

use CGI::Fast;
while(my $fcgi = CGI::Fast->new()){
   # Normal Website Code
}

Erste Tests

Auf einer Webseite, die ich im Rahmen eines Projekts erstellt haben und welches Moose, ein umfangreiches Framework zur Objekt-Orientierten Programmierung in Perl, nutzt, konnte ich die Laufzeit signifikant verbessern:

Bei der ersten Auslieferung benötigt die Webseite ca. 3 Sekunden, was dem Laden der Module und Erstellen der Klassen geschuldet ist. Weitere Auslieferungen benötigten nur ca. 0.5 Sekunden. Die Ergebnisse lassen sich reproduzieren und durch Tests auch ohne Webserver nachvollziehen.

Fazit

Dank FastCGI lassen sich Webseiten mit großem Framework sehr einfach optimieren. Beim Programmieren muss man jedoch sehr gut beim Verwenden von globalen Variablen und auf Speicherlecks aufpassen.

No Comments Posted in Programmiersprachen, Sysadmin, Uncategorized
Tagged , , , , ,
Marvin: Wenns mal wieder laenger dauert…

Kleiner Auszug aus dem “make” für meine Physik-1-Mitschrift:

$ time make new
rm tmp/physik-1.pdf
[...]
Output written on tmp/physik-1.pdf (232 pages, 13343799 bytes).
Transcript written on tmp/physik-1.log.
make new  52.30s user 8.29s system 92% cpu 1:05.60 total
No Comments Posted in Uncategorized
Matze: Modulares Racksystem für sehr wenig Geld

IKEA baut seit Jahren modulare Racksysteme und keiner sagt mir was davon. Ich habe sogar versehentlich zwei davon gekauft und einfach als Tische benutzt. Ich spreche von dem Tisch “Lack”. Schöne Beispiele, wie man Lack als 19″-Rack benutzen kann gibt im Eth0Wiki.

No Comments Posted in DIY, Sysadmin
Tagged , ,
Manuel: Batch-Download von RapidShare (mit PremiumAccount)

Hat man einen RapidShare-Premium Account kann man eine Liste von Daten sehr einfach im Batch Verfahren downloaden lassen, ohne dafür irgendwelche Third-Party-Tools zu benötigen.

Rapidshare nutzt zur Authentifizierung ein Cookie mit verschlüsseltem String. Der einfachste Weg, um es heraus zu finden ist, sich einmal auf der Website einzuloggen und dann seine eigenen Cookies nach “rapidshare.com” zu durchsuchen. Der Cookie-Name ist “enc” und der Wert irgendein langer Hex-String. Die RapidShare-Links piped ihr durch das folgende Kommando:

... | sed 's/^/wget --no-cookies --header "Cookie: enc=$COOKIE_STRING" /' | perl -ne 'chomp; m/\d\/(.*?\.zip)/; print qq/$_?directstart=1 -O $1\n/;'

Als Ausgabe bekommt ihr eine ganze Latte von wget Kommandos, die ihr entweder direkt in eine Shell oder aber in ein anderes Programm, z.B. parallel, pipen könnt.

No Comments Posted in Bash, Linux, Perl, Uncategorized
Tagged , ,
Marvin: Schutzkontaktleiter eingepinselt

Bine und ich wohnen nun seit gut eineinhalb Jahren in dieser Wohnung. Was mir bisher nicht aufgefallen ist: Die Schutzkontakte sind beim Wand streichen von unseren (Vor-)Vormietern eingepinselt worden und so gut wie keines der elektrischen Systeme in unserer Wohnung ist korrekt geerdet. Gleich mal morgen den Studentenwerkselektriker holen…

No Comments Posted in Aus dem Leben
Matze: Papst über Homosexualität

Der Papst hat sich mal wieder zum Thema Homosexualität geäußert und erwartungsgemäß ist da mal wieder was großartiges bei rausgekommen. Anlaß zu der Äußerung ist ein Gesetz in Großbritannien, das die Diskrimierung von Frauen und Homosexuellen einschränken soll. Zu dieser Gleichstellung sagt das Oberhaupt der katholischen Kirche nun, es verletze

“in mancher Hinsicht das Naturgesetz, auf dem die Gleichstellung aller Menschen basiert und nach dem sie garantiert ist”.

Heißt das nun im Umkehrschluss, dass die Diskriminierung von Frauen und Homosexuellen ein Naturgesetz ist? Also ich verstehe ihn und sein Weltbild jedenfalls so.

Quelle: diestandard.at

No Comments Posted in Aus dem Leben
Manuel: Veranstaltungshinweis

Nätter durch Gebrätter

No Comments Posted in Freizeit, Uncategorized
Manuel: Parallel

Möchte man eine Reihe von Befehlen ausführen, die jeweils eine komplexe Berechnung durchführen und nicht voneinander abhängig sind (z.B. das Konvertieren von großen Bildern), lohnt es sich über Parallelisierung nach zu denken. Allerdings sind die zu Grunde liegenden Anwendungen oft nicht parallelisiert (z.B. ImageMagick’s convert). Alle Prozesse parallel zu starten ist meist auch keine gute Idee, da das einer fork-bomb gleich kommen würde.

Ausgehend von einem Bash-Skript, welches die Befehle enthält, kann man jedoch das Tool parallel nutzten welches immer eine definierte Menge von Jobs parallel laufen lässt:

manuel@lola:/tmp$ parallel << EOF
perl -e 'sub f { my $i = shift; return 1 if $i < 1; return f($i-1) + f($i-2); }; f(100)'
perl -e 'sub f { my $i = shift; return 1 if $i < 1; return f($i-1) + f($i-2); }; f(100)'
EOF

Neben der Standard-Eingabe liest das Programm aber auch Dateien. Ziel für die Weiter-Entwicklung ist es ein dropin-replacement für xargs zu schaffen. Auf jeden Fall ein klasse Tool, welches einem eine Menge Arbeit oder Zeit sparen kann!

1 Comment Posted in Bash, Linux, Perl, Sysadmin, Uncategorized
Tagged
Marvin: Oettinger auf Englisch

Es gab ja damals bei Herrn Westerwelle schon viel Aufruhr… aber Herr Oettinger versucht es immerhin.

No Comments Posted in FAIL, Politik
Tagged
Matze: Sehnsüchtig erwartet…

Wunderschöner Comic mit einer überraschenden Wendung: Klick

No Comments Posted in Uncategorized