Cloud-natives Computing macht sich viele State-of-the-Art-Entwicklungstechniken wie Microservices, Container, CI/CD, Agile und Devops zunutze. Lesen Sie, was Sie über diesen Ansatz, die Cloud-Native-Landschaft sowie Vor- und Nachteile wissen müssen.
Cloud Native - Definition
Cloud Native ist ein moderner Ansatz, um Softwareanwendungen zu entwickeln. Das Modell ist speziell auf Cloud-Infrastrukturen zugeschnitten und nutzt die Flexibilität, Skalierbarkeit und Ausfallsicherheit der Cloud. Cloud Native umfasst die verschiedenen Tools und Techniken, die von Softwareentwicklern heute verwendet werden, um Anwendungen für die Public Cloud zu erstellen. Im Gegensatz dazu stehen traditionelle Architekturen und Entwicklungsansätze (Wasserfall), die für lokale Rechenzentren geeignet sind.
Der Cloud-Native-Ansatz wurde von einer Gruppe von Unternehmen entwickelt, für die das Attribut "in der Cloud geboren" gilt. Dazu gehören etwa die Streaming-Giganten Netflix und Spotify, das Fahrdienstunternehmen Uber oder die Buchungsplattform Airbnb. Der Cloud-Native-Ansatz wurde inzwischen auch von anderen Unternehmen übernommen, die ähnliche digitale Flexibilität und disruptive Wettbewerbsvorteile anstreben.
Die Cloud Native Computing Foundation (CNCF) definiert Cloud Native etwas enger und fokussiert sich dabei auf die Containerisierung von Anwendungen, die in Microservices aufgeteilt und in leichtgewichtige Container verpackt werden, um so auf einer Vielzahl von Server- und Betriebssystemen bereitgestellt und orchestriert zu werden: "Cloud-Native-Technologien ermöglichen Unternehmen, skalierbare Anwendungen in modernen, dynamischen Umgebungen wie öffentlichen, privaten und hybriden Clouds zu entwickeln und auszuliefern."
Bei der Entwicklung von Cloud-nativen Anwendungen werden in der Regel folgende Elemente mit Techniken wie DevOps oder Agile kombiniert:
Microservices,
Container,
unveränderliche Infrastrukturen,
deklarative APIs und
Continuous-Delivery-Technologien.
Cloud Native - Ökosystem
Dieser Wandel innerhalb der Softwareentwicklung hat zu einer neuen Landschaft mit überwiegend quelloffenen Tools geführt. Die CNCF bietet eine interaktive Grafik dieses Ökosystems:
Beim Cloud Native Computing gibt es vier Ebenen, die es zu verstehen gilt:
Die Ebene der Anwendungsdefinition und -entwicklung: Die oberste Schicht des Cloud-Native-Stacks konzentriert sich auf die Tools, die von den Entwicklern verwendet werden, um Anwendungen zu erstellen. Dazu gehören etwa Datenbanken, Messaging-Systeme, Container-Images und CI/CD Pipelines.
Die Bereitstellungsschicht: Sie umfasst alles, was erforderlich ist, um die Umgebung in der die Applikation läuft, zu erstellen und abzusichern. In der Cloud-Native-Welt bedeutet das in der Regel, dass die Infrastruktur wie Code behandelt wird; dass Images in einem Repository gespeichert werden; dass Builds automatisiert und die Anforderungen an die Anwendungssicherheit durch Schwachstellen-Scans, Schlüssel- und Richtlinienverwaltung sowie Authentifizierungstools erfüllt werden.
Die Laufzeitschicht: Diese Schicht umfasst alles, was mit der Ausführung einer Cloud-Native-Anwendung zusammenhängt, wie beispielsweise die Container-Runtime sowie Speicher und Netzwerke.
Die Orchestrierungs- und Verwaltungsschicht: Sie vereint die Tools, die für die Bereitstellung, Verwaltung und Skalierung von containerisierten Anwendungen erforderlich sind - einschließlich Orchestrierung und Scheduling. In den meisten Fällen bedeutet das: Kubernetes sowie Service Discovery, Service Proxy, API-Gateway und Service Mesh.
Außerhalb dieser Schichten ist es außerdem wichtig, ein funktionierendes Monitoring zu implementieren, um all diese Dienste effektiv überwachen zu können. Manche Unternehmen entscheiden sich auch dafür, ihren Cloud-Native-Stack auf einer internen Self-Service-Entwicklerplattform zusammenzuführen oder wenden sich an einen PaaS-Anbieter, um Entwicklern die Einführung zu erleichtern.
In nachfolgendem Video erfahren Sie von Craig McLuckie, Gründer und CEO des Kubernetes-Spezialisten Heptio, wie der Cloud-Native-Ansatz die Technologiestruktur innerhalb der Unternehmen verändert:
Cloud Native vs. On-Premises
Die Entwicklung von Cloud-nativen Anwendungen erfordert eine völlig andere Architektur als herkömmliche Unternehmensanwendungen, die in der Regel in einem Rechenzentrum vor Ort ausgeführt werden. Das sind die wichtigsten Unterschiede und die Vorteile, die Cloud Native gegenüber herkömmlichen Anwendungsentwicklungsmodellen bietet:
Programmiersprachen: Lokale Anwendungen, die für die Ausführung auf Unternehmensservern geschrieben werden, sind in der Regel in traditionellen Sprachen wie C/C++, C# und Enterprise Java geschrieben. Cloud-native Anwendungen werden eher in einer webzentrierten Sprache wie HTML, CSS, Java, JavaScript, .NET, Go, Node.js, PHP, Python oder Ruby geschrieben. Moderne Programmiersprachen und Plattformen einzusetzen, kann Ihrem Unternehmen auch dabei helfen, der Konkurrenz im "War for Talents" einen Schritt voraus zu sein.
Aktualisierbarkeit: Cloud-Native-Anwendungen werden so entwickelt, dass sie hochverfügbar, belastbar und regelmäßig aktualisierbar sind. On-Premises-Applikationen werden hingegen in der Regel ein- oder zweimal pro Jahr nach der Wasserfall-Methode aktualisiert. Die Flexibilität, die Cloud Native an dieser Stelle bietet, kann einerseits zur Produktivität der Softwareentwickler beitragen, andererseits auch zur Kundenzufriedenheit beziehungsweise Customer Experience.
Elastizität: Cloud-native Anwendungen nutzen in der Regel die Vorteile der Elastizität der Cloud, indem sie den Verbrauch nach Bedarf anpassen. Im Fall einer On-Premises-Anwendung würde die physische Bereitstellung zusätzliche Infrastruktur erfordern, um effektiv skalieren zu können. Das hat auch Auswirkungen auf die Kosten: In der Cloud bezahlen Sie nur für das, was Sie nutzen.
Multimandantenfähigkeit: Eine Cloud-Native-Anwendung arbeitet problemlos in einem virtualisierten Raum und teilt Ressourcen mit anderen Anwendungen in einem mandantenfähigen Modell. Das kann der Softwareentwicklung einen Effizienzschub verleihen.
Ausfallzeiten: Aufgrund ihrer Größe und dezentralen Natur bietet die Cloud eine größere Redundanz. Indem der Datenverkehr schnell in eine andere Region umgeleitet wird, können Ausfälle besser gehändelt und kostspielige Ausfallzeiten vermieden werden.
Automatisierung: Cloud Native eröffnet eine Fülle von Automatisierungsmöglichkeiten. So müssen Sie im Idealfall nur einmal entwickeln und können sich dann anderen, dringenderen Herausforderungen widmen.
Zustandslos: Cloud-native Anwendungen sind in der Regel zustandslos, das heißt sie übertragen gespeicherte Daten nicht von einer Sitzung zur nächsten. Dieses Modell ermöglicht es, einfacher über mehrere Server hinweg zu skalieren, einfacher zwischenzuspeichern, um die Leistung zu steigern und weniger Speicher zu beanspruchen. Darüber hinaus trägt das auch dazu bei, den gefürchteten Vendor-Lock-In zu vermeiden, da Sie mit Cloud-native-Anwendungen nicht an eine bestimmte Infrastruktur gebunden sind.
Cloud Native - Herausforderungen
Der Versuch, eine bestehende On-Premises-Anwendung im Lift-and-Shift-Verfahren ohne architektonische Änderungen auf Cloud-Native umzustellen, funktioniert nicht. Weitere Herausforderungen für Unternehmen, die Cloud Native werden wollen, sind:
die Suche nach dem richtigen Qualifikationsmix,
die Anpassung an ein Cloud-zentriertes Sicherheitsmodell,
die Bewältigung des sich ändernden Kostenprofils einer Cloud-Umgebung.
Entwickler sollten darauf achten, Cloud Native als Organisationsprinzip zu übernehmen, indem sie entweder neue Anwendungen für die Cloud entwickeln oder bestehende, monolithische Applikationen in Microservices auflösen, damit sie besser für eine Cloud-Umgebung geeignet sind. Das erfordert einen umfassenden Mentalitätswandel: Weg von der traditionellen Wasserfall-Entwicklung hin zu agileren Entwicklungsprinzipien wie Minimum Viable Product, Automatisierung, multivariates Testing, Observability und dem Devops-Modell.
Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.com.