Daniel Albisser
Partner
Die individuelle Softwareentwicklung verändert sich durch Cloud-native. Doch technische und organisatorische Herausforderungen in Unternehmen bleiben.
Was ist Cloud-native Entwicklung überhaupt? Welche Ansätze von Cloud-native gibt es und wie kann ich den Nutzen als Unternehmen mit den richtigen technischen und organisatorischen Ansätzen maximieren? Diesen Fragen bin ich nachgegangen und habe meine Erkenntnisse aus verschiedenen Cloud-native Projekten in diesem Blog zusammengefasst.
Autor: Daniel Albisser
Für Unternehmen, welche digitale Leader sind, ist die Präsenz und Differenzierung auf den online Kanälen ein Muss. Die Grundlage dafür ist die massgeschneiderte Entwicklung individueller Software-Lösungen. Diese werden von Produkte-Teams entwickelt, die aus Business-Vertretern und Technikern bestehen. Diese Teams stehen unter grossem Druck, schnelle Ergebnisse auf der Basis von soliden Applikations- und Integrations-Architekturen zu definieren. Diese müssen erweiterbar und skalierbar sein, aber auch schnell auf künftige Business-Anforderungen angepasst werden können. Software-Lösungen waren noch nie so einflussreich und gleichzeitig komplex wie heute.
Deshalb habe ich mir folgende Frage gestellt: Wie können sich Produkte-Teams die heute verfügbaren Cloud-native Technologien in der Software-Entwicklung zu Nutze machen und was ist der richtige Architekturansatz?
Cloud-native verspricht mehr Speed und Agilität, bessere Skalierung und Resilienz sowie die Unterstützung modularer Software-Architekturen. Das klingt vielversprechend und ist genau das, was agile Produkte-Teams für die Entwicklung moderner Software-Lösungen brauchen, um diese hinsichtlich Time-to-Market und Kosteneffizienz auf den nächsten Level zu hieven.
Doch was ist Cloud-native Software-Entwicklung?
Jeden den man fragt, liefert eine etwas andere Antwort. Allgemein kann man sagen, eine Software-Lösung wird als Cloud-native bezeichnet, wenn sie nach den Prinzipien von Cloud-native entwickelt wurde und die Vorteile von Cloud-Technologien ausnutzt. Doch diese Definition lässt Spielraum für unterschiedliche Interpretationen zu und resultiert somit auch in verschiedenen Architektur-Ausprägungen. Zu Cloud-native Software-Entwicklung haben wir vor einiger Zeit einen Blog geschrieben und verweisen auf die Definition der Cloud Native Computing Foundation (CNCF).
Soweit so gut. Doch nun stellen sich die Fragen, was ist der richtige Cloud-native Technologie-Mix / Architekturansatz und wo in der Organisation wird was bewerkstelligt? Diese Fragen schwirren schon länger in meinem Kopf umher. Deshalb habe ich mir verschiedene Cloud-native Projekte bei unseren Kunden etwas genauer unter die Lupe genommen und meine Erkenntnisse nachfolgend zusammengetragen.
Wie einleitend geschrieben, müssen moderne Software-Architekturen erweiterbar und skalierbar sein, aber auch schnell auf künftige Business-Anforderungen angepasst werden können. Cloud-native Technologien unterstützen das.
Was ist die ideale Basis für Cloud-native Software-Entwicklungsprojekte?
Aufgrund der Anforderungen im Enterprise-Umfeld bei der Entwicklung individueller Software-Lösungen haben sich modulare Ansätze durchgesetzt: Microservices-Architekturen auf Basis Cloud-native Plattformen. Low-Code oder No-Code Plattformen kommen für individuelle Software-Lösungen im Enterprise-Umfeld weniger zum Einsatz; nachfolgend wird darauf nicht mehr weiter eingegangen.
Die Ausprägung von Microservices-Architekturen auf Cloud-native Plattformen kann sehr unterschiedlich sein. Für eine Gegenüberstellung werden nachfolgende Aspekte der Cloud-native Plattform genauer betrachtet:
Um das Optimum aus der individuellen Softwareentwicklung herauszuholen und effizient Lösungen zu implementieren, bedingt es den richtigen Mix aus managed Cloud-native Services, 3rd-Party Frameworks und Custom-Code. Wo und mit was kann ich als Entwickler/Engineer geschäftlichen Nutzen erbringen? Auf welchem Abstraktionslevel setze ich mit Custom-Code auf? Was kann ich fixfertig fully-managed aus der Cloud beziehen und muss mich nicht darum kümmern?
Der Fokus sollte ganz klar bei der Umsetzung von Business-Anforderungen entlang der Unternehmensstrategie liegen: Frontend, Business-Logik und bei der nahtlosen Integration mit Umsystemen. Dort geschieht die Differenzierung und wird geschäftlicher Nutzen erbracht - und nicht beim Engineering der Basis-Infrastruktur. Diese sollte zu einem hohen Grad ab Stange, fully-managed vom Hyperscaler bezogen werden.
Als Zusammenfassung aus meiner Analyse der verschiedenen Kundenprojekte kann für Cloud-native Software-Architekturen folgender Grundsatz abgeleitet werden: maximale Verwendung von fully-managed Cloud-native Diensten.
Doch was sind die Möglichkeiten und Ausprägungen für die Implementation der Business-Logik in einer Microservices-Architektur?
Weitere Details dazu können den Blogs Container und Serverless mit Azure und Microservice-Entwicklung leicht gemacht - Azure Container Apps entnommen werden.
Nachfolgende Abbildung zeigt an einem konkreten Beispiel eine stark vereinfachte Cloud-native Architektur auf Basis von Azure:
Als Antwort auf die einleitende Frage, ob es den richtigen Cloud-native Architekturansatz gibt, kann folgendes zusammenfassend gesagt werden: Cloud-native Architekturen sind ein Mix aus Microservices als Serverless-Functions (A), in Containern (B) und auf Basis eines Cloud-native Applikationsframeworks (C). Bei Containern / K8s in der Public Cloud liegt die Tendenz klar in Richtung nativem K8s-Dienst der unterliegenden Plattform.
Wie im vorhergehenden Abschnitt beschrieben kommen für die Entwicklung von Cloud-nativen Software-Lösungen Cloud-native Plattformen zum Einsatz. Die automatisierte Plattform-Bereitstellung mit Hilfe Infrastructure-as-Code (IaC) ist individuell auf die Unternehmen zugeschnitten und erfordert einiges an Customizing, z.B. Netzwerk, IAM, Security, Governance, CI/CD. Diese Bereitstellung kann
gemacht werden.
Hier muss man sich die Frage stellen, was für die eigene Organisation der richtige Ansatz ist? Die einfache Antwort: Es gibt kein richtig oder falsch, beide Ansätze haben ihre Daseinsberechtigung - mit Vor- und Nachteilen, die jedes Unternehmen für sich individuell abwägen muss.
Betrachtet man die Effizienz und Wiederverwendung von Know-how sowie die Standardisierung bringt ein plattformzentrischer Ansatz mit einem Shared-Platform-Teams verschiedene Vorteile. Dadurch können sich die Produkte-Teams zu 100% auf die Business-Anforderungen konzentrieren und werden durch die Shared-Platform-Teams von der Bereitstellung der Plattform (IaC, Netzwerk, Security, Governance, ...) und deren Komplexität entlastet. Es werden aber ebenfalls zentrale Vorgaben und die Standardisierung gefördert, welche Produkte-Teams jedoch auch einschränken und bremsen können.
Durch einen applikationszentrischen Ansatz erlangen Produkte-Teams zwar mehr Flexibilität, Unabhängigkeit sowie Gestaltungsspielraum, doch sogleich steigen auch die Verantwortung, die Komplexität und der Engineering-Aufwand. Viel Verantwortung wird in die dezentralen Produkte-Teams übertragen, dies bedingt weitere Plattform-Engineering-Skills.
Nachfolgend die Vor- und Nachteile beider Ansätze nochmals gegenübergestellt:
Vorteile
Nachteile
Vorteile
Nachteile
Wie erwähnt, gibt es kein richtig oder falsch bei beiden Ansätzen. Jedes Unternehmen muss für sich entscheiden, was für sie am besten passt. Doch aufgrund der oben beschrieben Vor- und Nachteilen entscheiden sich die meisten Unternehmen für einen plattformzentrischen Ansatz.
Die Ausgangslage dieses Blogs war die Frage, was der richtige Ansatz für die individuelle Software-Entwicklung mit Cloud-native Technologien ist? Und gibt es diesen? Wie im Blog beschrieben, bin ich der Meinung ja. Diese Fragen wurden in diesem Blog aus einer technischen sowie organisatorischen Sicht beleuchtet. Hier nochmals die Erkenntnisse aus unseren verschiedenen Cloud-native Projekten zusammengefasst:
www.ipt.ch - Blog Speed der Entwicklung Dank Cloud Native
www.gartner.com - Emerging Technologies: Kubernetes and the Battle for Cloud-Native Infrastructure