Symlink ist eine in Perl geschriebene Applikation. Die "Intelligenz" dieser Applikation ist in einem aehnlichen Umfang wie viele "grosse" Appliktationen vor 10 Jahren. Der Symlink Code umfasst 10442 Zeilen Perlcode der ein gutes Dutzend externe Module mitzieht.
Um die Performance zu steigern, faehrt Apache in jedem Child einen Perlinterpreter mit. Nach den erstmaligen Laden der Scripts wird der Bytecode gecacht - einerseits bringt dies im Verhaeltniss zu einem Wegwerfprogramm wie ein CGI massiv mehr Performance, andererseits benoetigen die Perlinterpreter entsprechend Memory.
Verglichen mit typischen ASP Loesungen wie Warenkorbsysteme ist Symlink massiv groesser und berechtigt daher auch eine muskuloese Maschine. Wer sich einmal mit Slashcode beschaeftigt hat, wird verstehen, dass dies nicht ein kleines Projekt ist...
Mir als Sysadmin unterliegt die Aufgabe, fuer den "normalen" Betrieb die richtige Anzahl Apachechilds zu fahren. Jedes Child benoetigt ca. 2-3 Sekunden um den Perlcode zu compilieren (mehr Childs beschleunigen den normalen Betrieb), andererseits muss ich dafuer sehen, dass das Memory nicht ueberlaster wird. Die maximale Anzahl Childs ist wiederum limitiert, um nach einer DOS-Attacke ein lauffaehiges System zu haben.
Derzeit sind permanent 15 Childs am laufen. Der Timeout fuer persitent Connections liegt bei 3 Sekunden - daher wird ein Child nur sehr kurz an einen User gebunden. Peak duerfen zur Zeit 50 Childs laufen - das gibt eine Memoryauslastung von ca. 75%. Sollte Bedarf bestehen, so kann dieser Wert auf 100 Childs erhoeht werden mit dem Problem. dass alle anderen Services des Servers brachial ausgelagert werden. Nicht vergessen werden darf die Datenbank - jedes Child hat eine persistent connection zum MySQL.
Nebst den "teuren" Childs mit dem Perlinterpreter dreht ein zweiter Apache, der die Bilder serviert. Dieser muss nur statischen Content ausliefern - die einzelnen Childs sind massiv kleiner. Dieser Server hat laengere Timeouts was den subjektiven Geschiwindigkeitseindruck verbessert.
Alles in allem ist Symlink eine gewaltige Herausforderung fuer mich als Administrator. Es ist nicht eine 0815 Applikation sondern bringt - bei falscher Konfiguration - jede noch so potente Maschine in den Boden.
Gehen wir davon aus, dass ein typischer User ca. 1 Minute braucht, um eine Seite zu lesen. Bei einem Timeout von 3 Sekunden fuer die persitent Connections vermag der Server mit 50 Children pro Minute 1000 Seiten servieren. Damit ist Symlink in der Lage, 1000 User mit News zu versorgen. Die letzte Heise Attacke schwankte zwischen 300 und 500 Besuchern - ein Wert, der bei dem bestehenden Wachstum des Internets und des Linux-Marktes die Serverkapazitaet in 1-2 Jahren auaschoepft ;-) --
No women, no Cray.
|