Mit Spring skalieren

Skalierung durch Plattformunabhängigkeit

Man kann also mit Spring eine Anwendung ohne Umstellung des eigentlichen Codes auf verschiedene Plattformen portieren und so durch die Wahl einer geeigneten Plattform skalieren lassen. Eher klassisch sind Java-EE-Application-Server, in denen Spring Beans zum Beispiel im Web Container verwendet werden können. Interessanterweise finden sich in der Praxis aber vor allem in letzter Zeit Lösungen, die eine Abkehr von traditionellen Java-EE-Application-Servern darstellen. Einige Beispiele:

  • Für Webanwendungen hat sich Tomcat auf breiter Basis durchgesetzt, wie auch ein Quick-Vote des Java Magazins gezeigt hat. Skalierbarkeit wird hier durch Web-Server-Clustering und HTTP Load Balancing erreicht – eine Technik, die auch den Anforderungen sehr großer Websites gerecht wird. Viele Projekte verwenden diese bewährten Techniken auch, um mit HTTP-basierten Protokollen wie SOAP, Burlap, Hessian oder HttpInvoker den Zugriff auf gemeinsam im Netz genutzte Services zu ermöglichen.
  • Einige Anwendungen nutzen Technologien wie JavaSpaces, um im Cluster auf gemeinsame Daten zuzugreifen. Diese Technologien gehen auf David Gelernters Arbeiten im Bereich der Tuple-Spaces zurück: Man kann in einen von mehreren Rechnern geteilten Datenraum Objekte bereitstellen und entnehmen. Dadurch kann man recht einfach ein Arbeitspaket als Objekt in den Cluster einbringen, das dann von genau einem Knoten im Cluster entnommen und bearbeitet wird. Von dieser Technik verspricht man sich sehr gute Skalierung bei Aufgaben, bei denen mehrere Rechner für die Abarbeitung rechenintensiver Aufgaben bereitstehen.
  • Sehr klassisch ist die Nutzung von JMS: Hier werden Nachrichten über ein Messaging-System verschickt. Die Nachrichten können an einen oder mehrere Empfänger ausgeliefert werden. Dies können einfache Java-Prozesse sein. Solche Message-basierten Systeme sind schon lange üblich und haben vor allem Vorteile in Bezug auf den Durchsatz und die Zuverlässigkeit.

Wie bereits erwähnt, benötigen diese Lösungen keinen Java-EE-Application-Server. Jede dieser Plattformen hat ihren eigenen „Sweet Spot“, in dem sie besonders gut funktioniert. Das Interessante ist, dass Spring in all diesen Umgebungen zum Einsatz kommen kann, genauso wie auf einem Java-EE-Server. Einer Spring Bean ist es egal, ob sie gerade so dekoriert ist, dass sie über JMS, RMI, HTTP oder JavaSpaces angesprochen werden kann. Es ist tatsächlich möglich, eine Spring Bean mit jeder dieser Technologien ansprechbar zu machen. Für die Spring Bean sieht ein Zugriff dann immer aus wie ein normaler Methodenaufruf.

Listing 1 zeigt, wie ein Bestellservice über RMI exportiert wird. Dabei werden der Name des Service und das zu exportierende Interface festgelegt. Schließlich wird die Referenz auf den zu exportierenden Service angegeben. Listing 2 zeigt, wie die Methode bestellen() dieses Services an die JMS-Destination Bestellungen gebunden werden kann. Nachrichten an diese Destination führen dann zu einem Aufruf der Methode. Der verwendete ListenerContainer kann dabei Thread-Pooling und andere Features anbieten.

Listing 1
Listing 2

Und in keiner Umgebung muss man auf Features von Spring, wie deklarative Transaktionen, Dependency Injection, AOP oder die Enterprise Service Abstraction, verzichten, welche die Nutzung von APIs wie JDBC, JMS usw. wesentlich vereinfachen.

So ist es problemlos möglich, die Plattform zu wählen, die für ein Problem besonders geeignet ist – der Entwickler muss den Code nicht umstellen, man muss nur eine passende Dekoration einfügen, was in den meisten Fällen lediglich eine Änderung der Konfiguration bedingt. Dies wird von einigen Anbietern innovativer Plattformen ausgenutzt: Man bietet eine Spring-Integration an, und damit ist die Plattform für die meisten Entwickler leicht nutzbar.

Springs Vorteil ist also die Plattformunabhängigkeit. Dadurch erlaubt es Spring, die Plattform zu nutzen, die für eine Aufgabe jeweils am besten geeignet ist. Das ist Skalierbarkeit mit anderen Mitteln: Statt mehr Ressourcen hinzuzufügen, nutzt man eine andere Plattform.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.