Ich wollte mit o. g. Beispiel-Rechnung eigentlich nur demonstrieren, wie stark die Auswirkungen der erwarteten Last auf die Gesamtkonfiguration ist, und wie weit man es mit der Redundanz treiben kann, je nachdem, welche Ausfälle man einplant und welche Risiken man in Kauf zu nehmen bereit ist.
Ich würde an Deiner Stelle jetzt erst mal mit einer Maschine anfangen (Doppelkern und min. 4 GB RAM) und beobachten, wie stark die Serverlast aussieht und ob die Einkommenseite weitere Investitionen überhaupt zuließe - schließlich gehst Du ja mit dem Anmieten ein geschäftliches Risiko ein. Hast Du eigentlich vor, selbst zu kaufen und zu housen, oder willst Du mieten? (eine Maschine, da die DB nach Deiner Beschreibung eigentlich nicht übermäßig gequält werden dürfte und auch keine Image Manipulation läuft => also ein mittelmäßig gelangweilter mysqld und ein RAM-fressender Tomcat sollten nicht zu viel für einen (guten) Server sein).
Wenn Du sauber konfigurierst und die Dienste trennst (z. B. Jails, Xen, Zones o. ä.), kannst Du dann immer noch problemlos einen Dienst auf eine andere Maschine verschieben, wenn die Situation es erforderlich macht - oder eben ein Fallback-System aufbauen, je nach Bedarf.
Moris wrote:Vorab nehme ich folgendes mit:
+) Für die DB nehme ich einen eingen 64Bit-Rechner mit viel RAM (braucht nur Dual-Core sein) mit RAID10 ...reicht ein Prozessor 2,5GHz aus?
+) Ich werde mit 2 Tomcat im Cluster starten ==> beide 32Bit-Rechner mit 2GB RAM (Java kann bei 32-Bit nur ca. 1,5 allokieren) ...wieviel GHz würdest Du empfehlen? Und macht hier ein Dual-Core Sinn?
+) Den Apachen spanne ich vor den Tomcat-Cluster. Der Apache wird auf einem der Tomcat-Rechner installiert.
2 x 2,5GHz sollten für die DB locker ausreichen - wahrscheinlich langweilt sich der Rechner sogar, wenn tatsächlich nur "kleine" Queries laufen (saubere Index-Struktur, wenige/keine Full Table Scans, kein Fulltext search, keine LIKE statements). RAID10 lohnt sich v. a., wenn die DB schreib-intensiv ist, ansonsten tut's auch RAID1 und sorgfältig konfigurierte DB Caches.
Für die Tomcat-Maschinen kann ich die benötigte Prozessorleistung nur schwer abschätzen (setze Tomcat selber nicht ein, bin eher Python-Fan

), ich kann also nur versuchen, Dir ein paar Anhaltspunkte zu geben. Auf der Maschine ohne Apache läuft außer einigen Systemprozessen nur Tomcat. Tomcat nutzt Multithreading, allerdings weiß ich nicht, wie Java Threads implementiert sind (User- oder Kernel-Threads). Ist letzteres der Fall, kann der OS-Scheduler die Threads auf die verschiedenen CPU-Kerne verteilen. Handelt es sich jedoch um User Threads, besteht der einzige Vorteil von SMP darin, dass ein Kern dediziert für den Tomcat-Prozess reserviert werden kann. Wie das genau ist, kannst Du mit
ps -eLf nachprüfen. Wenn Du unterhalb von Tomcat mehrere Threads sehen kannst, kann der Kernel sie auch sehen und entsprechend mit dem Scheduler auf verschiedene CPU-Kerne verteilen.
Beim Apache Webserver hast Du je nach gewähltem MPM-Modul mehrere Prozesse (Prefork) oder mehrere Prozesse, die jeweils wiederum Threads starten können (Worker). In beiden Fällen werden mehrere CPU-Kerne genutzt, ein Dual Core ist also für die Maschine mit Tomcat und Apache in jedem Fall sinnvoll.
Was die Gigahertz-Zahl angeht, würde ich sagen, dass vermutlich jeder moderne Prozessor (Xeon, Core2, Opteron, etc) mehr als genug Rechenleistung mitbringt. Wirklich belastet wird die CPU durch Webanwendungen eigentlich kaum.