Speed in der Entwicklung dank Cloud-native

Cloud-native Entwicklung reduziert die Fertigungstiefe von Anwendungen und führt zu mehr Speed und Agilität im Entwicklungsprozess.

Autoren: Andreas Pfenninger & Daniel Albisser

Die Applikationsentwicklung erfolgt heute verstärkt Cloud-native auf PaaS oder Containern/Kubernetes Plattformen. Der Trend geht jedoch stark in Richtung Serverless. Alle Hyperscaler wie Microsoft Azure, Google Cloud Plattform oder Amazon Web Services stellen entsprechende Dienste bereit und bauen diese stark aus. 

Cloud Vorteile werden oft nicht voll ausgenutzt

Unsere Kunden bewegen sich in einem dynamischen und innovativen Umfeld. Datengetriebene Services verändern die Customer Journey, Kollaborationen mit Partnern und Ökosystemen ermöglichen neue Geschäftsmodelle. Und durch die Digitalisierung der Kundenschnittstellen steigen die Erwartungen: die Kunden wollen einen einfachen Zugang zu innovativen Diensten rund um die Uhr. Um mit dieser Entwicklung Schritt halten zu können, muss ein Unternehmen die Fähigkeit haben, neue Produkte schnell auf den Markt bringen zu können und diese schnell zu adaptieren.

Viele Organisationen haben realisiert, dass sie zwar Cloud-Dienste nutzen, aber nicht voll von den versprochenen Vorteilen profitieren. Eine traditionelle Applikation, die mit «Lift&Shift» in die Cloud gehievt wurde, läuft zwar in der Cloud, profitiert jedoch in keiner Weise von all den unterliegenden Möglichkeiten von Cloud-native. In vielen Fällen lohnt es sich deshalb, vorhandene Softwaremonolithen aufzubrechen und sie nach Cloud-native Prinzipien von Grund auf neu zu entwickeln. 

Moderne Applikationen werden Cloud-native gebaut

Cloud-native Technologien ermöglichen es Unternehmen, skalierbare Anwendungen in modernen, dynamischen Umgebungen zu implementieren und zu betreiben. Eine Anwendung wird als Cloud-native bezeichnet, wenn sie nach den Prinzipien von Cloud-native entwickelt wurde und die Vorteile von Cloud-Technologien ausnutzt. Dies können öffentliche, private und Hybrid-Clouds sein. Zu den Vorteilen gehören Business Agilität, Skalierbarkeit, Resilienz, Automatisierung und Kosteneinsparungen. 

Best-Practices, wie Container, Service-Meshs, Microservices, immutable Infrastruktur und deklarative APIs unterstützen diesen Ansatz; mehr dazu unter Cloud Native Computing Foundation (CNCF):

  • Die Teile einer Anwendung werden als lose gekoppelte Microservices implementiert, in Container verpackt und dynamisch orchestriert und skaliert, um die IT-Ressourcen optimal auszunutzen. Die Unabhängigkeit von Providern wird erhöht, Lösungen können zwischen verschiedenen Cloud Providern portiert werden.
  • Allenfalls kommt ein Service Mesh zum Einsatz. Dies ist eine Infrastrukturschicht, welche Kommunikation zwischen Microservices und Implementation von Querschnittsthemen wie Security und Monitoring erleichtert, oft mit Hilfe eines sogenannten «Sidecar Proxys».
  • In einer immutablen Infrastruktur werden Komponenten nicht geändert, sondern ersetzt. Eine Anwendung oder ein Dienst wird bei jeder auftretenden Änderung komplett neu ausgerollt. 
  • Dank vollständiger Automatisierung & Continuous Delivery lassen sich Anwendungen leicht testen und deployen. Für die Entwicklung eines spezifischen Features kann eine komplette Kopie der Anwendung provisioniert werden. Darauf kann ein Entwickler ungestört arbeiten und testen, und nach Fertigstellung der Features die Umgebung wieder verwerfen. Dies führt zu schnelleren Releases und höherer Qualität der Releases.
  • Eine Cloud-native Applikation benutzt ausschliesslich Cloud-Dienste. Je höher der Abstraktionslevel, desto stärker können sich Entwickler auf die Business Logik fokussieren.
  • Tendenziell wird ein deklarativer Programmierstil benutzt. Darin beschreibt der Entwickler auf hohem Abstraktionsniveau das «Was» und nicht das «Wie». 

Die zugrundeliegenden Techniken ermöglichen die Umsetzung von entkoppelten Systemen, die belastbar, handhabbar und beobachtbar sind. Kombiniert mit einer robusten Automatisierung können Softwareentwickler mit geringem Aufwand flexibel und schnell auf Änderungen reagieren. Diese Eigenschaften sind das Ziel der Cloud-native Entwicklung. Für das Design von Cloud-native Applikationen kann z.B. die 12-Factor App Methodologie angewendet werden, welche eine ausführliche Auflistung von Best Practices enthält.

Mehr Effizienz und Resilienz dank Cloud-native

Cloud-native Applikationsplattformen bieten Entwicklungsservices und Features an, die über reine Compute, Storage und Infrastructure Services hinaus gehen. Sie bieten Abstraktionen dieser darunterliegenden Services an, um die Eigenschaften von Cloud-native Architekturen zu ermöglichen.

Cloud-native Applikationen reduzieren die Fertigungstiefe, indem sie auf möglichst hohem Abstraktionslevel aufbauen. Während traditionelle und «Cloud-ready» Applikationen z.B. auf virtuelle Maschinen aufgebaut werden, setzen «Cloud-native» Applikationen auf App Services und Serverless Functions auf. Aspekte wie Verfügbarkeit und Skalierbarkeit werden von der Plattform automatisch garantiert. Dadurch sinkt die Komplexität der Anwendung.

Cloud-native_Figure.png
Die Illustration zeigt den steigenden Abstraktionslevel von Cloud-ready, Cloud-optimized bis hin zu Cloud-native Applikationen.

Container (Kubernetes) und Serverless Functions schliessen sich nicht gegenseitig aus, eine Cloud-native Applikation kann beide Technologien sinnvoll kombinieren. So eignen sich z.B. Container besser zur Migration von Legacy Applikationen. Und Serverless Functions sind speziell geeignet für Event-driven Architekturen mit «Nanoservices» – mehr dazu im Beitrag Cloud-Native! Aber wie? Container vs Serverless. Der richtige Mix macht es aus.

Ein hoher Grad an Automatisierung ist für Cloud-native Entwicklung zwingend. Das wird einerseits durch DevOps und Automatisierung bei der Provisionierung und bei Applikations-Deployments erreicht, andererseits auch durch die Skalierung der unterliegenden Infrastruktur.

Die wichtigsten Vorteile von Cloud-native Applikationen

Der Schritt zu Cloud-native Entwicklung bringt viele Vorteile:

Speed und Leichtigkeit

Neue Produkte können mit Cloud-native Diensten schnell entwickelt und auf den Markt gebracht werden. Der Fokus der Entwicklung liegt durch einen hohen Grad an Abstraktion primär auf der Business-Logik.

Elastizität und Resilienz

Cloud-native Applikationen profitieren von der Elastizität der Cloud, wenn sie etwa bei Lastspitzen zusätzliche Ressourcen in Anspruch nehmen. Aspekte wie Verfügbarkeit werden vom Cloud Provider garantiert. Fällt ein wichtiges IT-System eines Cloud-Providers aus, kann das Pendant in einer anderen Region dessen Aufgabe übernehmen. Managed Cloud Services sind systembedingt stets auf dem neuesten Stand und immer verfügbar. 

Innovationskraft und Business-Agilität

Die Nutzung der neuesten Technologien als PaaS Dienst aus der Cloud, wie z.B. Machine Learning und Analytics Services, ermöglichen eine einfachere Umsetzung von innovativen Anwendungsfällen. Weiter kann auf Änderungen aus dem Business schnell reagiert werden.

Doch aufgepasst: Cloud-native Entwicklung bedingt auch einige Veränderungen in der Art und Weise, wie Software-Lösungen entwickelt werden und entsprechendes Know-how. Design-Entscheide müssen noch bewusster gefällt werden, denn die Abhängigkeit einer Software-Lösung von einem spezifischen Cloud-Provider nimmt stark zu und ist aufgrund von «Business Continuity» und gewissermassen Unabhängigkeit zu berücksichtigen.

Bringen Sie Ihre IT auf den nächsten Level der Software-Entwicklung. Die Vorteile von Cloud-native sind glasklar und helfen der IT bei der Industrialisierung! Doch der richtige Mix macht es aus: um einerseits von den Vorteilen maximal zu profitieren und andererseits sich nicht in eine zu starke Abhängigkeit eines einzelnen Cloud-Providers zu begeben – mehr dazu im Beitrag «Cloud-native Entwicklung mit überschaubarem Risiko».

Ihre ipt-Experten

Wie können wir Sie unterstützen?