Die Programmiersprache "Java" ist in den letzten 12 Jahren von einer anfäng- lich belächelten Programmiersprache für Waschmaschinen und Toaster, zu ei- ner global eingesetzten Technologie für Web -und Desktop-Systeme herange- reift. Besonders der von den Java-Machern (Sun) entwickelte J2EE Standard erfreut sich immer größerer Beliebtheit und wird gerade von großen, kommer- ziellen Internetplattformen wie Amazon, Ebay uvw. eingesetzt. Die Gründe hierfür liegen auf der Hand: - Open-Source (kostenfrei erhältlich und keine Lizenzen notwendig) - Viele kostenlose Frameworks und API's - Viele Experten (Java als Mainstream ) - Codeingstandards und somit Senkung der Entwicklungskosten und Einarbeitungszeit für neue Mitarbeiter Neben den oben beschriebenen Vorteilen existieren mehrere kostenpflichtige und kostenfreie Implementierungen für den JSR-00154 (Servlet-Spezifikation). Diese ermöglichen den Einsatz von serverseitigem Java in der Welt des WWW. Java ist zu 100% objektorientiert und stellt ebenfalls eine Möglichkeit für die Entwicklung mit Threads (parallele Prozesse) zur Verfügung. In der Client-Server-Architektur spielt die Verwendung von Server-Threads, hinsichtlich Sys- tem-Ressourcen, eine zentrale Rolle. Systeme mit hohen Benutzerzahlen benö- tigen entsprechende System-Ressourcen (Hardware), um gewünschte Antwort- zeiten zu garantieren. Die entsprechenden Hardware-Bausteine sind sehr kost- spielig und müssen von Spezialisten gewartet und aufgesetzt werden. Mit er- höhter Benutzeranzahl steigen auch die Anforderungen an die Systeme. Es müssen leistungsstärkere Hardware-Bausteine beschafft und die alten ausge- tauscht werden. Im Rahmen der hier vorliegenden Arbeit werden diese Anforderungen unter- sucht und die Grenzen von Hardware-Systemen aufgezeigt. Dabei stehen die folgenden Fragen im Mittelpunkt: 1. "Was passiert, wenn die Benutzeranzahl einer Webanwendung in kurzer Zeit dramatisch steigt?" 2. "Welche Möglichkeiten hinsichtlich der Skalierung gibt es für Java- Anwendungen?" Häufig werden Web-Projekte mit niedrigem Budget entwickelt und es kann da- bei nur selten ein komplettes Team aus erfahrenen Software-Architekten einge- setzt werden. Daher werden nichtfunktionale Anforderungen gerade bei der Erstentwicklung von Anwendungen oft nur unzureichend beachtet, weil schnell Ergebnisse erzielt und Investoren überzeugt werden müssen. Steht die Finan- zierung, werden viele Internetseiten jedoch schon nach den ersten Promotion- Aktionen (Bannerwerbung, Plakatwerbung etc.) mit der Problematik mangelnder Performance konfrontiert. Als Ad-hoc-Lösung werden dann häufig leistungs- stärkere Maschinen eingesetzt. Diese erreichen jedoch ihre Leistungsgrenzen schnell und es muss eventuell ein weiteres Hardware-Update durchgeführt werden. Wenn eine einzelne Maschine nicht weiter aufgerüstet werden kann, muss ein aufwendiger und kostenintensiver Hardware-Cluster aufgesetzt wer- den. Bei diesem Verfahren gibt es unterschiedliche Varianten (Sticky-Session, Non-Sticky-Session, Session-Replication, Load-Balancing etc.). Darüber hinaus muss die Java-Anwendung selbst gewisse Anforderungen erfüllen (z. B. müs- sen Session-Objekte serialisierbar sein). Neben speziellen Programmiertechni- ken und Hardware-Loadbalancing werden die Alternativen "Anwendungscluste- ring" und "Javagrid" beleuchtet. Dieses Verfahren ermöglicht es, beliebig viele Systeme über eine Anwendungsschicht miteinander zu verbinden und in einem Grid zu nutzen. Hierbei werden die unterschiedlichen JVMs der Systeme mit- einander verbunden, in einer Software-Abstraktionsschicht gekapselt und somit zu einer gemeinsamen Java-Virtual-Machine vereinigt. Die Vorteile dieser Cluster-Variante sollen den zuvor vorgestellten Techniken gegenübergestellt und hinsichtlich Kosten, Wartbarkeit und Pflege bewertet werden.