ServiceMix - Open Source Integration Vergleich Teil 3
ServiceMix ist ein vollständiger Enterprise Service Bus mit zuverlässiger Zustellung und guter Unterstützung für den Betrieb. Eine OSGi Runtime auf der Basis von Apache Karaf ist das Herz vom ServiceMix. Die OSGi Runtime bietet Unterstützung für Module, Services, Konfiguration und Sicherheit. Die ESB Funktionalität wird über Module die ActiveMQ, Camel und CXF enthalten bereitgestellt. Durch die Installation von weiteren Bundles kann ServiceMix erweitert werden z.B. mit der BPMN 2 konformen Business Process Management Engine von Activiti.
1. Installation
Die Installation von ServiceMix ist recht einfach. Nach dem Auspacken und Ausführen eines Skriptes steht dem Administrator nach wenigen Sekunden die ServiceMix Konsole zur Verfügung.
Abbildung 1:
2 Die Konsole
Über die Konsole können Module, die Bundles genannt werden, installiert und deren Betrieb überwacht werden. Die Kommandos der Konsole sind denen der Unix Shell nachempfunden. Es gibt Befehle wie ls, cat, grep und tail. Wer mit Linux vertraut ist, dürfte sich auch hier wohl fühlen.
Das Beispiel im Screenshot unten zeigt, wie ein Bundle mit Camel Routen aus einem entfernten Maven Repository mit einem Befehl installiert werden kann. Ein manuelles Kopieren von Dateien ist nicht notwendig. Eine Infrastruktur aus ServiceMix, Maven-Repository und Continuous Integration Server wie z.B. Jenkins ermöglicht die Automatisierung von fehleranfälligen Aufgaben.
Die Vervollständigung in der Shell funktioniert im ServiceMix auch für ActiveMQ und Camel Befehle. Durch Drücken der TAB-Taste werden die Namen von Routen oder Message Queues ergänzt.
Wartungsaufgaben können mit Skripten automatisiert werden. Wer sich von der Kommandozeile nicht abschrecken lässt, hat mit ServiceMix eine leistungsfähige und komfortable Plattform für den Betrieb von Routen, Services und der gesamten Infrastruktur samt Message Broker.
Der folgende Screenshot zeigt die Ausgabe von Statistiken zu einer Camel Route in der Kommandozeile.
Abbildung 3:
3 Entwicklung
Da beim ServiceMix Camel für die Integration verwendet wird, unterscheidet sich die Entwicklung für ServiceMix nicht von der Entwicklung für Camel. ServiceMix ist viel mehr eine weitere Betriebsumgebung für Apache Camel. Über ein Maven Plugin kann aus einem Camel Projekt ein OSGi Bundle erzeugt werden, welches dann auf dem ServiceMix installiert werden kann. Änderungen am Code sind für den ServiceMix nicht erforderlich.
4 Management und Monitoring
Neben der Kommandozeile kann für ServiceMix auch die hawt .io Managementkonsole, die bereits bei Camel beschreiben wurde verwendet werden.
ServiceMix enthält die Web Konsole der Karaf Runtime, die optional installiert werden kann. Die Web Konsole hilft dem Einsteiger, der erfahrene Administrator wird in der Regel die OSGi Kommandozeile bevorzugen. Die Ansicht in der Abbildung 4 zeigt die installierten Features in der Karaf Web Console. Ein Feature ist eine Art OSGi Anwendung, die mehrere Bundles zu einer einzeln verwaltbaren Einheit zusammenfasst. Per Knopfdruck können Features installiert und deinstalliert werden. Die Features werden von Repositories bereitgestellt, die auf Maven Repositories abgelegt werden können. .
Abbildung 4:
Für die Verwaltung der Bundles gibt es ebenfalls eine Ansicht, die der folgende Screenshot zeigt.
Abbildung 5:
Ganz praktisch ist das integrierte rudimentäre Logmanagement der Web Konsole. Logeinträge können gefiltert und sortiert werden.
Abbildung 6:
Die ActiveMQ Web Konsole in Abbildung 7 kann ebenfalls im ServiceMix ausgeführt werden. Mit der Konsole können Queues, Topics, Subscriptions und Verbindungen zwischen Brokern verwaltet werden.
Abbildung 7:
5 Performanz und Ressourcenverbrauch
ServiceMix geht schonend mit seinen Ressourcen um. Der Screenshot unten zeigt den Speicherverbrauch einer ServiceMix Installation im Profiler. Zum Betrieb einer ServiceMix Installation sind nur wenige Megabytes notwendig. Der Verbrauch an Threads ist ebenfalls moderat.
Abbildung 8:
Alle ausgeführten Camel Projekte und Web Services teilen sich die Java VM mit dem ServiceMix. Das Teilen der VM spart im Gegensatz zu einem Betrieb von einem Camel Projekt pro Java VM bei einer Vielzahl von Projekten Speicher. Der zum Betrieb vom ServiceMix selbst notwendige Speicher und die CPU Nutzung können meist vernachlässigt werden. Die Performanz und der Ressourcenverbrauch werden von der Effizienz der installierten Routen und Services bestimmt.
6 Clustering
ServiceMix bietet zahlreiche Möglichkeiten Cluster aufzubauen. Bevor man sich für eine Variante entscheidet, sollten die Anforderungen klar sein. Warum möchte man einen Cluster bilden? Typische Anforderungen sind:
- Hohe Verfügbarkeit
- Kurze Antwortzeiten
- Failover
- Reserven für große Lasten
- Dynamische Adaption an geänderte Lasten
- Skalierbarkeit
- Datenintegrität
- Schutz vor Datenverlust
Diese Ziele stehen teilweise im Konflikt zueinander. Beispielsweise sind kurze Antwortzeiten mit dem Schutz vor Datenverlust schwer unter einen Hut zu bekommen.
Eine Alternative für die Anforderung Hochverfügbarkeit ist ein Shared Master/Slave Cluster. Einem Master im Betrieb können ein oder mehrere Slaves zur Seite stehen. Fällt der Master aus, so wird einer der Slaves zum Master und übernimmt den Betrieb. Die Koordination zwischen Slaves und Master erfolgt über eine Sperre auf eine gemeinsame Datei oder Datenbank. Da immer nur ein Master in Betrieb ist, hat diese Variante keine Vorteile für das Lastverhalten. Die Slaves erhöhen aber die Verfügbarkeit und übernehmen, falls es zu einem Ausfall des Master kommt.
Bei einem schwankenden Lastaufkommen kann eine Anpassung durch die Verwaltung von Instanzen erfolgen. In der OSGi Shell können dynamisch neue ServiceMix Instanzen angelegt, gestartet und wieder zerstört werden. Eine neue Instanz kann auf dem selben Rechner oder über ssh auf einem entfernten System angelegt werden. Damit ist es möglich ad-hoc während des Betriebes auf eine geänderte Last zu reagieren. Abbildung 9 zeigt wie einem Cluster ein dritter Node hinzugefügt wird.
Abbildung 9:
Messaging ermöglicht viele Varianten des Clustering mit denen oben aufgeführten Ziele erreicht werden können. Der im ServiceMix enthaltene Message Broker ActiveMQ bietet ebenfalls mehrere Features und Optionen für das Clustering: Replizieren der Message Datenbank, Master/Slave und die Network of Brokers Topologie. Bei der Entwicklung von Integrationslösungen können Ziele wie Hochverfügbarkeit und Skalierbarkeit auch mit den Enterprise Integration Patterns realisiert werden. Nützlich sind dafür die Muster:
- Competing Consumers
- Guaranteed Delivery
- Idempotent Receiver
- Message Store
- Transactional Client
Fazit
Bei einer Entscheidung für ServiceMix sollte man beachten, dass die Entwicklung von Routen für den ServiceMix mit Camel erfolgt und sich vor der Entscheidung auch Camel ansehen. Nachdem Camel Routen fertiggestellt und getestet sind, können diese nachträglich im ServiceMix installiert und betrieben werden. ServiceMix ist eine zusätzliche Alternative für das Deployment von Camel Routen. Wer nur eine Handvoll Routen betreibt, sollte sich überlegen, ob er dafür die Komplexität des ServiceMix in Kauf nimmt. Wer viele Routen betreibt, diese unabhängig voneinander austauschen möchte und wer auf Stabilität und Betriebssicherheit in großen Installation Wert legt, sollte sich den ServiceMix anschauen.
Die Komplexität der OSGi Plattform wird beim ServiceMix leicht unterschätzt. Eine fehlende Abhängigkeit z.B. die einer Camel Bibliothek führt zu einem Classpath Fehler, der einiges an Suchaufwand nach sich ziehen kann. Beim ServiceMix sollte man für den richtigen Aufbau der Bundles einiges an Zeit einplanen. Fehler treten oft bei der Installation von Komponenten auf. Später im Betrieb ist der ServiceMix und darauf basierende Lösungen wie z.B. Talend und JBoss Fuse äußerst stabil. Gerade Stabilität im Betrieb und Anforderungen wie 24 mal 7 sprechen für den Einsatz des ServiceMix.