VERTEILTE UND SYNCHRONISIERTE ANWENDUNGEN IN DER CLOUD

Vorteile von Kubernetes und Datenbanken in der Cloud
Kontakt

 

Philipp hat im Rahmen seines Studiums ein Praktikum bei OVSoftware absolviert und sich dabei intensiv mit verteilten und synchronisierten Anwendungen in der Cloud beschäftigt. Die Bekanntschaft mit Anwendungen, die dafür bei uns konzipiert und entwickelt werden oder deren Wartung und Pflege samt Hosting von OVSoftware betreut werden, waren für ihn Anlass genug, sich ausführlich mit diesem Thema zu befassen. 

Im nachfolgenden Artikel beschreibt er seine Erkenntnisse und Erfahrungen und erläutert, wann die Migration einer Anwendung in die Cloud sinnvoll sein kann.

Verteilte und synchronisierte Anwendungen in der Cloud

Die Umsetzung synchronisierter Anwendungen ist ein wiederkehrendes Thema in OVSoftware Projekten. Synchronisierte Anwendungen sind an den verschiedensten Standorten in der Welt erreichbar. Durch geringe Latenzen und eine hohe Verfügbarkeit sorgen sie für ein gutes Nutzererlebnis. Zur Realisierung dieser Vorhaben bietet sich eine Nutzung der Cloud an. Im Rahmen der nachfolgend beschriebenen Recherchen wurden Kubernetes Cluster und verschiedene Datenbanken bei den Anbietern Microsoft Azure und Amazon Web Services erstellt.

Warum Cloud?

In einer sich global immer stärker vernetzten Welt nutzen OVSoftware Kunden und deren Geschäftspartner Dienste oftmals weltweit. Für ein optimales Nutzererlebnis und hohe Produktivität sind daher Server in den jeweiligen Regionen notwendig.

Neben der guten Erreichbarkeit an beliebigen Standorten hat die Cloud einen weiteren wesentlichen Vorteil: Fällt ein Rechenzentrum in einer Region aus, so ist ein Ausweichen auf andere Rechenzentren in dieser Region möglich. Bei globalen Clustern kann sogar die Region gewechselt werden. Des Weiteren kann je nach Wahl des Servicemodells (IaaS, PaaS, SaaS) ein großer Teil der bei On-Premises Herausforderungen in Bezug auf Wartung und Pflege der Serverumgebung an den Cloudanbieter abgegeben werden. 

Anwendungen in der Cloud sind daher in der Regel

  • zuverlässig,
  • schnell verfügbar und
  • beanspruchen kein weiteres Personal für die Instandhaltung von Servern und Infrastruktur.
 

Verteilung und Synchronisation von Anwendungen in der Cloud

Ein Szenario, in dem die Migration einer Anwendung in die Cloud sinnvoll ist, könnte wie folgt aussehen: 

Der Hauptsitz einer Firma befindet sich in Deutschland. Es werden jedoch auch Standorte in Indien und Brasilien betreut. Damit die Mitarbeiter dort keine Verbindung zu den weit entfernten, deutschen Servern aufbauen müssen, ist es sinnvoll, neben der primären Region in Deutschland weitere sekundäre Regionen in Indien und Brasilien zu betreiben.

Wichtig dabei ist eine Synchronisation der genutzten Cloud-Services. Mitarbeiter aller Regionen sollten nach Möglichkeit auf die gleichen Daten innerhalb einer Datenbank zugreifen. Zudem sind standortabhängige Abweichungen und störende Faktoren zu vermeiden.

Für einen Überblick über die Umsetzung von Kubernetes Clustern und relationalen sowie NoSQL Datenbanken in einem globalen Anwendungsfall in der Cloud beschränkt sich die nachfolgende Darstellung die Cloudanbieter AWS und Azure.

Kubernetes

Die Migration einer global schnell verfügbaren Anwendung in die Cloud, die noch dazu gut zu skalieren und einfach upzudaten ist – das ist neben dem globalen synchronen Betrieb von Datenbanken eine der Herausforderungen in diesem Zusammenhang. Kubernetes, kurz K8s, bietet hier die idealen Eigenschaften. 

Kubernetes ist eine Anwendung, die neben der Bereitstellung und Verwaltung von Containern auch die Skalierung der durch die Container bereitgestellten Services übernimmt. Mit Hilfe von Rechenzentren, die weltweit über mehrere Regionen verteilt sind, kann der Nutzer auf die gewünschte Anwendung zugreifen, ohne eine Verbindung zu einem weit entfernten, mit viel Ladezeit verbundenen Rechenzentrum herstellen zu müssen. Sie erfolgt einfach zum nächstgelegenen Rechenzentrum. Selten auftretende Ausfälle beispielsweise von Pods erkennt Kubernetes und kann diese ersetzen. So ist eine hohe Verfügbarkeit der Anwendung garantiert.

Die gute Skalierbarkeit erlaubt es, anhängig von der Anzahl der Nutzeranfragen an den jeweiligen Server, die Kapazität so anzupassen, dass die Perfomance der Anwendung für den Nutzer gut ist und die Kosten für das Unternehmen so niedrig wie möglich gehalten werden können. Eine optimale Ressourcennutzung steht im Vordergrund.

Neben der optimalen Skalierung einer Anwendung spricht auch die gute Wartbarkeit für Kubernetes. Sie kann ohne Downtime für das eigene Unternehmen und/oder den Nutzer erfolgen.

Als erste Anwendung dieser Untersuchung wurde ein simples Voting Programm mit Hilfe von Kubernetes in die Azure Cloud migriert. Die Serverstandorte waren während dieses Versuches in Deutschland und Indien. So konnten erste wichtige Erkenntnisse gewonnen werden, wobei der Fokus auf Geschwindigkeit, Verfügbarkeit und der preislichen Gestaltung lag. Neben der automatischen Wiederherstellung von im Kubernetes-Cluster manuell erzwungenen Ausfällen diverser Funktionen stand vor allem letztere im Vordergrund.

Ziel dabei war es, eine erste Vorstellung dafür zu entwickeln, mit welchen Kosten bei einem realen Anwendungsfall zu rechnen sein würde. Eine Erkenntnis dabei: Gerade die Nodepools sollten bei Nichtnutzung herunterskaliert werden, um unnötige Ressourcen – und somit zu hohen Ausgaben – ohne effektiven Nutzen für die Anwendung einzusparen.

Datenbanken

Das Betreiben redundanter globaler Datenbanken ist ein weiterer wichtiger Dienst, den es zu beleuchten galt. Hier wurde sowohl eine relationale Datenbank in Azure als auch eine SQL sowie NoSQL Datenbank in AWS umgesetzt.

Die Datenbank sollte jeweils von verschiedensten Standorten in der Welt abrufbar sein. Darüber hinaus war es wichtig, von der jeweiligen Region aus ein Schreibrecht für eine beliebige Datenbank des Clusters zu haben. In einer global betriebenen Datenbank in der Cloud ist dies jedoch nicht ohne Weiteres möglich. Ohne zusätzliche Einstellungen kann eine Datenbank nur über die primäre Region beschrieben werden. In den sekundären ist sie lediglich abrufbar. Sollen die Daten jedoch in allen global betriebenen Datenbanken des Clusters redundant sein und Mitarbeiter aus fernen Regionen für Änderungen nicht auf die primäre Datenbank in Deutschland zugreifen müssen, so ist eine regionsunabhängige Möglichkeit zum Ändern von Daten in einem Datenbankcluster notwendig.

Eine sehr gute Lösung bietet hier Amazon Aurora, eine Datenbank-Engine für relationale Datenbanken in AWS. Mit der „read replica write fowarding“ Option können über sekundäre Regionen Änderungen an den Daten des globalen Clusters vorgenommen werden. Dabei gibt es jedoch Einschränkungen. 

So können Inhalte in einer Datenbanktabelle zwar hinzugefügt werden, das Erstellen einer neuen Tabelle ist aber nicht möglich und muss nach wie vor über die primäre Region erfolgen. Außerdem werden Änderungen nur von der sekundären Region an die primäre weitergeleitet und dort bestätigt. Das bedeutet: 

  • Neue Einträge werden in die Datenbanktabelle einer Read Replica Instanz in einer sekundären Region eingegeben. 
  • Die Änderungen werden zur primären Region weitergeleitet (forwarded). 
  • Die primäre Region bestätigt (committed) die erhaltenen Änderungen und repliziert diese an alle mit dem Cluster verbundenen Regionen.

Fazit

Cloudtechnologien sind heutzutage nicht mehr wegzudenken. Sie bringen gerade im Bereich der globalen Anwendungen viele Vorteile mit sich.

  • Automatisierung vieler Prozesse mit Kubernetes für einen möglichst optimalen Kosten/Nutzenfaktor in der Cloud
  • hohe Verfügbarkeit von Anwendungen auf der ganzen Welt
  • standortunabhängiger und schneller Zugriff auf das, was gerade gebraucht wird
  • geringere eigene Kosten und weniger Ausfälle durch das Auslagern vieler Prozesse an den Cloudanbieter

 

Welcher Cloudanbieter dabei gewählt werden sollte, hängt ganz vom Anwendungsfall ab und lässt sich nur schwer verallgemeinern. Die Erfahrungen mit AWS und Azure, kurz zusammengefasst, sind:

Azure ist ein Cloudanbieter, der Entwicklern und kleineren Unternehmen einen übersichtlichen und sehr preiswerten Einstieg in die Cloud ermöglicht. AWS hingegen eignet sich eher für große Unternehmen, die sehr individuelle Vorstellungen zum Umsetzen einer Anwendung haben und dementsprechend viele Einstellungsmöglichkeiten benötigen.