Wahrscheinlich hat heute jeder schonmal Netflix geschaut, ein Uber Taxi bestellt, mit Snapchat gechattet oder auf Pinterest nach Bildern gesucht. Neben einem disruptiven Business Model mit kontinuierlichen Innovationen, braucht es aber auch den Einsatz von Technologien wie Microservices, Containers und Orchestratoren.
Alle erwähnten Firmen setzen auf sogenannte Hyperscaler auf, so werden die grossen Cloud Provider wie Google, Amazon Web Services oder Microsoft Azure genannt, weil sie sich schnell auf eine sehr grosse wachsende Nachfrage anpassen können. Neben der eigentlichen Rechenleistung (Compute) oder zur Verfügung gestellten Speicherkapazitäten (Storage) wird aber noch mehr benötigt – nämlich ein ausgewählter Einsatz von Technologien, welcher erlaubt diese Ressourcen auch dynamisch nutzen können. Die Cloud Native Computing Foundation liefert eine Definition von Cloud Native Computing – aus dieser möchte ich drei ausgewählte etwas näher beleuchten.
Microservices
Microservices können als eine „pragmatische“ Interpretation oder Weiterentwicklung von Service Oriented Architecture (SOA) betrachtet werden. Unter Anwendung des SOA Pattern werden Applikationen aus einer Vielzahl von Services entworfen, welche sich an den Geschäftsprozessen ausrichten. Während jeder SOA-Service eine vollständige Geschäftsfunktion darstellt, ist jeder Microservice eine viel kleinere Softwarekomponente, die sich nur auf eine einzige Aufgabe spezialisiert.
Microservices sind des Weiteren unabhängig von einem zentralen Kommunikationskanal/Enterprise Service Bus (ESB) und kommunizieren stattdessen über definierte Schnittstellen/Application Programming Interfaces (APIs) direkt. Microservices können auch in kleineren, unabhängigen Deplyoment Units produktiv gebracht werden. Das heisst während in herkömmlichen SOA Applikationen alle Services miteinander deployed werden mussten und daher mit einem Unterbruch der Applikation verbunden war, können Microservices einzeln und somit ohne Unterbruch der Applikation verteilt werden.
Microservices der dritten Generation separieren sogar die eigentliche Funktionalität (z.B. «Bezahlen» in einem Webshop) komplett vom technischen drumherum, welches sich beispielsweise um die Aufrufe von anderen Microservices oder die Lastverteilung zwischen einzelnen Instanzen von Container kümmert. Diese Separierung in Service und dem Service Proxy ermöglicht es die Komplexität in diesem Netz an Microservices (Service Mesh) einigermassen im Griff zu behalten.
Standardisierte Deployment Units (Containers)
Mit dem Wandel hin zu Microservices und der damit verbundenen Reduktion des Umfangs der Services werden umso ressourceneffizientere Laufzeitumgebungen benötigt. Containers sind eine Weiterentwicklung in der Virtualisierungstechnologie, welche erlauben auf der gleichen physischen Hardware mehrere unabhängige Laufzeitumgebungen zu betreiben. Während Virtuelle Maschinen (VM) konzipiert wurden, um mehrere Betriebssysteme auf einer einzigen physischen Maschine ausführen zu können wurden Container dagegen als leichtgewichtige und portable Lösung für die Paketierung und Ausführung von Anwendungen in einer isolierten Umgebung entwickelt.
Elastizität
Mit der Vielzahl an Containern mit kleinteiligen Funktionalitäten stellt sich eine neue Herausforderung der Verwaltung, welche ein sogenannter Container-Orchestrator elegant löst. Dieser ermöglicht z.B. die zeitbasierte Bereitstellung von Container Instanzen, sorgt für Vorhandensein von ausreichend Instanzen in einer geographischen Lokation (Affinität/Anti-Affinität) oder überwacht den Systemstatus und korrigiert wo möglich automatisch Fehler. Eine zentrale Funktionalität eines solchen Orchestrator liegt darin, dass er dank der Unabhängigkeit der Container die Anzahl der Instanzen beliebig auf den aktuellen Workload anzupassen kann. Diese Fähigkeit wird als Elastizität bezeichnet und ist der Grad, zu dem ein System in der Lage ist, sich an Workload Änderungen anzupassen.
Diese und natürlich noch sehr viele weitere Cloud Native Technologien werden von praktische allen Startups genutzt, um innovative und global skalierbare Services zu entwickeln. Die lose Koppelung von den Microservices ermöglicht neben dem skalierbaren digitalen Endprodukt auch eine organisatorische Aufteilung in vielfacher Hinsicht und reduziert die Time-to-Market von neuen Funktionalitäten. So stellen Firmen wie Netflix oder Uber täglich hunderte von neuen Funktionalitäten ihren Benutzern zur Verfügung, um im Wettbewerb um Kunden die besten Karten zu behalten.
Weiterführende Links
[1] SOA vs. Microservices: A Head-to-Head Comparison
[2] A Brief History of Cloud Application Architecture
Snapchat’s Shift to Microservices
Uber – Introducing Domain-Oriented Microservice Architecture