Definition

Native Cloud-Anwendung

Eine Cloud-native Anwendung ist ein Programm, das für eine Cloud-Computing-Architektur konzipiert ist. Diese Anwendungen laufen in der Cloud und sind so konzipiert, dass sie die inhärenten Merkmale eines Cloud-Computing-Softwarebereitstellungsmodells nutzen. Eine native Anwendung ist eine Software, die für die Verwendung auf einer bestimmten Plattform oder einem bestimmten Gerät entwickelt wurde.

Cloud-native Anwendungen verwenden meistens eine Microservice-Architektur. Diese Architektur weist jedem von der Anwendung genutzten Dienst effizient Ressourcen zu und macht die Anwendung flexibel und anpassungsfähig an eine Cloud-Architektur.

DevOps-Teams setzen gerne auf Cloud-native Anwendungen wegen ihrer Fähigkeit, die geschäftliche Agilität zu unterstützen. Sie werden anders konzipiert, entwickelt und bereitgestellt als herkömmliche monolithische Cloud-basierte Anwendungen. Cloud-native Anwendungen zeichnen sich durch kürzere Anwendungslebenszyklen aus und sind äußerst belastbar, verwaltbar und transparent.

Grundlagen der Cloud-nativen Anwendungsarchitektur

Cloud-native Anwendungen nutzen die Vorteile von Cloud-Computing-Frameworks und deren lose gekoppelter Cloud-Dienste. Da sich nicht alle Dienste auf demselben Server befinden, müssen die Entwickler von Cloud-nativen Anwendungen mit softwarebasierten Architekturen ein Netzwerk zwischen den Rechnern aufbauen. Die Dienste befinden sich auf verschiedenen Servern und werden an unterschiedlichen Standorten ausgeführt. Diese Architektur ermöglicht eine horizontale Skalierung der Anwendungen.

Da die Infrastruktur, die eine Cloud-native Anwendung unterstützt, sich nicht On-Premises befindet, müssen diese Anwendungen gleichzeitig mit Redundanz konzipiert werden. So kann die Anwendung einen Geräteausfall überstehen und IP-Adressen automatisch neu zuordnen.

Merkmale einer Cloud-nativen Anwendung

Microservices, die Teil der Cloud-nativen Anwendungsarchitektur sind, werden in Containern verpackt, die über APIs verbunden sind und kommunizieren. Für die Verwaltung all dieser Komponenten verwenden IT-Teams Orchestrierungs-Tools.

Hier sind einige der wichtigsten Eigenschaften Cloud-nativer Anwendungen:

  • Microservices teilen eine Anwendung in eine Reihe unabhängiger Dienste oder Module auf. Jeder Dienst referenziert seine eigenen Daten und unterstützt ein bestimmtes Geschäftsziel. Diese Module kommunizieren über Anwendungsprogrammschnittstellen (APIs) miteinander.
  • Container isolieren Anwendung logisch voneinander, so dass sie unabhängig von physischen Ressourcen laufen. Container verhindern, dass sich Microservices gegenseitig stören und, dass Anwendungen die gemeinsam genutzten Ressourcen des Hosts überlasten. Außerdem ermöglichen sie mehrere Instanzen desselben Dienstes parallel auszuführen.
  • API-basiert. APIs verbinden Microservices und Container und bieten gleichzeitig vereinfachte Wartung und Sicherheit. Sie ermöglichen die Kommunikation zwischen Microservices und fungieren als Bindeglied zwischen den lose gekoppelten Diensten.
  • Dynamisch orchestriert. Container-Orchestrierungs-Tools werden zur Verwaltung der Lebenszyklen von Containern eingesetzt, die sehr komplex werden können. Container-Orchestrierungstools übernehmen das Ressourcenmanagement, den Lastausgleich, die Planung von Neustarts nach einem internen Ausfall sowie die Bereitstellung und den Einsatz von Containern auf Server-Cluster-Knoten.

Cloud-native versus Cloud-basierte Anwendungen

Die Begriffe Cloud-Native und Cloud-basierte Anwendungen werden oft verwechselt. Obwohl beide auf Public-, Private- oder Hybrid-Cloud-Infrastrukturen ausgeführt werden, unterscheiden sie sich im Design wie folgt:

Cloud-basierte Anwendungen

Sie sind für die Nutzung der Cloud und von Cloud-Plattformen konzipiert. Cloud-basierte Anwendungen können eine dynamische Cloud-Infrastruktur nutzen, verwenden aber nicht alle Vorteile der inhärenten Eigenschaften der Cloud.

Cloud-native Anwendungen

Diese werden speziell für die Cloud entwickelt. Die Entwicklung Cloud-nativer Anwendungen ist für die inhärenten Merkmale der Cloud optimiert und kann an die dynamische Umgebung der Cloud angepasst werden.

Grafische Darstellung der Unterschiede zwischen Monolithisch und Microservices
Abbildung 1: Cloud-native Anwendungen verwenden Microservices, um Teile der Anwendung und die Daten, auf die sie angewiesen sind, zu isolieren. Dies unterscheidet sich von der traditionellen monolithischen Architektur, die eine gemeinsame Nutzung von Daten durch alle Dienste ermöglicht.

Vorteile von Cloud-nativen Anwendungen

Cloud-native Anwendungen sind so konzipiert, dass sie die Vorteile der Geschwindigkeit und Effizienz der Cloud nutzen. Zu den Vorteilen ihrer Nutzung gehören

  • Kostengünstig. Rechen- und Speicherressourcen lassen sich je nach Bedarf skalieren. Dadurch entfallen Kosten für überdimensionierte Hardware und Lastausgleich. Virtuelle Server können zu Testzwecken einfach hinzugefügt werden, und Cloud-native Anwendungen können schnell in Betrieb genommen werden. Container können die Zahl der auf einem Host ausgeführten Microservices maximieren und so Zeit, Ressourcen und Geld zu sparen.
  • Unabhängig skalierbar. Jeder Microservice ist logisch isoliert und kann unabhängig skaliert werden. Wenn ein Microservice für die Skalierung geändert wird, sind die anderen davon nicht betroffen. Sollten einige Komponenten einer Anwendung schneller aktualisiert werden müssen als andere, kann eine Cloud-native Architektur dies berücksichtigen.
  • Portabilität. Cloud-native Anwendungen sind anbieterneutral und verwenden Container, um Microservices zwischen den Infrastrukturen verschiedener Anbieter zu portieren, wodurch eine Anbieterbindung vermieden wird.
  • Zuverlässig. Wenn ein Microservice ausfällt, hat dies keine Auswirkungen auf benachbarte Services, da diese Cloud-basierten Anwendungen Container verwenden.
  • Einfach zu verwalten. Cloud-native Anwendungen nutzen die Automatisierung zur Bereitstellung von Anwendungsfunktionen und Updates. Entwickler können alle Microservices und Komponenten verfolgen, während sie aktualisiert werden. Da die Anwendungen in kleinere Dienste unterteilt sind, kann sich ein Entwicklungsteam auf einen bestimmten Microservice konzentrieren und muss sich keine Gedanken darüber machen, wie dieser mit anderen Microservices interagieren wird.
  • Sichtbarkeit. Da eine Microservice-Architektur die Dienste isoliert, ist es für Entwicklungsteams einfacher, Anwendungen zu untersuchen und zu lernen, wie sie zusammen funktionieren.

Bewährte Verfahren für die Entwicklung von Cloud-nativen Anwendungen

Bewährte Verfahren für die Entwicklung Cloud-nativer Anwendungen basieren auf dem DevOps-Prinzip der Operational Excellence. Für die Cloud-native Architektur gibt es keine eindeutigen Regeln, und Unternehmen werden die Entwicklung je nach dem zu lösenden Geschäftsproblem und der verwendeten Software unterschiedlich angehen.

Bei allen Cloud-nativen Anwendungsdesigns sollte berücksichtigt werden, wie die App entwickelt wird, wie die Leistung gemessen wird und wie die Teams die kontinuierliche Verbesserung während des Lebenszyklus der App fördern. Hier sind die fünf Teile des Designs:

  • Automatisieren. Automatisierung ermöglicht die konsistente Bereitstellung von Cloud-Anwendungsumgebungen über mehrere Cloud-Anbieter hinweg. Bei der Automatisierung dient Infrastructure as Code (IaC) dazu, Änderungen in einem Quellcode-Repository zu verfolgen.
  • Überwachen. Teams sollten sowohl die Entwicklungsumgebung als auch die Nutzung der Anwendung überwachen. Die Umgebung und die Anwendung sollten es einfach machen, alles zu überwachen, von der unterstützenden Infrastruktur bis zur Anwendung.
  • Dokumentieren. Viele Teams sind an der Entwicklung von Cloud-nativen Anwendungen beteiligt und haben nur begrenzten Einblick in die Arbeit anderer Teams. Dokumentation ist wichtig, um Änderungen zu verfolgen und zu sehen, wie jedes Team zur Anwendung beiträgt.
  • Inkrementelle Änderungen vornehmen. Alle Änderungen, die an der Anwendung oder der zugrunde liegenden Architektur vorgenommen werden, sollten schrittweise erfolgen und reversibel sein. So können die Teams aus den Änderungen lernen und keine dauerhaften Fehler machen. Mit IaC können die Entwickler Änderungen in einem Quellcode-Repository
  • Fehler einplanen. Prozesse sollten für den Fall konzipiert werden, dass in einer Cloud-Umgebung etwas schief geht – weil das so gut wie unvermeidlich ist. Das bedeutet, dass Test-Frameworks implementiert werden müssen, um Fehler zu simulieren und aus ihnen zu lernen.

Tools für die Entwicklung von Cloud-nativen Anwendungen

Für jeden Entwicklungsprozess einer Cloud-nativen Anwendung benötigen Teams mehrere Software-Tools. Zusammen bilden sie einen Entwicklungs-Stack.

Hier ist die Software, die in einem Cloud-nativen Entwicklungs-Stack zu finden ist:

  • Docker. Die Docker-Plattform ist Open Source. Sie erstellt, implementiert und verwaltet virtualisierte Anwendungscontainer mit einem gemeinsamen Betriebssystems (OS). Sie isoliert Ressourcen, so dass mehrere Container dasselbe Betriebssystem konkurrenzlos nutzen.
  • Kubernetes. Die Kubernetes-Plattform verwaltet und orchestriert Linux-Container und bestimmt, wie und wo die Container laufen.
  • Terraform. Terraform wurde für die Implementierung von IaC entwickelt. Es definiert Ressourcen als Code und wendet Versionskontrolle an, so dass die Benutzer sehen, wann und wo Ressourcen geändert wurden.
  • GitLab CI/CD. Mit dieser CI/CD-Software (Continuous Integration/Continuous Development) automatisieren Benutzer Softwaretests und -bereitstellung. GitLab unterstützt Sicherheitsanalysen, statische Analysen und Unit-Test.
  • js. Diese JavaScript-Laufzeitumgebung hilft beim Erstellen von Echtzeitanwendungen wie Chats, Newsfeeds und anderen Microservices. Node.js kann zum Beispiel virtuelle Server erstellen und die Routen definieren, die Microservices mit externen APIs verbinden.

Die Zukunft von Cloud-nativen Anwendungen

Cloud-native Anwendungen haben sich in den letzten Jahren stark verbreitet, und gelten als Zukunftstechnologie. Die Cloud Native Computing Foundation schätzt, dass es im Jahr 2020 mindestens 6,5 Millionen Cloud-native Entwickler geben wird, verglichen mit 4,7 Millionen im Jahr 2019.

Cloud-native Anwendungen lösen einige der mit dem Cloud Computing verbundenen Probleme. Dennoch birgt die Migration in die Cloud zur Verbesserung der betrieblichen Effizienz eine Reihe von Herausforderungen.

Diese Definition wurde zuletzt im Mai 2022 aktualisiert

Erfahren Sie mehr über Cloud Computing