Cloud Native – was ist das?
Oft wird Cloud Native lediglich als Sammelbegriff für verschiedene Tools verstanden, die auf den Prinzipien des Cloud Computing aufbauen. Doch mit Cloud Native wird ein komplettes Architekturkonzept beschrieben.
Damit ist der Begriff eher als eine Philosophie zu verstehen, die einen neuen Weg darstellt Software zu bauen, ähnlich der agilen Softwareentwicklung oder dem Waterfall-Modell. Konkret beschreibt Cloud Native eine Herangehensweise und einen ganzheitlichen Ansatz, Anwendungen vollständig in der Cloud zu entwickeln und zu betreiben.
Maßgeblich an der Entwicklung des Begriffs beteiligt war die “Cloud Native Computing Foundation” (CNCF), eine Initiative der Linux Foundation und Google, mit dem Ziel, Cloud Computing, Microservices und Containervirtualisierung zu fördern. Projekte können sich bewerben und durchlaufen, mit entsprechender Förderung, verschiedene Stadien. Sie beginnen in der Regel mit dem Status Sandboxed, gehen dann über in den Incubating und wenn sie sich für geschäftskritische Anwendungsfälle eignen, werden sie als Graduated anerkannt.
Bei Cloud Native als Konzept geht es darum, wie Anwendungen erstellt werden und nicht an welchem Ort. Statt On-Premise Strukturen zu nutzen, baut man beim Anwendungsdesign von vornherein auf den Stärken der Cloud auf, wie Skalierbarkeit und Flexibilität. Dazu setzt man auf auf Containervirtualisierung und Microservices und kombiniert diese Konzepte mit den Methoden der DevOps-Paradigmen.
Bessere Zusammenarbeit zwischen Entwicklung und Operations
Im Zusammenspiel ergänzen sich beide Bereiche und verbessern die Zusammenarbeit zwischen Entwicklern und Operations. Das führt dazu, dass sie gemeinsam optimale Lösungen für den Kunden entwickeln können. Einzelne Features lassen sich maßgeschneidert entwickeln und können über automatisierte Prozesse schnell und kontinuierlich zum Kunden gebracht werden (Continuous Delivery), wo sie direktes Feedback erzeugen. Produkte können dadurch schneller und genauer an die Bedürfnisse des Kunden angepasst werden.
Mit Cloud Native die Strategie flexibilisieren
Dazu kommen kulturelle Veränderungen, wie die Delegation von Verantwortlichkeiten und das Verfolgen einer dynamischeren Strategie.
Damit können mit Cloud Native starre Prozesse, wie sie in Waterfall-Projektmanagement häufig vorzufinden sind, aufgebrochen werden. Statt umfangreiche Projekte umzusetzen, die schon in der Planung erhebliche Ressourcen verbrauchen, deren Erfolg ungewiss ist, und schlimmstenfalls mit hohen Verlusten einhergehen, setzt man bei Cloud Native auf kleine Schritte in kurzen Zeitabständen, mit schnellen Feedback-Schleifen. So lassen sich Produkte kontinuierlich entwickeln und Fehlentwicklungen kann schnell gegengesteuert werden.
Von Containervirtualisierung über Microservices hin zu CI/CD
Konkret umfasst Cloud Native fünf Bereiche, die sich gegenseitig ergänzen und – konsequent umgesetzt – die Entwicklung moderner Anwendungen erlauben, die vollumfänglich von den Vorteilen des Cloud Computings profitieren:
- Dynamisches Management cloudbasierter Server (IaaS mit API) und immutable Infrastruktur
- Microservices
- Service Mesh
- Automatisierung (CI/CD)
- Orchestrierung
So aufgebaute Anwendungen sind in der Regel ausfallsicherer, skalierbarer und messbarer als solche, die für traditionelle Infrastruktur entwickelt werden.
Herausforderungen cloudbasierter Anwendungen
Anwendungen in der Cloud sind zwar flexibler und skalierbarer und lassen damit meist profitabler betreiben und zielgerichteter entwickeln. Doch bringt der Betrieb in einem Netzwerk auch einige Herausforderungen mit sich:
- Latenz: Anwendungen, die über ein Netzwerk kommunizieren, müssen stets die Latenz mit in Betracht ziehen. Viele Netzwerkaufrufe und gesprächige Services sollten vermieden werden, möchte man eine performante Applikation anbieten.
- Netzwerkverlässlichkeit: Software, die in der Cloud angeboten wird, sollte so designt sein, dass sie Netzwerkausfälle erwartet und damit umgehen kann.
- Netzwerkkosten: Datenverkehr ist nicht immer frei und verursacht in der Regel Kosten.
Best Practices für die Entwicklung von Cloud Native Anwendungen
Um diesen Herausforderungen zu begegnen, sollte in der Entwicklung cloudbasierter Anwendungen besonderer Wert auf Operabilität, Resilienz und Beobachtbarkeit der Services gelegt werden. Um diese Eigenschaften zu implementieren, existieren folgende Wege:
Gesundheitsstatus: Die Angabe zum Status einer Anwendung sollte in der Anwendung selbst codiert werden. Eine derart konzipierte Applikation lässt sich leichter verwalten und automatisieren.
Telemetrie: Die Telemetrie gibt Auskunft über die KPIs, die eine Anwendung erreichen soll. Genau wie der Status sollten diese von der Anwendung selbst übermittelt werden. Damit lässt sich die Performanz der Anwendung messen und gegebenfalls anpassen.
Resilienz: Cloudbasierte Anwendungen sollten fehlertolerant (Design for Failure) sein und das Konzept der “Graceful Degradation” (würdevolle Verschlechterung) unterstützen.
- Fehlertolerant bedeutet, das die Anwendung auf den Eintritt von Fehlern vorbereitet ist und damit umgehen kann. Im Falle eines Fehlers passt sich die Anwendung an die neue Situation an.
- Mit Graceful Degradation ist gemeint, dass die Anwendung im Falle von Fehlern immer noch eine Antwort gibt und funktioniert. Wenn auch nicht mehr optimal, so reagiert sie trotzdem noch, und übermittelt bspw. eine einfachere Antwort, die nicht so viel Last auf das Netzwerk ausübt, wie die normale Reaktion.
So entwickelte Anwendungen mindern die Herausforderungen, die verteilte Systeme mit sich bringen und profitieren gleichzeitig maximal von der Cloud.
Damit liefert Cloud Native einen Rahmen und Leitlinien, mit denen sich für Unternehmen der Einstieg in die Cloud leichter umsetzen lässt.