Cloud-native Entwicklung mit Microservices und Containern – die Anwendungen von morgen
In dieser vierten und letzten Folge über die Entwicklung zu einer datengesteuerten Organisation befassen wir uns mit den neuesten Trends in der Anwendungsentwicklung und wie diese mit dem Storage zusammenhängen. Gartner prognostiziert, dass bis zum Jahr 2022 mehr als 75 % der globalen Unternehmen containerisierte Anwendungen in der Produktion einsetzen werden, während es heute weniger als 30 % sind. Diese Anwendungen bieten gegenüber herkömmlichen, monolithischen Anwendungsdesigns erhebliche potenzielle Vorteile wie Skalierbarkeit, Elastizität und Agilität. Auf der kürzlich stattgefundenen Konferenz Kubecon 2021 wurde deutlich, dass containerisierte Anwendungen zum Mainstream werden. Laut CNCF wird die Containerisierung zunehmend von Unternehmen in Europa angenommen. Zweifellos haben Sie die Begriffe Cloud-Native, Container und Microservices schon einmal gehört, aber lassen Sie uns einen Schritt zurückgehen, um sicherzustellen, dass wir verstehen, was sie bedeuten.
Cloud-native Anwendungen sind so konzipiert, dass sie vom ersten Tag an wie eine Cloud funktionieren, egal ob in der Public Cloud oder vor Ort. Sie können schneller bereitgestellt und repariert werden und lassen sich problemlos zwischen verschiedenen Umgebungen verschieben. Cloud-native Anwendungen bestehen in der Regel aus Microservices und sind in Container verpackt. Dieser neue Cloud-native Stack umfasst eine neue Reihe von Anwendungen – Anwendungen, die Streaming-Daten in Echtzeit analysieren, Anwendungen, die riesige Datenmengen für die Suche indizieren, und Anwendungen, die maschinelle Lernalgorithmen auf immer größeren Datensätzen trainieren – ohne Zweifel wird diese Cloud-native Revolution durch eine Kombination von Containern und Kubernetes angetrieben.
Ein Container ist eine Standardsoftwareeinheit, in der Code und alle seine Abhängigkeiten verpackt sind. Dadurch kann ein Container schnell und zuverlässig von einer Rechenumgebung in eine andere übertragen werden. Container erleichtern die Bereitstellung Cloud-basierter Anwendungen, da sie alle für die Ausführung erforderlichen Informationen in überschaubaren Paketen enthalten. Mit Containern lassen sich disaggregierte Anwendungen mit minimalem Overhead und der erforderlichen Flexibilität effizient ausführen. Kubernetes stellt die Orchestrierung bereit, mit der alle diese Anwendungsfragmente ausgeführt und bei Bedarf zu einer zusammengesetzten Anwendung aggregiert werden können.
Wie alles anfing – Monolithische Anwendungen
Eine monolithische Anwendung ist eine Anwendung, bei der alle Codeelemente (Benutzeroberfläche, Geschäftslogik und Datenzugriff) in einem eng gekoppelten System zusammengefasst sind. Manchmal ist das alles in einem einzigen Programm. In anderen Fällen handelt es sich um eine Reihe eng miteinander verbundener Dienste mit vielen gegenseitigen Abhängigkeiten, wie z. B. eine einzelne Oracle-Datenbank. Da es sich bei der gesamten Anwendung um ein einziges Programm oder ein eng gekoppeltes System handelt, muss bei der Aktualisierung auch nur einer einzigen Codezeile die gesamte Anwendung neu bereitgestellt werden. Das macht Aktualisierungen komplex und zeitaufwändig. Aufgrund der Unterbrechungen, die diese Nichtverfügbarkeit verursacht, werden diese Aktualisierungen selten – oft vierteljährlich oder jährlich – durchgeführt, und neue Funktionen müssen bis zur nächsten Version warten. Infolgedessen werden monolithische Anwendungen oft als langsam empfunden, wenn es darum geht, auf Benutzer- und Geschäftsanforderungen zu reagieren.
Einstieg in Microservices
Wann haben Sie das letzte Mal eine Wartungsmitteilung erhalten, zum Beispiel von Netflix? Ganz genau. Es gibt nie einen guten Zeitpunkt, um diese Dienste zu aktualisieren, weil sich immer jemand eine neue Sendung ansieht. Wenn es nie einen guten Zeitpunkt für ein Update gibt, ist es eigentlich immer der beste Zeitpunkt für ein Update. Das klingt kontraintuitiv. Aber um das Aktualisierungsproblem zu lösen, sollten Sie nach dem Prinzip der Microservices eine Anwendung in kleinere Teile aufteilen, die über APIs kommunizieren, wobei jeder Teil unabhängig von den anderen Teilen aktualisiert werden kann. Wenn Netflix beispielsweise seine Funktion zum Zurücksetzen von Passwörtern aktualisieren muss, braucht es nicht Millionen von Zuschauern offline zu schalten, wenn es sich um einen Microservice handelt, der unabhängig vom Rest der Streaming-Plattform aktualisiert werden kann.
Microservices und Container – eine perfekte Kombination
Microservices ermöglichen es IT-Teams, die von ihren Benutzern gewünschten Anwendungen einfacher zu erstellen und auszuführen. Viele der größten Verbraucher- und Geschäftsanwendungen werden heute als Microservices ausgeführt. Dies beweist, dass dieser Trend nicht nur für kleinere Unternehmen relevant ist, sondern auch für die größten und komplexesten Organisationen. In welcher Art von Umgebung sollte man sie ausführen? Container sind der perfekte Baustein für Microservices. Sie bieten eine konsistente, leichtgewichtige Umgebung, die die Anwendung vom Desktop des Entwicklers über Testsysteme bis hin zur endgültigen Bereitstellung auf dem Produktionssystem begleiten kann. Darüber hinaus können Container auf physischen oder virtuellen Maschinen ausgeführt werden, und sie lassen sich in Sekunden oder sogar Millisekunden starten, schneller als eine ganze VM.
Verpacken von Anwendungen mit deren Abhängigkeiten
Traditionell enthalten Softwarepakete den gesamten Code, der für die Ausführung der Anwendung auf einem bestimmten Betriebssystem wie Windows oder Linux erforderlich ist. Zum Ausführen einer Anwendung ist jedoch nicht nur der Anwendungscode erforderlich, sondern auch andere Anwendungen. Eine Anwendung zum Abrufen von Aktienkursen könnte beispielsweise eine Bibliothek verwenden, um Firmennamen in Tickersymbole umzuwandeln und umgekehrt. Diese Funktion ist zwar allgemein und nicht wertschöpfend, aber sie ist dennoch wichtig, damit ein Benutzer „Apple“ eingeben und die Aktie „AAPL“ erhalten kann. Die Bibliothek ist ein Beispiel für eine Abhängigkeit. Ohne dass die IT-Abteilung es weiß, kann jede Anwendung Hunderte solcher Abhängigkeiten haben.
Einer der Hauptgründe für die Beliebtheit von Containern ist die Tatsache, dass sie einen Mechanismus und ein Format zur Verfügung stellen, um den Anwendungscode mit seinen Abhängigkeiten so zu verpacken, dass es einfach ist, eine Anwendung in verschiedenen Umgebungen auszuführen. Damit wurde ein großes Problem für Entwickler gelöst, die ständig mit Kompatibilitätsproblemen zwischen ihren Entwicklungslaptops, Testumgebungen und der Produktionsumgebung zu kämpfen hatten. Durch die Verwendung von Containern zum Verpacken ihrer Anwendungen konnten sie „einmal programmieren und überall ausführen“, was die Anwendungsbereitstellung erheblich beschleunigte.
Die Komplexität der Verwaltung von mehreren Containern
Da moderne Anwendungen aus mehreren Microservices bestehen, sind sie oft auch aus mehreren Containern zusammengesetzt. Dadurch lassen sich ganze Anwendungen leicht in mehreren Umgebungen ausführen, aber es stellt sich auch die Frage, wie man den Überblick über all diese Container behält und sie verwaltet. Software-Ingenieure und die Unternehmen, für die sie arbeiten, versuchten herauszufinden, wie man diese Container „monetarisieren“ kann. Schließlich verfügen Entwickler in der Regel nicht über große Budgets, mit denen sie arbeiten können. Die Verwaltung – oder Orchestrierung – all dieser Container wurde jedoch schon früh als notwendige und lukrative Erweiterung der Container-Revolution angesehen. Im Juni 2014 veröffentlichte Google Kubernetes als Open-Source-Projekt und nahm als eines der ersten Unternehmen die Herausforderungen der Containerverwaltung an.
Warum ein modernes Datenerlebnis erforderlich ist
Was die Herausforderungen angeht, so war die erste Generation von Cloud-nativen Anwendungen zustandslos konzipiert – mit Containern, die die Anwendungsarbeit erledigten, aber keine dauerhaften Daten in zugehörigen Volumes speichern mussten. Mit der zunehmenden Nutzung von Containern entwickeln Entwickler zunehmend zustandsabhängige Anwendungen innerhalb von Containern – Anwendungen, die Daten in einem Volume speichern müssen, das persistiert und aufbewahrt werden muss.
An dieser Stelle wird die Welt des Storage zu einer Herausforderung und ein modernes Datenerlebnis ist erforderlich, da die Flexibilität und Offenheit von Containern zu Hürden und Engpässen auf der Storage-Ebene führt. Einfache Speicherfunktionen, die wir im traditionellen Anwendungsstack seit Jahren als selbstverständlich erachten (Hochverfügbarkeit, Disaster Recovery, Backup, Verschlüsselung), werden in der Containerwelt zur Herausforderung. Schlimmer noch: Oft entwickelt jede Anwendung ihre eigene Speicherstrategie, was es unmöglich macht, Standards und Datenkonformität im gesamten Unternehmen durchzusetzen.
Bereitstellung auf Abruf
Als Best Practice empfehlen wir, eine Lösung zu wählen, die Kubernetes-native Datendienste bereitstellt, die sowohl für Cloud-native als auch für herkömmliche Anwendungen erforderlich sind (da diese herkömmlichen Anwendungen in absehbarer Zeit nicht verschwinden werden). Dies bedeutet die Bereitstellung von Block-, Datei- und Objektspeicherdiensten in verschiedenen Leistungsklassen, die je nach Bedarf von Kubernetes bereitgestellt werden. Das bedeutet sofortigen Datenzugriff, Schutz bei allen Arten von Ausfällen, die Möglichkeit, Daten zwischen Clouds und sogar zum/vom Edge zu mobilisieren, sowie robuste Sicherheit – egal, wo eine Anwendung unterwegs ist.
Die Zukunft von Kubernetes
Heute haben wir verstanden, warum Microservices die beste moderne Architektur für die Anwendungsentwicklung sind, warum Container der perfekte Baustein für Microservices sind und warum wir Kubernetes brauchen, sobald die Zahl der Container explodiert. Aber die Geschichte wird hier nicht enden. Kubernetes wird zunehmend für die Verwaltung von Anwendungen eingesetzt, die nicht in Containern, sondern nur in Komponenten vorliegen. Solange die Anwendung automatisierbar ist und Konfiguration und Speicherung von der Berechnung getrennt sind, kann Kubernetes helfen. Auch wenn die Containerisierung höchstwahrscheinlich weitergehen wird, werden wir zunehmend Unternehmen sehen, die Kubernetes ohne Container für einige Anwendungen einsetzen.
Eine wirklich datengesteuerte Organisation
In den vier Teilen dieser Serie haben wir die Schlüsselkriterien für eine datengesteuerte Organisation behandelt. Dazu gehörten die Nutzung von echtem STaaS, der Schutz von Daten vor Ransomware und die Wiederherstellung nach einem Angriff, die Nutzung der Cloud und die Verwaltung von Containern durch Kubernetes. Sobald alle vier Elemente vorhanden sind, können Sie sich beruhigt zurücklehnen, denn Sie haben die “Modern Data Experience” erreicht, die Sie jetzt und in Zukunft unterstützen wird, auch wenn die Technologie weiter voranschreitet.