Ein Mule HA Cluster besteht aus mehreren gleich konfigurierten Mule Instanzen, die sich Teile ihres Zustands teilen können. Alle Knoten in diesem Cluster sind gleichberechtigt, alle können Anfragen bearbeiten. Mulesoft nennt das active-active.
Prinzipiell können alle Mule Anwendungen problemlos in einem Cluster ausgeführt werden. Im einfachsten Fall bekommt man dadurch einfache Ausfallsicherheit. Wenn man jedoch die komplette Funktionalität des Clusters ausschöpfen will, sollten bestimmte Dinge bei der Konfiguration der Anwendung beachtet werden. Dabei wird nach Verfügbarkeit (Availability), Zuverlässigkeit (Reliability), Skalierbarkeit (Scalability) und Verwaltbarkeit (Manageability) unterschieden. Manageability wird durch die Mule Management Console erreicht und deswegen im Folgenden nicht weiter beachtet.
Verfügbarkeit
Für Verfügbarkeit ist es wichtig, dass alle Maschinen (Mule Instanzen) Zugriff auf Eingangsendpunkte haben und deren Nachrichten bearbeiten können. Für Socket-basierte Endpunkte (TCP, HTTP, …) wird dabei die Verwendung eines externen Load Balancers empfohlen, der die Verbindungen auf die laufenden Knoten des Clusters verteilt. Bei ressourcenbasierten Endpunkte, die zum Beispiel auf Dateien oder Datenbanken zugreifen, benötigen allen Instanzen Zugriff auf die Ressource. Dennoch sollte nach Möglichkeit nur jeweils ein Knoten des Clusters zu einem Zeitpunkt auf die Ressource zugreifen. Listener-basierte Endpunkte werden von Mule automatisch unterstützt.
Zuverlässigkeit
Um Zuverlässigkeit zu gewährleisten ist es erforderlich die Abarbeitung einer Nachricht durchgängig transaktionsbasiert durchzuführen. Eine Nachricht darf nur dann nicht einem Transaktionskontext unterliegen, wenn sie Teil des globalen Zustands alles Cluster Instanzen ist. Für Endpunkte, die keine Transaktionssemantik kennen (File, FTP, HTTP, …) ist es nötig diese Nachrichten schnellstmöglich einem Transaktionskontext zu unterwerfen.
Hierbei kann man auf die Transports VM und JMS zurückgreifen. VM ist ein Mule-interner Kommunikationskanal, der zwar von allen Instanzen im Cluster gemeinsam genutzt wird, aber keine dauerhafte Persistenz bietet. Falls alle Mule Instanzen innerhalb des Clusters ausfallen oder heruntergefahren werden, geht auch der Zustand der VM-Schicht verloren. JMS ist der Java Messaging Service. Er garantiert Persistenz, ist aber etwas langsamer als VM.
Mulesoft stellt für den ESB einige spezielle Reliability Pattern zur Verfügung, die im wesentlichen die Umsetzung einer transaktionsbasierten Nachrichtenverarbeitung erleichtern bzw. automatisieren. Diese sorgen für synchrone Nachrichtenübertragung zwischen Endpunkten, Cluster-weite Sichtbarkeit von Sicherungspunkten und geeigneten Wiederholungseinstellungen.
Skalierbarkeit
Skalierbarkeit bezeichnet die Fähigkeit eines Clusters durch die Hinzunahme von weiteren Maschinen auch den Durchsatz und damit die Leistungsfähigkeit des gesamten Clusters zu steigern. Da ein Mehr an Knoten immer auch ein Mehr an Verwaltungsaufwand bedeutet, ist es hilfreich beim Entwurf der Clusterarchitektur einige Dinge im Auge zu behalten um den erhöhten Durchsatz auch wirklich zu erreichen.
Prinzipiell ist die Einhaltung der oben vorgestellten Zuverlässigkeitsmuster ein guter, erster Schritt um auch Skalierbarkeit gewährleisten zu können. Allerdings, ist sie nicht ausreichend. Zuverlässigkeit hat das Ziel, Informationen zwischen möglichst vielen Knoten zu verbreiten, so dass der Ausfall eines Knotens keinerlei negative Auswirkung hat. Um zusätzlich Skalierbarkeit gewährleisten zu können, ist es weiterhin erstrebenswert die Bearbeitung einer Nachricht lokal auf einem Knoten zu halten. Dadurch wird häufiges Kopieren von Daten zwischen Knoten und das Propagieren von Ereignissen zwischen Knoten vermieden. Findet die lokale Bearbeitung innerhalb einer Transaktion statt, sind diese Vorgaben automatisch eingehalten.
Bisher sind keine Kommentare vorhanden.