Von klassischen Enterprise Applikationen zu Cloud-Native Anwendungen

Mit meinem Team bei der EXXETA AG arbeite ich unter anderem an Enterprise Software-Lösungen für die Cloud. Moderne Web-Anwendungen und Cloud-Transformationen bilden unseren Tätigkeitsschwerpunkt. Dabei geht es nicht einfach darum, bestehende Applikationen in der Cloud auszuführen. Vielmehr sind maßgeschneiderte Software-Architekturen, die passende Organisation und eine entsprechende Kultur gefordert. Ein Cloud-Native Ansatz.

Was bedeutet Cloud-Native konkret? Die Cloud Native Computing Foundation (www.cncf.io) beantwortet diese Frage aus der technischen Perspektive folgendermaßen: Containerisierung, dynamische Orchestrierung, Microservices. Dies bedeutet zum einen, dass alle relevanten Komponenten in einem Container, z. B. Docker, gekapselt werden. Zum anderen werden die notwendige Verwaltung und das Management komplexer Container-Landschaften durch Orchestrierungs-Lösungen wie Kubernetes übernommen. Die Anwendung selbst setzt sich in diesem Szenario aus einer Vielzahl von Microservices zusammen.

Cloud-Native bedeutet darüber hinaus auch die Abkehr von hierarchischen Organisationen mit Projektmanager und Fachspezialisten. Projekte werden durch crossfunktionale Teams mit starkem Fokus auf ein Produkt und dessen Nutzen umgesetzt. Silos wie Software Entwicklung, System Administration, Qualitätssicherung, Betrieb, Releasemanagement oder Projektmanagement werden aufgelöst und durch neue Modelle der Zusammenarbeit wie z. B. DevOps ersetzt.

Die kontinuierliche Auslieferung neuer Funktionalität an Kunden und Nutzer ist ein weiterer Aspekt von Cloud-Native. Dabei sind auf einer technischen Ebene Prozesse und Werkzeuge für Continous Integration und Continous Delivery in den Entwicklungsteams bereits zum Standard geworden. Cloud-Native bedeutet allerdings mehr. Eine Organisation muss auch tatsächlich darauf ausgerichtet sein, neue Funktionalität direkt und auf Ebene von Business-Funktionen oder Microservices produktiv zu nehmen.

Grundsätzlich stellt sich die Frage, warum wir überhaupt einen Cloud-Native Ansatz verfolgen sollten. Was ist unsere Motivation?

Aktuell herrscht weitestgehend Konsens darüber, dass Unternehmen, die sehr schnell auf Kundenbedürfnisse reagieren können, erfolgreicher sein werden als andere. Geschwindigkeit ist entscheidend. Bei vielen Enterprise Applikationen wird ein Releasezyklus allerdings noch immer in Wochen oder Monaten geplant. Das Risiko für ein einzelnes Release ist sehr hoch, Änderungen der Funktionalität sind teuer und aufwendig. Bei einem Cloud-Native Ansatz können Deployments im Gegensatz dazu mehrmals täglich, stündlich oder minütlich durchgeführt werden. Änderungen lassen sich gewissermaßen direkt umsetzen. Das Risiko ein „Release“ zu veröffentlichen reduziert sich damit drastisch. Auch können bei einer Cloud-Native Anwendung auf Basis von Microservices einzelne Business-Funktionen schnell und unabhängig voneinander deployed werden.

Schnell zu sein alleine ist natürlich nicht ausreichend. Ebenso ist es erforderlich, dass das erstellte System die notwendige Zuverlässigkeit aufweist. Klassische Enterprise Applikationen werden oft in einer Designphase vor Entwicklungsstart entworfen, durch umfangreiche Architektur Reviews überprüft, detailliert dokumentiert und langlaufenden Regressionstests unterzogen. Ziel ist immer, die Zahl der Fehlerfälle in Produktion zu verringern. Leider oft wenig erfolgreich.  Durch die Verwendung von Microservices sind unter anderem beim Auftreten eines Fehlers in einer Cloud Native Applikation nur kleine Anwendungsbereiche betroffen. Im Idealfall eben nur der entsprechende Microservice. Um kaskadierende Fehler zu vermeiden, werden Microservices fehlertolerant ausgelegt und lose gekoppelt. Die transparente Überwachung der Anwendung ermöglicht meist auch eine automatisierte Wiederherstellung im Fehlerfall. Nicht zuletzt ist die Einführung neuer Technologien ohne größeres Risiko für das Gesamtsystem möglich, da nur einzelne Services betroffen sind.

Auch die Wirtschaftlichkeit und Effizienz eines Systems sind wichtige Faktoren. In Bezug auf die Skalierbarkeit wird bei klassischen Enterprise Applikationen in vielen Fällen der Worst Case betrachtet. Die dabei gestellte Frage lautet: Welche maximale Last kann unter Umständen auftreten. Entsprechend werden Server und Infrastruktur bemessen. Die meiste Zeit bleiben diese Ressourcen allerdings ungenutzt. Was wenig effizient und teuer ist. Cloud-Native Anwendungen hingegen skalieren horizontal und nutzen nur die aktuell notwendigen Ressourcen. Verwaltet und bereitgestellt durch den Cloud-Provider kann diese Auslagerung die Investitionskosten für Unternehmen erheblich reduzieren. Die horizontale Skalierung einer Cloud-Native Anwendung wird durch den auf Microservices basierenden Architekturansatz optimal unterstützt.

Nicht zuletzt lautet die Prämisse für eine Cloud-Native Anwendung Mobile-First. Enterprise Applikationen wurden noch vor wenigen Jahren für den typischen Fall eines Desktop-Benutzers entworfen. Dies hat sich grundlegend geändert. Es gibt heute eine Vielzahl von Endgeräten und Zielplattformen, der Desktop spielt eine immer geringere Rolle. Mobile Geräte wie Smartphones und Tablets bilden längst die große Mehrheit und sind für den Benutzer immer verfügbar. Dies macht sich im Nutzerverhalten deutlich bemerkbar und hat Einfluss auf die notwendige Systemarchitektur. Einzelne Business-Funktionen werden viel häufiger und zu jedem denkbaren Zeitpunkt genutzt. In diesem Zusammenhang bedeutet Mobile-First natürlich mehr als nur die optimierte Darstellung auf einem kleineren Bildschirm.

Neben den technischen Aspekten ist für die Entwicklung einer Cloud-Native Anwendung also ein ganzheitlicher Ansatz entscheidend. Sowohl Organisation als auch Kultur spielen eine große Rolle. Wie Eingangs erwähnt wird Software heute zwar mit Hilfe agiler Methoden entwickelt und durch Continous Delivery Prozesse automatisiert „ausgeliefert“. Häufig existiert dann allerdings ein organisatorischer Bruch in Form klassischer Test- oder Releaseprozesse. Den Fokus gilt es daher auf Kunden und Nutzer zu legen. Neue Funktionen und damit Mehrwert müssen kontinuierlich zur Verfügung gestellt werden. Dies erfordert die entsprechende Haltung bei allen Beteiligten an der es beständig zu arbeiten gilt. Ganz im Sinne der agilen Softwareentwicklung durch Inspect and Adapt.

 

Literatur und Quellen

[1] Stine, Matt (2015): Migrating to Cloud-Native Application Architectures. Sebastopol, CA 95472: O’Reilly Media.

[2] Cloud Native Computing Foundation: www.cncf.io