Moin Moin!
»
Ggf. sollte man sich für abhängige Requests (Ausliefern von Bildern) einen zweiten Host daneben stellen und dann als nächstes die Datenbankaufgaben ausgliedern.
Du meinst unabhängige Requests.
Davon abgesehen würde ich erstmal die DB auf eine andere Maschine verfrachten und beide Maschinen möglichst per Crossover-Kabel miteinander verbinden (lassen). Wenn innerhalb des RZs alles auf Gigabit Ethernet läuft (incl. Switches), kann man auf das Crossover-Kabel auch verzichten.
Wenn auf der Kiste viele Domains laufen, könnte man die auf zwei Maschinen verteilen, sinnvollerweise so, dass die Last ungefähr gerecht verteilt ist.
Caching ist natürlich hilfreich, innerhalb der Applikation z.B. mit memcached.
FastCGI statt CGI ist eine schöne Idee, aber nicht jedes CGI-Script läuft problemlos als FastCGI. CGI ist fire-and-forget, da kann man mit globalen Variablen und diversen Handles rumpfuschen wie man will, am Ende des Requests wird alles automatisch vom Betriebssystem aufgeräumt. Das passiert bei FastCGI nicht.
Die Load Average der Maschine wäre interessant. Im Mittel sollte nicht mehr als ein Prozess pro CPU laufen, bei einem Quad Core sollte die Load Average also nicht wesentlich über 4.0 liegen.
Dienste verteilen ist auch eine Option. Mail, Web, IRC, News, DB, ... müssen nicht auf der selben Maschine laufen.
Vermutlich wird auf der Maschine ein Apache laufen, der kann zwar fast alles, aber es gibt Spezialisten, die in manchen Gebieten schneller und weniger kräftezehrend sind als der Apache. Gerade beim Ausliefern statischer Inhalte ist der Apache nicht der schnellste.
Massives Umschreiben von URLs, dynamisch generiere Inhalte statt statischer Seiten und Techniken wie AJAX können einen Webserver auch ganz gut in die Knie zwingen.
Alexander
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".