Container sorgen auf IaaS- und PaaS-Systemen für Flexibilität: Tetris für die Cloud
Ein uraltes System in die Cloud heben – das kommt für die Applikationsentwicklung und -Bereitstellung heutzutage nicht mehr infrage. Vielmehr müssen Programmierer Anwendungen speziell für die Wolke entwickeln. Für zeitgemäße Software-as-a-Service- und Web-Applikationen bedeutet das: Um von den Eigenschaften einer Cloud zu profitieren, müssen sie von Grund auf neu gestaltet werden. Unternehmen können dieses Vorhaben mit unterschiedlichen Systeme umsetzen.
Doch welches Service-Modell eignet sich am besten dafür – Infrastructure-as-a-Service (IaaS), Platform-as-a-Service (PaaS) oder Container-Technologien? Die drei Möglichkeiten unterscheiden sich grundlegend in ihren Charakteristika: Bei IaaS handelt es sich um die unterste Schicht des Modells. Sie bildet die Basis und stellt Dienste wie Rechenleistung, Speicherplatz und Netzwerkkapazitäten. Die mittlere Schicht beschreibt das Platform-as-a-Service-Modell – dort steht die Umgebung für die Entwicklung schon bereit. Container können auf Applikationen in beiden Modellen angewandt werden: Die Anwendung wird von ihrer jeweiligen Umgebung getrennt und lässt sich dadurch autonom betreiben – unabhängig davon, ob sie auf einer PaaS- oder IaaS-Umgebung läuft. Bei der Entwicklung geht es dementsprechend auch nicht um die Formel „IaaS versus PaaS versus Container“, sondern um die Frage, in welchem Cloud-Modell Container letztlich eingesetzt werden sollen. Wenn man von einer Formel sprechen will, dann würde sie also eher „IaaS versus PaaS plus Container“ lauten.
Schon jetzt ist zu beobachten, dass IaaS- und PaaS-Umgebungen immer stärker miteinander verschmelzen. So will IBM sein IaaS-Angebot Softlayer mit seinem PaaS-System Bluemix zusammenführen: Auf einer Plattform lassen sich dann auch Infrastruktur wie virtuelle Maschinen und Speicherplatz verwalten. Eine Strategie, die sich viele IaaS-Anbieter genauer anschauen sollten.
Bisher lassen sich im IaaS-Markt zwei Arten von Anbietern unterscheiden: Diejenigen, die nur Infrastruktur anbieten, und diejenigen, die ein Portfolio von infrastrukturnahen Plattform-Services aufbauen. Während die erste Art von Anbietern den Großteil des Marktes ausmachen, gelten letztere als erfolgreicher: Nach dem Motto „It’s the platform stupid“ konzentrieren sie sich nicht auf die reine Infrastruktur, sondern erweitern ihr Angebot um PaaS-Eigenschaften.
Ein Beispiel dafür: Amazon Web Services (AWS). Das Unternehmen bietet aktuell 70 Services, ein Großteil davon Plattform-Services. Allein 2015 hat AWS 722 neue Funktionen zu seiner Infrastrukturplattform hinzugefügt. So genannte „Serverless-Infrastructure“-Services wie AWS Lambda, Azure Functions und Google Cloud Functions stellen zudem den Programmcode bereit, ohne dass sich der Nutzer mit der darunterliegenden Infrastruktur beschäftigen muss. Alle großen IaaS- und PaaS-Anbieter haben auch Container-Technologien in ihr Portfolio aufgenommen, darunter Amazon EC2 Container Service, Microsoft Azure Container Service, Google Container Engine und Red Hat OpenShift Origin.
IaaS für mehr Kontrolle und Legacy
Der Erfolg von IaaS lässt sich an mehreren Eigenschaften festmachen: Den Entwicklern stehen umgehend Ressourcen zur Verfügung, um eine Idee umzusetzen und gegebenenfalls zu erweitern. Sollte sich die Idee nicht bewähren, lässt sich die Infrastruktur binnen weniger Minuten abschalten, ohne weitere Kosten zu verursachen. Dank eines AutoScaling-Mechanismus lässt sich die Web-Infrastruktur je nach Last und Anforderungen erweitern beziehungsweise schrumpfen. Bei IaaS kann zudem jeder auf eine vollständig automatisierte Infrastruktur zurückgreifen, um Konzepte wie „Infrastructure as Code“ zu nutzen.
Beim IaaS-Modell handelt es sich also um einen ähnlichen Ansatz wie beim Betrieb der Infrastruktur im eigenen Rechenzentrum – mit dem Unterschied, dass ausschließlich der IaaS-Anbieter Kontrolle über die physikalische Umgebung und deren Management-Software besitzt. Auf den virtuellen Maschinen lässt sich prinzipiell alles selbst installieren und zu 100 Prozent konfigurieren. Dennoch braucht ein Entwickler für jede IaaS-Umgebung ein spezielles Wissen über die Cloud-Infrastruktur, 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 (zum Beispiel 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 (zum Beispiel JEE, Tomcat)
- Konfiguration des Monitorings (Log-Dateien etc.)
- Konfiguration der Automation für die Infrastruktur (Puppet, Chef, Ansible, Salt)
- Konfiguration der Applikationsbereitstellung (zum Beispiel Jenkins)
- Bereitstellung der Applikation
- Sicherstellen der Skalierbarkeit und Verfügbarkeit
Anbieter wie AWS und Microsoft unterstützen mit ihren Plattform-Services die Entwicklung moderner Anwendungen. Die Umgebungen bieten aber auch bestehenden Anwendungen ein Zuhause: Dafür muss das Design der Cloud-Architektur angepasst und Themen wie das Sicherheitsmodell, Speicherplatz, 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. Dadurch müssen sich Entwickler nicht um den Aufbau und die Verwaltung kümmern. Stattdessen stellt eine PaaS-Umgebung eine standardisierte Plattform bereit, die zur Entwicklung, dem Test und Deployment dient. Das bedeutet zwar eine Erleichterung der Anwendungsentwicklung und des Managements, geht aber mit dem Kompromiss einher, dass die meisten PaaS-Umgebungen nur spezifische Funktionen eines Anbieters enthalten. Trotz des einfachen Entwicklungsprozesses müssen Entwickler auf andere Ressourcen und Tools wie zum Beispiel 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 (zum Beispiel Jenkins)
- Bereitstellung der Applikation
- PaaS-Umgebung sorgt für Skalierbarkeit und Verfügbarkeit
Für Altsysteme kommt PaaS zwar weniger infrage, für neue cloudbasierte Applikationen kann die Umgebung aber Vorteile bieten – vor allem bei der Skalierbarkeit und dem Application Lifecycle Management (ALM). So lässt sich die Anzahl von Application Workers mit nur einem Befehl erhöhen beziehungsweise minimieren. Bei IaaS gibt es dafür nur wenige Möglichkeiten. Wer den IaaS-Weg beschreitet, muss sich selbst um eine Lösung für das Management seiner Applikation kümmern – von der Infrastruktur über Änderungen bis hin zur Skalierung der Instanzen.
PaaS-Umgebungen bieten hingegen eine einheitliche Schnittstelle, mit der sich die Applikation verwalten lässt. Die PaaS-Umgebung ist dabei als Blackbox implementiert und übernimmt die Aufgaben automatisch. So lassen sich zum Beispiel mit einem Befehl vollständige Umgebungen replizieren oder Klone von kompletten Produktivsystemen innerhalb von ein paar Minuten erzeugen. Bei PaaS haben die meisten Anbieter zudem einen Marktplatz, mit dem externe Services genutzt werden können. Dazu gehören beispielsweise Caches, Proxies, Mail-Gateways oder Datenbanken.
Container für eine bessere Portabilität
Mit Containern lassen sich Software-Stacks überall einsetzen. Heißt konkret: Man kann komplett auf andere Infrastrukturen umziehen und das System einfach mitnehmen. Ein Großteil traditioneller PaaS-Umgebungen setzt auf die Technologie, damit mehrere Kunden auf einer Infrastruktur laufen können. In der Fachsprache nennt sich das Multi-Tenancy. Dafür nutzen die Anbieter 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 dafür, dass sie komplett voneinander isoliert sind. Diese Form der Architektur bietet sich für Applikationen an, die aus einem Frontend und entsprechenden Datenbanken im Backend bestehen. Container lassen sich aber auch für jede Art von Applikation wie Microservices, Big Data, Analytics und auch Altsystem-Anwendungen einsetzen. PaaS-Lösungen wie Cloud Foundry haben frühzeitig begonnen, Container-Technologien wie Docker zu unterstützen.
Auf IaaS-Umgebungen kann es helfen, Container gemeinsam mit Orchestration-Lösungen wie Kubernetes (Google GCP), Heat (OpenStack) oder Cloudify (Multi-Cloud: OpenStack, VMware, AWS) einzusetzen. Sie unterstützen beim automatisierten Verpacken, Bereitstellen und Verwalten von Anwendungen auf IaaS-Umgebungen. Die Kombination aus Containern und der automatischen Koordination macht die Infrastrukturebenen zudem flexibler, weil eine Abstraktionsschicht zwischen der Applikation und der darunterliegenden Infrastruktur eingezogen wird.
Da IaaS-Umgebungen typischerweise anhand von Skripten automatisiert werden, können Admins besser nachvollziehen, welche Schritte wann genau vorgesehen sind. Dadurch ist es einfacher, Fehler zu identifizieren oder ein Skript zu teilen oder zu vervielfachen. Die IaaS-Umgebung lässt sich dadurch deutlich besser kontrollieren als eine PaaS-Lösung. Allerdings funktioniert die auf IaaS implementierte Anwendung nur eingeschränkt auf anderen Plattformen und ist sehr komplex, da das Sytem von vielen externen Punkten abhängt.
An dieser Stelle kommt die Kombination von Containern und Automatisierung ins Spiel: Container erlauben einen höheren Kontrollgrad und eine bessere Portabilität, die auf IaaS implementierte Anwendung kann also auch besser auf anderen Plattformen laufen. Die Automation kommt im besten Fall nur dann zum Einsatz, um die Abhängigkeiten zwischen einzelnen Services und Ebenen zu handhaben und für die notwendige Skalierbarkeit und Ausfallsicherheit zu sorgen.
Bitte beachte unsere Community-Richtlinien
Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.
Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.
Dein t3n-Team