IaaS versus PaaS versus Container.
Im Rahmen ihrer Cloud-Evolution gehen immer mehr Unternehmen dazu über, neben ihren Legacy-Applikationen, die sie auf eine Cloud-Infrastruktur gehoben haben, ebenfalls Cloud-Native-Anwendungen zu entwickeln. Denn insbesondere Software-as-a-Service und Web-Applikationen müssen von Grund auf neu entwickelt werden, um von den Eigenschaften einer Cloud-Umgebung zu profitieren. Hierbei stellt sich die Frage, welches Cloud-Service-Modell dafür am besten geeignet ist und welche Rolle Container spielen, um die Anwendungsentwicklung zu vereinfachen.
Infrastructure-as-a-Service, Platform-as-a-Service und Container-Technologien unterscheiden sich grundlegend in ihren Charakteristika, der nachfolgende Abschnitt erläutert die jeweiligen Spezifika.
Infrastructure-as-a-Service im Detail
Beim Infrastructure-as-a-Service (IaaS) handelt es sich um die unterste Schicht des Cloud-Service-Models. Sie bildet die Basis und stellt die grundlegenden Dienste wie Rechenleistung, Speicherplatz und Netzwerkkapazitäten bereit. Der IaaS-Anbieter stellt diese Ressourcen in einer virtualisierten Form wie virtuelle Maschinen oder VLANs (Virtual Local Area Network) bereit, auf die anhand von APIs (Application Programming Interface) zugegriffen wird. Eine Cloud-Infrastruktur ist so konzipiert, dass sie in Zeiten von Spitzenlasten dynamisch skalieren kann und sich damit an unterschiedliche Auslastungen anpasst. Ein IaaS-Anbieter übernimmt lediglich Verantwortung auf Infrastrukturebene. Er übernimmt den Betrieb und die Wartung der Rechenzentren, der physikalischen Umgebung und sorgt dafür, dass Kunden die virtuellen Ressourcen jederzeit anfordern können. Alles was auf den höheren Ebenen passiert, liegt zu 100 Prozent im Verantwortungsbereich des Kunden – Stichwort: Shared-Responsibility.
Platform-as-a-Service im Detail
Platform-as-a-Service (PaaS) repräsentiert die mittlere Schicht des Cloud-Service-Modells. Ein PaaS-Anbieter stellt eine Umgebung für die Entwicklung und den Betrieb von Web-Applikationen zur Verfügung. Diese Umgebung umfasst alles, vom vollständigen Stack des Betriebssystems über Datenbanken bis hin zu den jeweiligen Laufzeitumgebungen und weiterer Microservices, die bei der Anwendungsentwicklung unterstützen. Auf dieser Plattform lassen sich Webapplikationen entwickeln, testen und betreiben und damit der vollständige Lebenszyklus einer Anwendung verwalten. Anhand von APIs wird auf die Ressourcen und Services der PaaS-Plattform zugegriffen. Mit der Infrastruktur kommt ein Anwender niemals in Berührung und muss auch nicht für die notwendige Ressourcenbereitstellung sorgen, das übernimmt die PaaS-Umgebung automatisch.
Container-Technologie im Detail
Container werden verwendet, um Applikationen in einer gekapselten Form automatisiert bereitzustellen. Hierzu nutzen Technologien wie Docker oder CoreOS »rkt« die Eigenschaften des Linux-Kernels. Dabei werden Ressourcen wie Prozessor, RAM, Netzwerk oder Block-Speicher voneinander isoliert, ohne auch nur eine einzige virtuelle Maschine zu starten. Applikationen werden von ihrer jeweiligen Umgebung inklusive der Prozesse, Dateisysteme oder des Netzwerks vollständig getrennt und damit autonom innerhalb eines Containers betrieben. Durch das Aufheben dieser externen Abhängigkeiten lassen sich Applikationen damit über unterschiedliche Systeme hinwegbewegen. Hierzu kapseln Container die eigentliche Anwendung und ihre notwendigen Abhängigkeiten so wie Bibliotheken in einer virtuellen Umgebung ab. Diese können dann auf jedem beliebigen Linux- und Windows-System ausgeführt werden, wo eine Laufzeitumgebung für die entsprechende Container-Technologie existiert. Dies erhöht den Portabilitätsgrad und die Flexibilität der Anwendung.
Entwicklung im Cloud-Markt: IaaS und PaaS verschmelzen und nehmen Container ins Portfolio auf
Im IaaS-Markt lassen sich seit geraumer Zeit zwei Arten von Anbietern unterscheiden. Diejenigen, die ausschließlich Infrastrukturressourcen wie Rechenleistung und Speicherplatz anbieten. Sie machen den Großteil des Marktes aus, heben sich aber nicht nennenswert voneinander ab. Und dann gibt es die deutlich erfolgreicheren Anbieter. Nach dem Motto »It’s the platform stupid« konzentrieren sich diese hingegen nicht nur auf die reine Infrastruktur, sondern arbeiten darüber hinaus stetig am Ausbau eines umfangreichen Portfolios von infrastrukturnahen Plattform-Services. Damit ermöglichen sie ihren Kunden die Infrastruktur auf eine einfache Art und Weise gewinnbringend zu nutzen. So hat der 700 Pfund Cloud-Gorilla Amazon Web Services (AWS) aktuell insgesamt 70 Services, von denen der Großteil als Plattform-Services zu klassifizieren ist. Alleine im Jahr 2015 hat AWS 722 neue Funktionen zu seiner Infrastrukturplattform hinzugefügt. Hinzu kommt, dass IaaS-Angebote immer weiter um PaaS-Eigenschaften erweitert werden. Sogenannte »Serverless-Infrastructure« Services wie AWS Lambda, Azure Functions und Google Cloud Functions ermöglichen die Bereitstellung von Programmcode ohne sich mit der darunterliegenden Infrastruktur beschäftigen zu müssen.
Darüber hinaus zeigt ein weiterer Trend, dass alle großen IaaS- und PaaS-Anbieter Container-Technologien mit in ihr Service-Portfolio aufgenommen haben, darunter Amazon EC2 Container Service (ECS), Microsoft Azure Container Service, Google Container Engine und Red Hat OpenShift Origin. Container-Technologien haben es damit sehr schnell geschafft, von einem Hype zur Realität im Kontext von Cloud-Deployments zu werden.
Cloud-Native Applikationen: IaaS, PaaS oder Container?
Für die Entwicklung und den Betrieb von Applikationen in der Cloud lassen sich sowohl IaaS, PaaS als auch Container-Technologien nutzen. Jede Deploymentvariante hat ihre speziellen Eigenschaften, die es zu berücksichtigen gilt.
IaaS für mehr Kontrolle und Legacy
Der Erfolg von IaaS lässt sich an mehreren Eigenschaften festmachen. Angefangen dabei, dass Entwicklern damit umgehend Ressourcen zur Verfügung stehen, um eine Idee umzusetzen. Wenn die Idee von Erfolg gekrönt war, kann über weitere Server der Footprint erweitert werden. Sollte sich die Idee hingegen nicht bewähren, lässt sich die Infrastruktur innerhalb von Minuten abschalten, ohne weitere Kosten zu verursachen. Zudem war es vorher nicht möglich anhand eines AutoScaling-Mechanismus eine Web-Infrastruktur je nach Last und Anforderungen bei Bedarf wachsen beziehungsweise schrumpfen zu lassen. Hinzu kommt, dass mit IaaS jedem eine vollständig automatisierte Infrastruktur zur Verfügung steht, um Konzepte wie »Infrastructure as Code« zu nutzen.
Das IaaS-Modell stellt Unternehmen und Entwicklern also Basis-Ressourcen wie Rechenleistung, Speicherplatz und Netzwerk zur Verfügung, mit denen sich eine eigene virtuelle Infrastruktur aufbauen lässt, um Applikationen zu betreiben. Es handelt sich dabei um einen ähnlichen Ansatz wie der Betrieb der Infrastruktur im eigenen Rechenzentrum. Mit dem kleinen Unterschied, dass ausschließlich der IaaS-Anbieter Kontrolle über die physikalische Umgebung und deren Management-Software besitzt. Allerdings bietet eine IaaS-Umgebung insofern einen hohen Kontrollgrad, da sich auf den virtuellen Maschinen prinzipiell alles selbst installieren und zu 100 Prozent konfigurieren lässt. Dennoch ist für jede IaaS-Umgebung ein spezielles Wissen über die Cloud-Infrastruktur eine Grundvoraussetzung, um anhand von Tools die Umgebung und Applikation zu verwalten. Für die Applikationsbereitstellung auf einer IaaS-Umgebung sind in der Regel die folgenden Schritte notwendig:
- Bereitstellung von Rechenleistung, Speicherplatz und Netzwerk (etwa bei AWS, Azure, Rackspace, ProfitBricks)
- Konfiguration des virtuellen Netzwerks (Einrichtung DNS, Routing etc.)
- Sicherstellen der Sicherheit für die Infrastruktur (Isolation, Sicherheitsgruppen, Zugriffsrechte)
- Einrichten der notwendigen Software für die Applikation (etwa JEE, Tomcat)
- Konfiguration des Monitorings (Log-Dateien etc.)
- Konfiguration der Automation für die Infrastruktur (etwa Puppet, Chef, Ansible, Salt)
- Konfiguration der Applikationsbereitstellung (etwa Jenkins)
- Bereitstellung der Applikation
- Sicherstellen der Skalierbarkeit und Verfügbarkeit
Je nach Anbieter lassen sich auf einer IaaS-Umgebung sowohl Cloud-Native als auch Legacy Anwendungen betreiben. Anbieter wie AWS und Microsoft unterstützen anhand ihrer Plattform-Services bei der Entwicklung moderner Anwendungen, um bedingungslos von den Eigenschaften ihrer Cloud-Infrastrukturplattform zu profitieren. Jedoch bieten diese Umgebungen auch bestehenden Anwendungen ein zu Hause. Hierbei muss dann das Design der jeweiligen Cloud-Architektur entsprechend angepasst werden und Themen wie u.a. das Sicherheitsmodell, Load Balancing, ggf. Speicherplatz, das Design des Netzwerks, DNS-Routing sowie das AutoScaling der Server berücksichtigt werden.
PaaS für Cloud-Native Entwicklung und Convenience
Das PaaS-Modell abstrahiert die darunterliegende Infrastruktur von der Applikation. Dies führt dazu, dass sich Entwickler und Applikationsmanager nicht um den Aufbau und die Verwaltung der Infrastruktur kümmern müssen, die für die Applikation erforderlich ist. Hierfür stellt eine PaaS-Umgebung eine standardisierte Plattform bereit, die zur Entwicklung, dem Test und Deployment dient und Funktionen für das Konfigurationsmanagement beinhaltet, um damit die Continuous Integration und das Continuous Development zu unterstützt. Diese Erleichterung im Rahmen der Anwendungsentwicklung und dem Management kommen mit dem Kompromiss einher, dass die meisten PaaS-Umgebungen nur spezifische Funktionen eines Anbieters enthalten, um Applikationen zu entwickeln und bereitzustellen. Trotz eines einfachen und kontrollierbaren Entwicklungsprozesses, müssen Entwickler auf andere Ressourcen und Tools wie etwa externe APIs und Microservices, Middleware und native APIs zurückgreifen. Für die Applikationsbereitstellung auf einer PaaS-Umgebung sind die folgenden Schritte notwendig:
- •Anpassen des Programmcodes für die PaaS-Umgebung
- •Einrichten der Regeln zur Skalierung
- •Konfiguration der Applikationsbereitstellung (etwa Jenkins)
- •Bereitstellung der Applikation
- •Die PaaS-Umgebung sorgt dann für Skalierbarkeit und Verfügbarkeit
Auf PaaS-Umgebungen lassen sich idealerweise Cloud-Native Applikationen entwickeln und betreiben. Für Legacy-Anwendungen kommt ein PaaS hingegen weniger in Frage, da der Programmcode für die PaaS-Umgebung angepasst werden muss, was eine Migration erschwert. Insbesondere bei den Themen Skalierbarkeit und dem Application Lifecycle Management (ALM) bieten PaaS-Umgebungen deutliche Vorteile. So lässt sich die Anzahl von Application Workers mit nur einem Befehl erhöhen beziehungsweise minimieren. Im Vergleich dazu bietet eine IaaS-Umgebung nur wenig Möglichkeiten eine Instanz zu skalieren. Ausgehend davon, dass sich die Applikationsserver hinter einem Load Balancer befinden, können dahinter weitere Instanzen hochgefahren werden, auf welchen dann die Anwendung bereitgestellt wird. Hinzu kommt, dass die Instanzen in den meisten Fällen für jedes Release z.T. manuell (via Skripting) neu angepasst werden müssen. Eine PaaS-Umgebung bietet hier einen deutlichen Zeitvorteil – Je nach optimierter Konfiguration der Virtual Machine Images in einem Verhältnis von 15 Minuten bei IaaS und etwa 15 Sekunden bei PaaS. Geht es um das ALM, bieten PaaS-Umgebungen deutlich mehr Komfort als IaaS-Umgebungen. Wer den IaaS-Weg beschreitet, muss sich selbst um eine Lösung für das Applikationsmanagement kümmern. Von der Provisionierung der Infrastruktur, über die Bereitstellung der Änderungen der Applikationen, bis hin zur Skalierung der Applikationsinstanzen. Hingegen bieten PaaS-Umgebungen eine einheitliche Schnittstelle, um das Applikationsmanagement vorzunehmen. Die PaaS-Umgebung ist dabei als Blackbox implementiert und übernimmt die Aufgaben automatisch. So lassen sich etwa mit einem Befehl vollständige Umgebungen replizieren oder im Rahmen einfacher Deployments Klone von kompletten Produktivsystemen innerhalb von ein paar Minuten erzeugen. Weiterhin haben die meisten PaaS-Umgebungen einen Marktplatz implementiert, mit dem externe Services von Drittanbietern genutzt werden können, um die Applikation um Mehrwerte zu erweitern. Hierzu gehören etwa Caches, Proxies, Mail-Gateways oder Datenbanken.
Container für eine bessere Portabilität und Legacy
Container stellen Möglichkeiten bereit, um paketierte Software-Stacks portabel einzusetzen. Ein Großteil traditioneller PaaS-Umgebungen setzt auf Container-Technologien als Basis, um Multi-Tenant Applikationen auf einer Shared-Infrastructure zu ermöglichen. Hierbei nutzen sie in den meisten Fällen Web-Container für eine bestimmte Programmiersprache wie Java, Rails, Ruby, Python, Django oder NodeJS, um darin den Programmcode zu speichern. Technologien wie Docker oder LXC kommen zum Einsatz, um die Container zu verwalten und sorgen für die Isolation zwischen den einzelnen Web-Containern. Diese Form der Architektur bietet sich gut für Web-Applikationen an, die aus einem Web-Front-End und entsprechenden Datenbanken im Backend bestehen. Aber Container können nicht nur für Web-Applikationen eingesetzt werden, sondern bieten sich ebenfalls für jede Art von Applikation wie Microservices, Big Data, Analytics und auch Legacy Anwendungen an. PaaS-Lösungen wie Cloud Foundry haben frühzeitig begonnen, Container-Technologien wie Docker zu unterstützen.
Der Einsatz von Containern in Kombination mit Orchestration-Lösungen wie Kubernetes (Google GCP), Heat (OpenStack) oder Cloudify (Multi-Cloud: OpenStack, VMware, AWS) helfen bei dem automatisierten Verpacken, Bereitstellen und Verwalten von Anwendungen auf IaaS-Umgebungen. Die Kombination von Containern und Orchestration eröffnet zudem eine bessere Flexibilität auf Infrastrukturebenen, indem eine Abstraktionsschicht zwischen der Applikation und der darunterliegenden Infrastruktur eingezogen wird. Denn IaaS-Umgebungen werden typischerweise anhand von Skripten automatisiert betrieben. Das bietet den Vorteil, dass in dem Skript genau zu sehen ist, welche Schritte ausgeführt werden und was passiert, wenn es ausgeführt wird. Hierdurch wird es einfacher, Fehler zu identifizieren. Ein weiterer Vorteil ist, dass ein Skript replizierbar ist und auf einfache Weise geteilt, vervielfacht, angepasst oder neu geschrieben werden kann. Damit ist der Grad an Kontrolle und Flexibilität auf einer IaaS-Umgebung deutlich größer als bei einem PaaS. Allerdings wird diese Flexibilität mit einer sehr geringen Portabilität und einer höheren Komplexität der Anwendung bezahlt, da diese auf viele externe Abhängigkeiten angewiesen ist. An dieser Stelle kommt die Kombination von Containern und Automatisierung ins Spiel. Container erlauben einen höheren Kontrollgrad und eine bessere Portabilität, indem sie die Komplexität reduzieren und Abhängigkeiten verringern. Die Automation kommt im besten Fall nur dann zum Einsatz, um die Abhängigkeiten zwischen einzelnen Services und Ebenen der Applikation zu handhaben und für die notwendige Skalierbarkeit und Ausfallsicherheit zu sorgen.
Container werden ein Bestandteil von IaaS- und PaaS-Umgebungen
Die Antwort bei der Entwicklung moderner Cloud-Anwendungen findet sich nicht in der Frage »IaaS vs. PaaS vs. Container«, sondern in welchem Cloud-Modell Container letztendlich eingesetzt werden sollen. Hierbei ist wichtig zu verstehen, dass eine Applikation, die in einer PaaS-Umgebung oder auf einer IaaS-Umgebung läuft ebenfalls direkt mit anderen Services kommunizieren kann, die innerhalb eines Containers betrieben werden. Also genau so, als ob die Applikation auf eine Datenbank, einen Load Balancer oder auf jede andere Ressource bei Bedarf zugreifen würde.
Die Betrachtungsweise »IaaS vs. PaaS plus Container« ist insbesondere aus der Perspektive interessant, da zu beobachten ist, dass IaaS- und PaaS-Umgebungen immer mehr verschmelzen. So wird IBM sein IaaS-Angebot Softlayer in Zukunft mit seinem PaaS Bluemix zusammenführen, um eine einheitliche Plattform zu bieten, über die sich ebenfalls Infrastrukturressourcen, also virtuelle Maschinen und Speicherplatz, verwalten lassen. Diese Strategie sollten sich viele reine IaaS-Anbieter genauer anschauen. Denn zum einen ist ein pures IaaS-Angebot bereits heute nicht mehr wettbewerbsfähig, zum anderen müssen auch PaaS-Anbieter ihren Kunden einen granularen Zugriff auf Speicher, Datenbanken, Rechenleistung und andere Services bereitstellen, die es üblicherweise so nur über IaaS zu beziehen gibt.
René Büst
https://www.crisp-research.com/iaas-vs-paas-vs-container-moderne-anwendungsentwicklung-der-cloud/