OpenShift vs. Docker
Docker machte die Container-Virtualisierung populär und verdrängte weitgehend die vormals vorherrschenden virtuellen Maschinen (VM). Der Siegeszug der Anwendungs-Container revolutionierte, wie Anwendungen gebaut, verpackt und ausgeführt werden. Denn Container sind eine standardisierte Software-Einheit. Sie lassen sich überall dort problemlos einsetzen, wo eine entsprechende Container-Runtime vorhanden ist.
Im Gegensatz zu den vorher allgegenwärtigen aber recht behäbigen virtuellen Maschinen sind Container leichtgewichtig. Auf einem Host lassen sich dutzende bis tausende von Containern betreiben. Dieser inhärente Vorteil der Container-Virtualisierung führte zur Verbreitung verteilter Microservice-Architekturen. Anstatt eine monolithische Anwendung zu bauen, spaltet man den Funktionsumfang in einzelne Komponenten. Jede Komponente wird als Dienst („Service“) in einen eigenen Container verpackt. Die Container werden gestartet, und die Dienste kommunizieren über das Netzwerk miteinander.
Der Microservice-Ansatz ist besonders praktisch für die Software-Entwicklung, denn so lässt sich für jeden Dienst die dafür am besten geeigneten Technologien nutzen. Anstatt an einzelne Programmiersprachen und -paradigmen gebunden zu sein, lassen sich diese zwischen den Diensten variieren. Da immer neue Technologien hinzukommen, ist es so einfacher, einzelne Dienste neu zu implementieren.
Aus der Fähigkeit, mehrere gleichartige Container aus einem Container-Image zu klonen, ergibt sich die Skalierbarkeit des Gesamtsystems. Bei höherer Nachfrage werden zusätzliche Container gestartet, der betreffende Dienst skaliert horizontal. Dies bedingt jedoch ein System, welches die laufenden Container überwacht und bei Bedarf beendet, bzw. neue Container startet. Ferner müssen eingehende Anfragen an die einzelnen Container verteilt werden.
Mit der Skalierbarkeit wächst ganz erheblich die Komplexität des Systems. Zumindest gilt zu bedenken:
- Entgegennehmen der Anfragen per Load Balancer
- Verteilen der Aufgaben an die einzelnen Container
- Überwachen des Zustands der Container-Instanzen
- Beenden und Starten neuer Instanzen
- Aufbau eines Netzwerks zwischen den Containern
- Pflege der Container bzw. Images mit Updates, etc.
All dies führt zusammengenommen zu einem massiven administrativen Overhead. Und das ist noch nicht mal alles. Hinzu kommt noch die Pflege des administrativen Systems selber. Auch diese Kontrollebene, welche all die oben genannten Punkte leistet, muss gepflegt, überwacht und mit Updates versorgt werden. Selbstverständlich soll es dabei auf Nutzerseite nie zu spürbaren Leistungsverlusten kommen. Ferner muss die Sicherheit des Gesamtsystems durchgängig gewährleistet sein.