Cluster oder Load Balance

Hochverfügbarkeit erreichen, aber wie?

Das Ziel jedes IT-Verantwortlichen ist es die Systeme seines Unternehmens "hoch verfügbar" zu machen und das aus gutem Grund. Für Unternehmen ist es unerlässlich sicherzustellen, dass ihre Systeme immer online sind. Weltweit wird daran gearbeitet so nah wie möglich an das "Verfügbarkeits Nirvana" von 99,9999 Prozent zu gelangen. Load Balancing und Clustering sind Methoden, die Hochverfügbarkeit versprechen. Aber wie funktionieren beide Methoden eigentlich genau?

Um diese Frage zu beantworten, muss zunächst geklärt werden, was Hochverfügbarkeit überhaupt bedeutet. Hochverfügbarkeit bezeichnet die Fähigkeit eines Systems einen kontinuierlichen und uneingeschränkten Betrieb innerhalb eines spezifizierten Zeitraums gewährleisten zu können. Ziel ist ein hoch verfügbares System, welches Anwendereingaben akzeptiert und zu jederzeit erfolgreich auf diese reagiert.

Der größte Aufklärungsbedarf rund um das Thema Hochverfügbarkeit ergibt sich bei dem Verständnis zweier Komponenten ihrer Implementierung: Load Balancing und Clustering. Oftmals unterliegen Administratoren dem Irrglauben, dass es ausreicht ihrem System einen Load Balancer vorzuschalten, um dieses "hoch verfügbar" zu machen. 

Was ist Load Balancing?

Der Zweck eines Load Balancers besteht schlichtweg darin Nutzeranfragen zwischen verschiedenen Ressourcen (z.B. Servern) zu lenken. Oftmals sind Load Balancer so programmiert, dass sie die Ressourcenauslastung maximieren. Basierend auf komplexen Algorithmen lenken sie Benutzerfrequenzen zu der Ressource im System, die zu dem jeweiligen Zeitpunkt die geringste Auslastung hat. Load Balancing erlaubt es Administratoren innerhalb eines Systems eine Vielzahl an Instanzen aufzusetzen und den Traffic gleichmäßig unter ihnen zu verteilen, sodass es keinen "Single Point of Failure" geben kann. Wenn eine Instanz ausfällt, wird der Load Balancer den Traffic bis zur Wiederverfügbarkeit auf andere Instanzen umleiten.

Damit trägt Load Balancing zwar zu einer hohen Verfügbarkeit bei, kann diese aber nicht alleine gewährleisten. Load Balancing lenkt den Traffic zwischen verschiedenen Ressourcen, stellt dabei allerdings kein konsistentes Benutzererlebnis zwischen ihnen her. Grund hierfür ist, dass Load Balancing die Kommunikation zwischen den Ressourcen nicht beeinflusst und damit auch die Aufrechterhaltung einer User-Session mit dem Server nicht sicherstellen kann. Suchindizies oder System Caches können Inkonsistenzen zwischen verschiedenen Servern aufweisen und zum Ausfall von Ressourcen und damit zu unzuverlässigen Systemprozessen führen.

Abbildung A: Load Balancing Setup

Was ist Clustering?

Beim Clustering werden verschiedene Instanzen (auch Knoten genannt) miteinander vernetzt und damit zu einem großen singulären System zusammengefasst. Hierdurch ergibt sich für den Anwender ein einheitliches Nutzererlebnis über alle Knoten hinweg. Dieses wird durch die gemeinsame Bereitstellung von Informationen zwischen den Knoten erreicht. Caches, Datenbankinhalte und Suchindizes können zwischen den Knoten kommuniziert oder direkt an einem zentralen Ort gespeichert werden. So eliminiert auch das Clustering den "Single Point of Failure", da jeder Knoten Zugriff auf das System erlaubt.

Allerdings wird, ähnlich wie beim Load Balancing, auch das alleinige Clustern Ihres Systems nicht ausreichen, um dieses "hoch verfügbar" zu machen. Clustering ohne Load Balancer bedeutet für den Anwender, dass er von jedem Knoten explizit Zugang zum System erfragen muss. Das heißt, dass der Nutzer eine für jeden Knoten spezifische URL eingeben müsste, um Zugang zum System zu erhalten. Damit gäbe es keinen einfach wiedererkennbaren "Point of Entry" in Form einer einheitlichen URL. Weiterhin würde jeder Nutzer selbst entscheiden über welchen Knoten er auf das System zugreifen möchte. Hierdurch kann es zu einem Ungleichgewicht in der Auslastung der verschiedenen Knoten und damit zu Über- oder Unterbelastungen kommen. Das Resultat wären Performanceprobleme und im schlimmsten Fall sogar der Ausfall einzelner Knoten.

Abbildung B: Cluster Setup

Beide Methoden in Kombination

Der Einsatz von nur einer der beiden Methoden eignet sich demnach nur in Einzelfällen. Um Ihr System "hoch verfügbar" zu machen, werden Sie vielmehr beide Methoden anwenden müssen, da Load Balancing und Clustering sich gegenseitig ergänzen. Load Balancer eignen sich zur Optimierung Ihrer Ressourcenauslastung und lösen damit Probleme, die sich bei dem einseitigen Einsatz von Clustering ergeben. Cluster gewährleisten demgegenüber konsistente Daten zwischen den einzelnen Knoten eines Systems und sorgen damit für ein einheitliches Nutzererlebnis. Hierdurch lösen Sie einen der Hauptnachteile der alleinigen Nutzung von Load Balancern.

Schalten Sie einem Cluster einen Load Balancer vor, bewegt sich Ihr gesamtes System in Richtung Hochverfügbarkeit. Alle Benutzeranfragen werden an einen Ort mit einzigartiger URL gesendet, um dann von einem Load Balancer weitergeleitet zu werden. Der Load Balancer sendet jede Anfrage an den am wenigsten ausgelasteten Knoten und steigert damit die Performance und Effizienz Ihres Systems. Nimmt ein Nutzer eine Änderung an einem Knoten vor, aktualisiert sich diese über das gesamte System, da alle Knoten miteinander kommunizieren. Das bedeutet, dass jeder Benutzer zu jeder Zeit auf konsistente Daten zugreift. Würde ein Knoten während einer Sitzung ausfallen, könnte der Load Balancer die Nutzeranfragen direkt an den nächst verfügbaren Knoten weiterleiten, ohne dass es zum Abbruch der Sitzung kommt. Automatisch steigert sich die Verfügbarkeit des gesamten Systems.

Abbildung C: Load Balancing mit Cluster Setup

Mehr Flexibilität duch den Einsatz von Open Source Software

Es ist offensichtlich wie sich Load Balancing und Clustering gegenseitig ergänzen, um die Verfügbarkeit Ihrer Systeme zu steigern. Den eigentlichen Praxistest muss das Setup aber erst dann bestehen, wenn Sie versuchen es vor dem Hintergrund Ihrer individuellen Systemarchitektur zu implementieren. Für viele Applikationen ist für den Einsatz von Clustering oder Load Blancing der Erwerb einer herstellerspezifischen Software nötig. Diese Software muss meist kommerziell erworben und in die eigene Systemarchitektur übernommen werden. Damit ergeben sich nicht nur Kosten für den Erwerb, sondern darüber hinaus der zusätzliche Aufwand der Installation und Konfiguration.

Open Source Technologien räumen diesen Nachteil oftmals aus, da sie einer Reihe verschiedener offener Standards folgen. Diese Standards erlauben der entsprechenden Applikation die einfache Verbindung und Integration mit anderen Systemen, die konform mit dem jeweils eigenen Standard sind. Inbegriffen sind Standards wie SOAP und JSON für Web Services, HTML5 und CSS3 für Web Standards, WebDAV für webbasiertes Distributed Authoring und Versioning und weitere Software, die dem Ansatz des sogenannten "vendor-agnostic" folgt. Die Applikation erfordert damit auf keinem Level herstellerspezifische Software, da die genannten offenen Standards weitverbreitet sind. Vendor Agnostic, die bei Open Source Sofware in beinahe jede existierende Systemarchitektur passt, reduziert die Anschaffungskosten und vereinfacht die Optimierung der Verfügbarkeit Ihres Systems.

Kritiker von Open Source Software führen häufig an, dass die Kosten der Einführung in vielen Fällen die Vorteile der zuvor erwähnten Flexibilität überwiegen. Diese Kosten beinhalten den Verlust von Support und Updates sowie den Mangel an Verlässlichkeit im Vergleich zu proprietärer Software. Tatsächlich bieten viele Anbieter von Open Source Software heute aber Subskriptions-Modelle an, die verlässlichen Support und regelmäßige Software-Updates beinhalten.

Was noch wichtig ist

Um die Hochverfügbarkeit des eigenen Systems zu erreichen, müssen alle "Single Points of Failure" beseitigt werden. In obiger Abbildung sehen Sie zwischen den Nutzeranfragen und Applikationsservern einen einzelnen Load Balancer und weiterhin einen einzelnen Controller zwischen den Applikations- und Datenbankservern. Diese "Single Points of Failure" können die Verfügbarkeit Ihres Systems bei Beeinträchtigung gefährden. Stellen Sie sich vor der einzelne Load Balancer würde ausfallen und damit das ganze System für Benutzeranfragen unverfügbar machen. Weiterhin wäre vorstellbar, dass die oben abgebildete Hardware an einem einzigen Ort oder Rechenzentrum stände. Gäbe es in diesem Rechenzentrum einen Strom- oder Netzwerkausfall, würde dies ebenfalls zum Ausfall des gesamten Systems führen.
 
Das Ziel von Hochverfügbarkeit endet nicht mit dem Clustering oder Load Balancing Ihres Systems. Vielmehr muss Ihre gesamte Architektur bewertet und von allen "Single Points of Failure" befreit werden. 

 

Weiterführende Informationen

Im Liferay Developer Network erhalten Sie weiterführende Informationen zum Thema und erfahren, wie Sie die Liferay Plattform aus technischer Sicht auf hohe Verfügbarkeiten ausrichten und die Performance Ihrer Systeme optimieren können. Zum Liferay Developer Network.