Schwerpunkte

Clouds, Container, Kubernetes

Warum Sie eine intelligente Datenplattform benötigen

15. Januar 2019, 15:18 Uhr   |  Autor: Paul Curtis / Redaktion: Axel Pomper


Fortsetzung des Artikels von Teil 1 .

Skalierbarkeit und Portabilität von Containern

Da ein Container nur eine Anwendung und ihre Software-Abhängigkeiten enthält, nimmt er sehr wenig Speicherplatz auf dem Server in Anspruch. Infolgedessen können mehrere Instanzen desselben Containers gleichzeitig ausgeführt werden. Diese höhere Anwendungsdichte führt dazu, dass die anfallenden Arbeitslasten besser verteilt und effizienter bearbeitet werden können. Auch die Verfügbarkeit der Anwendung wird dadurch verbessert. Wenn einer von mehreren identischen Containern ausfällt, können die verbleibenden Instanzen immer noch das gesamte Funktionsspektrum des Service bereitstellen.

Auch bei der Migration auf einen anderen Server oder in die Cloud und bei der Spiegelung auf ein anderes Cluster wirkt sich das kleine Volumen von Containern positiv aus. Hinzu kommt, dass jeder Container alle Komponenten enthält, die zur Ausführung einer Anwendung erforderlich sind. Die Migration eines Containers ist daher denkbar einfach: Er muss nur an den neuen Ort kopiert und dort in Plug-and-Play-Manier gestartet werden. Sie müssen weder die Kompatibilität prüfen, noch zusätzliche Software laden. Eine Cloud-basierte Instanz einer containerisierten Anwendung kann sofort nach der Erstellung gestartet werden. Dadurch profitieren Sie von der größtmöglichen Flexibilität und maximaler Kontrolle über die Verfügbarkeit Ihrer Anwendungen und die zu ihrer Ausführung genutzten Umgebungen.

Container sind weder persistent noch zustandsbasiert und wissen nicht, wo ihre Daten herkommen

Wenn ein Container gestoppt wird oder abstürzt, gehen alle in der Anwendung vorhandenen Daten verloren. Sie können Ihre Anwendung natürlich so programmieren, dass sie ihre Ergebnisse außerhalb des Containers speichert, doch Fortschrittsdaten, Logdateien und ähnliches sind nur so lange verfügbar, wie der Container läuft. Denn der Container (und jede weitere Instanz davon) wird bei jedem Neustart in seinem Urzustand bereitgestellt. Mit anderen Worten: Sie können den Zustand Ihrer Anwendung nicht speichern, um bei der nächsten Ausführung darauf aufzubauen. Des Weiteren „wissen“ Container nicht, wo ihre Daten herkommen oder wo sie nach der Bearbeitung gespeichert oder weiterverarbeitet werden. Jeder Container ist vollständig in sich geschlossen und kann nicht auf die Datenquellen zugreifen, die für seine Arbeit und die Speicherung genutzt werden. Zwar können Daten aus externen Quellen für den Container bereitgestellt und die Ergebnisse seiner Arbeit außerhalb der Container-Umgebung gespeichert werden, doch der Container selbst „weiß“ nicht, wo oder in welcher Form das geschieht. Er ist nicht „data-aware“.

Aus diesem Grund können containerisierte Anwendungen nicht für kurze Übertragungswege sorgen, indem sie beispielsweise ihre Daten und die Zwischenergebnisse auf demselben Node speichern. Das kann zu unnötigen Datenübertragungen führen, die die Effizienz eines als Container implementierten Service beeinträchtigen. Darüber hinaus „wissen“ Container nicht, welche Hardware und welche Dienste auf einem Server verfügbar sind. Das ist einerseits nützlich, weil es die containerisierte Anwendung schützt. Andererseits bedeutet es aber auch, dass die Anwendung nicht „weiß“, ob und welche Services für Unternehmensanwendungen auf einem bestimmten Server verfügbar sind. Daher kann sie weder gängige Services für die Orchestrierung und Verteilung von Workloads oder den Lastenausgleich nutzen, noch Verbindungen zu anderen Anwendungen herstellen.

Container-Orchestrierung

Eine weitere Gemeinsamkeit zwischen Containern und virtuellen Maschinen ist, dass die Bereitstellung, Skalierung, Überwachung und Aktualisierung einzelner, containerisierter Microservices so effizient wie möglich erfolgen müssen und daher zumindest teilweise automatisiert werden sollten.  Die meisten Entwickler setzen dazu auf Kubernetes, eine sehr anwenderfreundliche Plattform, die zudem Funktionen für die intelligente und ausgeglichene Orchestrierung von Containern, die automatisierte Erstellung, Löschung und Migration von Containern sowie die einfache Skalierung und Selbstheilung bietet.

Allerdings ist auch Kubernetes nicht in der Lage, Container persistent oder zustandsbasiert zu machen. Dies wird erst durch andere Lösungen möglich, die die zugrunde liegende Datenplattform nutzen, um die oben angesprochenen fundamentalen Einschränkungen der Container-Technologie zu überwinden. Mit diesem Ansatz ist es möglich, den Zustand eines Containers beim Herunterfahren zu speichern und jedwede Art von Daten (strukturierte, unstrukturierte und Streaming-Daten) aus demselben, persistenten Datenspeicher zu laden.

Zustandsbasierte Container haben mehrere positive Nebeneffekte: Sie sind robuster und können nach einem Fehler rasch aus dem neuesten Snapshot wiederhergestellt werden. Außerdem können sie alle abgearbeiteten Schritte in einem Auditprotokoll festhalten, sodass komplexe Prozesse nicht mehrfach ausgeführt werden müssen. Auf diese Weise kann beispielsweise eine containerisierte Anwendung, die Anträge für Autokredite bearbeitet, ein Auditprotokoll erstellen, anhand dessen sich bei Compliance-Prüfungen belegen lässt, dass alle Schritte ordnungsgemäß abgearbeitet wurden.

Da die Daten-Fabric von den containerisierten Komponenten getrennt ist, brauchen sich die Anwendungsentwickler nicht um die Speicherinfrastruktur zu kümmern, sondern müssen den Container nur für die Kommunikation mit der Speicherplattform konfigurieren. Diese Plattform verwaltet dann den gesamten Lebenszyklus aller Arten von Daten, unabhängig davon, ob diese aus einer Datenbank, einem Archiv, aus Streams oder aus lokalen, cloudbasierten oder externen Messaging-Services stammen. Sollten sich die Datentypen oder die Datenquellen ändern, muss die containerisierte Anwendung nicht geändert werden, da die Datenplattform eine Abstraktionsschicht hat, die dafür sorgt, dass die erforderlichen Daten nahtlos bereitgestellt werden.

Wenn Sie also Cloud-basiertes Container-Management mit Kubernetes auf einer intelligenten Datenplattform aufsetzen, vermeiden Sie Probleme bei der Verwaltung von Containerzuständen. Zudem können Sie Anwendungen mit dieser starken Kombination schneller entwickeln, bereitstellen und produktiv setzen. Denn mit einer intelligenten Datenplattform ist es kein Problem, eine Anwendung in verschiedenen Umgebungen zuverlässig auszuführen. Dadurch wird der Entwicklungsprozess effizienter und flexibler.

Paul Curtis ist Principal Solutions Engineer bei MapR

Seite 2 von 2

1. Warum Sie eine intelligente Datenplattform benötigen
2. Skalierbarkeit und Portabilität von Containern

Auf Facebook teilenAuf Twitter teilenAuf Linkedin teilenVia Mail teilen

Verwandte Artikel

funkschau