Cloud Computing verspricht vermeintlich einfach zu sein. Hier und da einen virtuellen Server starten und fertig ist die eigene virtuelle Cloud Infrastruktur. Wer nun meint, dass ich mit der Aussage recht habe, der liegt dermaßen falsch. Virtuelle Server sind nur ein kleiner Bestandteil einer virtuellen Infrastruktur bei einem Cloud Anbieter. Ein paar virtuelle Maschinen machen noch lange keine Cloud. Die Komplexität liegt in dem, wie die Architektur der Applikation geschaffen ist. Und somit in der Intelligenz, die der Architekt und der Softwareentwickler ihr vereinleibt. Das dies manchmal nicht so umgesetzt wird, haben uns die einen oder anderen Cloud Nutzer nicht nur einmal eindrucksvoll gezeigt. Regelmäßig fallen immer die selben Verdächtigen aus, wenn deren Cloud Anbieter mal wieder mit sich selbst zu kämpfen hat. Cloud Computing ist nicht einfach! Ich meine hiermit nicht simples Software-as-a-Service (SaaS). Ich spreche von Infrastructure-as-a-Service (IaaS) und Platform-as-a-Service (PaaS) und hier sogar noch granular von der Königsklasse namentlich Skalierbarkeit und Hochverfügbarkeit. Und genau das sollte man Abseits des Marketing der Cloud Anbieter verstehen und uneingeschränkt berücksichtigen, wenn man Cloud Computing erfolgreich einsetzen möchte.
Software-defined Scalability und Software-defined High-Availability
Derzeit kursieren wieder neue Begriffe durch die IT-Stratosphäre. Software-defined Networking (SDN) und auch Software-defined Datacenter (SDD). Ein SDN führt eine weitere Abstraktionsebene oberhalb der Netzwerkkomponenten ein. Typischerweise besitzt jeder Router und Switch seine eigene lokale Software, über die er per Programmierung mit Intelligenz versorgt wird. Der Netzwerkadministrator sagt dem Router somit bspw. welches Paket unter welchen Bedingungen wohin geleitet werden soll oder auch nicht. Innerhalb eines SDN entfällt die Aufgabe jeder einzelnen Komponente für sich eine lokale Intelligenz einzuverleiben. Die Intelligenz wandert eine Ebene höher in eine Managementschicht, in der das gesamte Netzwerk designed wird und die einzelnen Regeln für jede Komponente zentral festgelegt wird. Ist das Design fertiggestellt, wird es über die Netzwerkkomponenten ausgerollt und das Netzwerk ist konfiguriert. Mit SDN soll es daher möglich sein ein vollständiges Netzwerkdesign “per Knopfdruck” zu verändern, ohne jede einzelne Komponente direkt anfassen zu müssen.
Die Idee des SDN Konzepts muss bei der Nutzung einer Cloud-Infrastruktur ebenfalls zwingend in Betracht gezogen werden. Denn der Einsatz eines PaaS aber noch viel mehr eines IaaS bedeutet sehr viel Eigenverantwortung. Mehr als man auf dem ersten Blick denken mag. Eine oder zwei virtuelle Maschinen zu starten bedeutet nicht, dass man eine virtuelle Cloud Infrastruktur nutzt. Es sind und bleiben zwei virtuelle Server. Ein IaaS Anbieter stellt darüber hinaus nur die Komponenten, wie die genannten virtuellen Maschinen, Speicherplatz, weitere Services und zusätzlich APIs bereit, mit denen die Infrastruktur genutzt werden kann. Unterm Strich lässt sich vereinfacht sagen, dass ein IaaS Anbieter seinen Kunden nur die Ressourcen und entsprechenden Werkzeuge zur Verfügung stellt, um damit auf seiner Cloud Infrastruktur eine eigene virtuelle Infrastruktur respektive ein eigenes virtuelles Rechenzentrum aufzubauen.
Man muss daher per Software (die eigene Applikation) selbst dafür sorgen, dass die Cloud Infrastruktur bei Bedarf skaliert (Software-defined Scalability, SDS) und im Falle eines Ausfalls einer Cloud Infrastruktur-Komponente berücksichtigen, dass entsprechend eine Ersatzkomponente (z.B. virtuelle Maschine) gestartet wird und die Ausgefallene damit ersetzt wird (Software-defined High-Availability, SDHA). Die Software sorgt also für die Skalierbarkeit und Hochverfügbarkeit der genutzten virtuellen Cloud Infrastruktur, damit die Web-Applikation selbst skaliert und ausfallsicher ist und den Charakter der jeweiligen Cloud eines Anbieters nutzt und das Maximum aus ihr schöpft.
Wie eine Cloud Computing Infrastruktur quasi in Perfektion genutzt wird zeigt Netflix eindrucksvoll.
Netflix das Paradebeispiel
Netflix ist mit Abstand der größte Cloud Service weltweit. Der Video-Streaming Dienst ist während Spitzenzeiten mittlerweile für ein Drittel des gesamten Internetverkehrs verantwortlich. Diese Nutzeranfragen gilt es selbstverständlich performant und zu jedem Zeitpunkt zu beantworten. Dazu setzt Netflix schon seit seinem Start im Jahr 2009 auf Cloud Technologien und hat im November 2012 seinen vollständigen Technologie-Stack und die darauf basierende Infrastruktur in die Cloud zu den Amazon Web Services verlagert. Hier laufen rund 1.000 virtuelle auf Linux basierende Tomcat Java Server und NGINX Web-Server. Hinzu kommen weitere Services wie Amazon Simple Storage Service (S3) und die NoSQL Datenbank Cassandra in Verbindung mit Memcached sowie ein verteiltes Memory Object Caching.
Das ist jedoch nur die eine Seite der Medaille. Viel wichtiger ist die Nutzung mehrerer Availability Zones in der Amazon Cloud. Netflix nutzt insgesamt drei Availability Zones, um die Verfügbarkeit und Geschwindigkeit des eigenen Service zu erhöhen. Tritt in einer Availability Zone ein Problem auf, ist die Architektur der Netflix-Applikation so ausgelegt, dass der Service durch die anderen beiden weiterlaufen kann. Dabei hat Netflix sich nicht auf die reinen Marketing-Versprechen von Amazon verlassen, sondern mit dem Chaos Gorilla selbst eine eigene Software entwickelt, mit der die Stabilität der virtuellen Server Amazon Elastic Compute Cloud (EC2) getestet wird. Kurzum wird dabei der Ausfall einer kompletten EC2 Region bzw. Availability Zone simuliert, um sicherzustellen, dass der Netflix-Service im Ernstfall weiterhin funktioniert. Eine der größten Herausforderungen besteht dabei darin, dass im Falle eines Fehlers in einer Amazon Zone, das Domain Name System (DNS) automatisch neu konfiguriert wird, damit die Netflix Kunden von dem Ausfall nichts mitbekommen. Die unterschiedlichen APIs der DNS-Anbieter machen die Aufgabe hier allerdings nicht einfacher. Zudem sind die meisten so entwickelt worden, dass die Einstellungen noch manuell vorgenommen werden müssen, was es nicht einfacher macht, dies zu automatisieren.
Unterm Strich ist zu sagen, dass Netflix für den Fehlerfall vorausschauend plant und sich nicht auf die Cloud verlässt. Denn irgendwas läuft auch mal in der Cloud schief, wie in jedem gewöhnlichen Rechenzentrum auch. Mann muss nur darauf vorbereitet sein. Wer sich mehr dafür interessiert, was Netflix macht um diesen Zustand zu erreichen sollte “Netflix: Der Chaos Monkey und die Simian Army – Das Vorbild für eine gute Cloud Systemarchitektur” lesen.
Die Einfachheit zählt
Vielleicht verlange ich noch zu viel. Schließlich ist Cloud Computing in seiner Form ein relativ junges Konzept. Dennoch zeigt Netflix eindrucksvoll das es funktioniert. Wenn man jedoch bedenkt, was für einen Aufwand Netflix betreibt, um in der Cloud erfolgreich zu sein, muss man einfach sagen, dass Cloud Computing nicht einfach ist und eine Cloud Infrastruktur, egal bei welchem Anbieter, mit der entsprechenden Architektur aufgebaut werden muss. Das bedeutet im Umkehrschluss, dass die Nutzung der Cloud simpler werden muss, um auch die versprochenen Kostenvorteile zu erzielen. Denn wenn man Cloud Computing richtig nutzt, ist es zwangsläufig nicht günstiger. Neben den Einsparungen der Infrastrukturkosten die immer vorgerechnet werden, dürfen niemals die weiteren Kosten z.B. für das Personal mit den notwendigen Kenntnissen und die Kosten für die Entwicklung der skalierbaren und ausfallsicheren Applikation in der Cloud vernachlässigt werden.
Das erfreuliche ist, dass ich erste Startups am Horizont sehe, die sich der Problematik annehmen und den einfachen Bezug von fertigen Cloud Ressourcen, ohne als Nutzer selbst auf Skalierbarkeit und Hochverfügbarkeit achten zu müssen, zu ihrer Aufgabe gemacht haben.