IT-Modernisierung: Container
Hochskalierende, flexible und ausfallsichere Systeme

IT-Modernisierung: Container

In den letzten Jahren haben steigende Business-Anforderungen viele neue Technologien und Möglichkeiten in der IT ergeben. Hochskalierende, flexible und ausfallsichere Systeme mit geringen Kosten sollen die Lösungen aller Probleme sein. Nur wie baut man diese? Man kann das durch verschiedene Ansätze lösen – einer davon sind Container.
In diesem Artikel soll das Thema Container und die Vorteile für die IT näher beleuchtet werden.

Was ist ein Container?

Ein Container kann wie ein isolierter Behälter gesehen werden – vergleichbar mit einem Schiffscontainer. Jeder Inhalt eines Schiffscontainers ist dadurch von den Inhalten der anderen Schiffscontainer unabhängig.

Die Schiffscontainer teilen sie sich zusammen das Schiff, mit dem sie transportiert werden. In der IT stellt das Schiff die Hardware und das Deck das Betriebssystem dar, welche sich die einzelnen Container teilen.

Die Inhalte der Schiffscontainer sind Images, welche beliebig oft repliziert werden können. Ein Image selbst ist Speicherabbild, das gelesen, aber nicht verändert werden kann, wie z. B. eine CD. Auf einem Schiff können gleichzeitig mehrere Schiffscontainer auf unterschiedlichen Decks transportiert werden. Das bedeutet in der IT, dass Container auf einem Betriebssystem beliebig oft (solange dafür Platz ist) parallel betrieben werden können. Das zahlt auf die Skalierbarkeit ein, da kein zusätzliches Betriebssystem benötigt wird, um die Anwendung zu betreiben.

Ein Container wird von einer oder mehreren Container-Engines betrieben, welche sich auf dem Betriebssystem eines Servers oder virtuellen Maschine befindet. Daher ähnelt eine Container-Engine einem Betriebssystem. Allerdings haben herkömmliche Anwendungen Abhängigkeiten zum Betriebssystem und dessen Kernel. Das haben Container zwar auch, diese sind aber unveränderlich im Image hinterlegt. Das resultiert aus der Bündelung der Anwendung und dessen Abhängigkeiten in einem Image.

Um diesen Sachverhalt zu verstehen, wird nachfolgend ein Vergleich zwischen virtuellen Maschinen und Container-Engines aufgestellt.

Virtuelle Maschinen vs. Container-Engines

Virtuelle Maschinen sind seit Jahren auf dem Markt etabliert. Wieso sollte man jetzt auf Container umsteigen? Um diese Frage zu klären, werden nachfolgend die Prinzipien in einer IT-Landschaft von virtuellen Maschinen und Containern näher erläutert.

Nachfolgende Grafik stellt das Architekturprinzip von virtuellen Maschinen und den zugehörigen Betriebssystemen dar.

Prinzip Virtuelle Maschinen
Abbildung 1: Prinzip - Virtuelle Maschinen

Auf der Abbildung sind mehrere Server zu sehen, auf denen mehrere (virtualisierte) Betriebssysteme, sog. virtuelle Maschinen laufen. Weiterhin agieren auf jedem Betriebssystem unterschiedliche Applikationen und Datenbanken. Jede Applikation greift dabei auf die gleichen Ressourcen wie andere Applikationen innerhalb des Betriebssystems zu, weil das Betriebssystem die Basis der Applikationen darstellt. Das bedeutet aber, dass sie nicht isoliert sind. Dadurch, dass eine Anwendung nur einmal auf einem Betriebssystem ausgeführt werden kann, benötigt das Betriebssystem selbst, die Applikationen und deren Abhängigkeiten viel Speicherplatz und Ressourcen.

Ein Server mit unterschiedlichen Betriebssystemen und unterschiedlichen virtuellen Maschinen hinsichtlich ihrer simulierten Hardware bringt jedoch auch Vorteile mit sich: verschiedene Applikationen mit unterschiedlichen Anforderungen, z. B. Betriebssystemvoraussetzung Windows vs. Linux, können auf einem Server gehostet werden. Zudem ergeben sich kurze Kommunikationswege zwischen den Applikationen und deren zugehörigen Systemen (z. B. Datenbanken), da der Server an sich ein geschlossenes System darstellt.

Anders verhält sich das Architekturprinzip von Containern.

Abbildung 2: Prinzip - Virtuelle Maschinen mit Container-Engines

Wie auf der Abbildung zu erkennen ist, läuft eine Container-Engine auf einem Betriebssystem, welches wiederum auf einem Server läuft. Dabei ist es möglich, wie auch bei virtuellen Maschinen, mehrere Betriebssysteme auf einem Server zu betreiben.

Der Vorteil der Container zeichnet sich dann ab, wenn die Applikation innerhalb eines Containers alle nötigen Abhängigkeiten besitzt und somit unabhängig vom Betriebssystem lauffähig ist. Lediglich die Container Engine wird benötigt. Denn ein Container enthält kein eigenes Betriebssystem und keine simulierte Hardware. Hier wird auf das System des Hosts zugegriffen, sodass alle Container das Betriebssystem und Hardware gemeinsam nutzen.

Dadurch ist es möglich, dass die Applikationen schneller gestartet und heruntergefahren werden können, da nicht erst ein Betriebssystem hochgefahren werden muss, sondern lediglich ein Container bzw. seine Engine ein-/ausgeschaltet wird. Das ist möglich, weil ein Container bzw. seine Engine wesentlich leichtgewichtiger ist und keine Overheads wie die betriebssystemzugehörigen Komponenten hochgefahren werden müssen.

Weiterhin ist es möglich, auf einer Container Engine mehrere gleiche Container zu betreiben, was zwar bei einer virtuellen Maschine auf dessen Host auch möglich ist, aber ein komplettes Betriebssystem erfordert und nicht nur eine Container Engine.

Warum eine moderne IT-Landschaft auf Container setzen sollte

Eine sich immer schneller verändernde Business-Welt hat auch Auswirkungen auf die zugehörige IT-Landschaft und den dazugehörigen Anforderungen. Es ist notwendig, dass die IT-Landschaft zügig den Anforderungen aus dem Business gerecht zu werden, sodass kein Nachteil am Markt entsteht.

Schnelleres Deployment

Durch eine Containerumgebung ist es möglich, das Deployment zu beschleunigen. Das setzt voraus, dass man auf eine Microservice-Architektur zurückgreifen kann, was häufig dazu führt, dass die prozessualen und funktionalen Abhängigkeiten sowie Verantwortlichkeiten innerhalb eines Unternehmens geändert werden sollten. Microservices sind für eine bestimmte Aufgabe geschaffen und kleinteilig, weshalb sie sich sehr gut für Container eignen. Außerdem beinhaltet ein Container all seine Abhängigkeiten, wodurch weitreichende Überprüfungen auf Kompatibilität hinfällig werden.

Durch die Zusammenarbeit zwischen einer CI-/CD-Pipe, einer automatisierten Bereitstellungskette und flexiblen Microservices, verpackt in Containern, ist ein kürzerer Release-Zyklus bei gleichbleibender oder sogar verbesserter Qualität möglich.
Aus der Kleinteiligkeit ergibt sich, dass Container schneller deployed werden können.

Skalierbarkeit

Container können hinsichtlich der Skalierbarkeit eine wichtige Rolle spielen. Denn wie bereits oben beschrieben, sind diese wesentlich kleinteiliger und flexibler im Gegensatz zu großen komplexen Anwendungsarchitekturen. Da kleinteilige Container beliebig oft auf einem Betriebssystem lauffähig sind, eignen sie sich besonders für Systeme, welche flexibel hinsichtlich ihrer Skalierbarkeit sein sollen. Aus dem kleinen Format der Container ergeben sich des Weiteren schnelle Boot-Zeiten – innerhalb kürzester Zeit ist ein Container einsatzfähig. Das können im Vergleich zu Containern nur wenige virtuelle Systeme.

So können z. B. während Stoßzeiten mehrere identische Container gestartet werden, um die Last abzufangen und die Antwortzeiten performant zu halten.

Selbst große Container-Setups können problemlos mit Orchestrierungssystemen wie Docker Swarm, Apache Mesos oder Google Kubernetes verwaltet werden. Diese Systeme verteilen die Container auf Grundlage vorgegebener Regeln über die vorhandene Hardware und überwachen diese.

Kostenersparnis

Mit dem Vorteil der Skalierbarkeit geht außerdem eine Kostenersparnis hervor. Dadurch, dass man bedarfsgerecht und schnell Container hochfahren kann, spart man sich die Kosten, die sich sonst durch den Dauerbetrieb mehrerer virtuellen Maschinen ergeben. Diese sind aber häufig nicht voll ausgelastet und verursachen daher unnötig kosten. Umgekehrt können unausgelastete Container einfach heruntergefahren werden.

Gerade bei eCommerce-Online-Plattformen stellt sich dieser Vorteil heraus. Abends, wenn die Kund:innen zuhause sind, steigt die Last auf die Systeme durch Browsen im Shop und daraus resultierenden Bestellungen. Dabei können einfach weitere Container hochgefahren werden, sodass die Antwortzeiten gering bleiben und somit das Einkaufserlebnis positiv bleibt.  

Verfügbarkeit und Ausfallsicherheit

Hinsichtlich der Verfügbarkeit und Ausfallsicherheit sind Container im Vorteil gegenüber komplexen Anwendungsarchitekturen. Sobald die darunterliegende Infrastruktur, auf dem der Container läuft, abstürzt oder nicht länger verfügbar ist, kann sofort ein neuer Container auf einem anderen Host oder Betriebssystem hochgefahren werden und dorthin geroutet werden. Somit kann man eine, basierend auf Container designte Applikation als hochverfügbar bezeichnen, vorausgesetzt eine hochverfügbare Anwendungsarchitektur berücksichtigt wurde. Im Vergleich dazu würde ein komplexe Anwendungsarchitektur bei einem Ausfall mehrere Minuten benötigen, um einsatzfähig zu sein bzw. einen Neustart hervorzurufen.

Ein Stromausfall oder ein Hochwasser kann dazu führen, dass ein Rechenzentrum eines eCommerce-Online-Plattformanbieters ausfällt. Die Services des Rechenzentrums sollen aber dennoch verfügbar bleiben, weshalb häufig auf ein anderes Rechenzentrum ausgewichen wird. Dort kann die Last, welche auf dem ausgefallenen Rechenzentrum ist, abgefangen werden, indem dort neue Container hochgefahren werden und der Datenverkehr an dieses Rechenzentrum umgeleitet wird. Container bieten dabei eine wesentlich schnellere Reaktionszeit.

Kompatibilität

Die Container Engine ist auf jedem Computer lauffähig. Zudem beinhalten die Container alle nötigen Abhängigkeiten, um gestartet werden zu können. Dadurch, dass diese Unabhängigkeit besteht und Container in völlig identischer Form auf verschiedenen Engines laufen können, sind Aussagen, dass es aber auf dem anderen System funktioniert hat, hinfällig.

Im Vergleich dazu sind komplexe Anwendungsarchitekturen meist für einzelne Betriebssysteme zugeschnitten, um auf deren Technologien zurückgreifen zu können.

Voraussetzungen

Trotz aller Vorzüge bringen Container gewisse Voraussetzungen mit sich. Nicht jede Anwendung ist von Grund auf für Container geeignet, bzw. kann die Vorteile der Container ausschöpfen. Darunter fällt zum einen die Anwendungsarchitektur, welche häufig in von einer Großarchitektur in eine Microservice-Architektur überführt werden sollte.

Um Testaufwände der kleinteiligen Container zu optimieren, sollte man eine CI-/CD-Pipeline im Unternehmen etablieren.

Für ein Unternehmen stellt sich damit auch die Herausforderung, das Wissen im Unternehmen aufzubauen und zu etablieren, um einen sicheren und zuverlässigen Betrieb zu gewährleisten.

Technisch gesehen, muss zudem gewährleistet sein, dass sich Container im Laufe eines Gesamtprozesses die gleichen Systembibliotheken und den gleichen Kernel teilen, da es sonst zu Kompatibilitätsproblemen kommen kann. Aus Sicht der Sicherheit oder von Softwarefehlern können Container auch problematisch sein, weil die gleichen Container aus demselben (fehlerhaften) Image erzeugt werden.

Ausblick

Wenn die Basis für Container geschaffen ist (CI/CD-Pipe, kleinteilige Applikationen, Microservices), können Container eine enorme Flexibilität hinsichtlich Ressourcen und Entwicklungszyklen erreichen. Ein weiterer Vorteil ist die hohe Skalierbarkeit der Container.

Wenn eine neue IT-Landschaft aufgebaut (Greenfield-Ansatz) wird, eignen sich Container sehr gut, da man hier die gesamte Architektur darauf auslegen und zugehörige Prozesse aufsetzen kann.

Im Gegenzug bedeutet das auch, dass alte, großteilige Anwendungsarchitekturen (Brownfield-Ansatz) für den Einsatz von Containern angepasst bzw. neugestaltet werden müssen, um die Vorteile zu erhalten. Das erfordert meist nicht nur Änderungen in der Applikation, sondern auch im Business im Hinblick auf Verantwortlichkeiten.

Hierbei stellt sich die Frage, ob das technisch als auch kaufmännisch möglich ist, da dies meist hohe Aufwände, aufgrund der hohen Komplexität, mit sich bringt. Insgesamt kann man sagen, dass die Container-Technologie eine zukunftsfähige Technologie ist, da sie flexibel, skalierbar und ausfallsicherer als virtuelle Maschinen ist. Der Weg dorthin ist allerdings nicht immer ganz einfach. Eine Gelegenheit, die sich für eine Umstellung eignet, ist, wenn man in Erwägung zieht, seine On-Premise-IT-Landschaft in die Cloud umzuziehen. Hier werden häufig viele Applikationen evaluiert und neugestaltet, um die Vorteile der Cloud zu nutzen – dabei kann man auch Containerisierung in Betracht ziehen.

Gerne helfen wir Ihnen, die IT-Landschaft bzgl. der Container-Technologie zu bewerten und notwendige Schritte zu erarbeiten.