Vergleichende Untersuchungen
von Verfahren zur
Serverlast-Verteilung in Java
für J2EE-Anwendungen

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. 


Java Clustering Inhaltsverzeichnis