Sebastian

Specialist Systems Engineer for Software Defined Solutions, EMC Deutschland

Stateful Microservices entwickeln mit EMCs Elastic Cloud Storage

Auf der DevOpsCon in Berlin dreht sich diese Woche alles um Continuous Delivery, Microservices, Docker, und Clouds – und natürlich um skalierbare Apps. Ich bin auch vor Ort und spreche unter anderem über die Programmierung von „Stateful“-Microservices. Zur Einstimmung darauf gibt es hier im Blog schon vorab die nachfolgende Kurzeinführung.

Von Sebastian Schmidt, Advisory Systems Engineer bei EMC.

Grundsätzlich dürften die meisten Programmierer wissen, wie man hochskalierbare Apps entwickelt: Der inzwischen hinlänglich bekannte „stateless design“-Ansatz macht es möglich. Diesem zufolge werden Anwendungen so programmiert, dass sie selbst keine Zustands- oder anderen Daten halten. Dadurch bleiben sie klein und schlank und können sehr schnell und nahezu beliebig oft instantiiert werden. Zumindest theoretisch.

Praktisch entscheidet sich die Skalierbarkeit einer stateless-App aber natürlich auch an der Frage, wo und auf welche Weise die Anwendung ihre Daten („state“) persistiert. Denn wirklich sinnvoll wird eine Applikation meist erst durch die Manipulation und Speicherung von Daten.

Herkömmliche Speicher: zu unsicher, zu unflexibel und zu teuer

Der Einsatz von Direct-Attached- oder Network-Attached-Storage von Webservern erweist sich hierbei oft als ebenso unzureichend wie der von Datenbank-Servern – alle drei Ansätze können den Verfügbarkeits- und Skalierbarkeit-Anforderungen moderner Apps meist kaum genügen:

  • Die Datenhaltung auf der Direct-Attached-Storage eines Webservers bietet so gut wie keine Skalierbarkeit und kaum Sicherheit, da die Speicherung in vielen kleinen, dezentralen Daten-„Silos“ erfolgt, die keine integrierte Replikation, Snapshots oder Ähnliches unterstützen.
  • Der Einsatz von NAS-Speicher ist dagegen wenig Entwickler-freundlich und verursacht zudem einigen Verwaltungsaufwand, da die Speicher jeweils einzeln provisioniert werden müssen. Zudem unterstützt NAS keine Integration des Speichermanagements in eine App oder Platform-as-a-Service-Schicht.
  • Die Speicherung auf Datenbank-Servern hingegen ist zwar skalierbar, dabei aber Ressourcen-aufwendig. Denn erstens muss der Datenbank-Server als solches bereitgestellt werden, einschließlich eigener Compute-, Speicher- und Netzwerkressourcen sowie den erforderlichen Backup-Features. Und zweitens verbleiben bei Einsatz eines Datenbank-Servers sowohl die Anwendung selbst als auch sämtliche Anwendung-ausführende Webserver im Datenpfad, was auf Kosten der Leistung gehen kann
  • Vor allem aber sorgt jeder der Ansätze dafür, dass der Hardware-Bedarf der Anwendungsumgebung mit der Zahl der Anwender und Anwendungs-Instanzen proportional oder sogar überproportional anwächst. Spätestens bei einer großen User-Zahl gehen die per „stateless design“ erzielten Skalierbarkeits-Gewinne also verloren.

Anwendungsumgebungen mit Objektspeicher-Appliances: volle Skalierbarkeit

  • Besser fährt darum, wer mit einer Anwendungsumgebung aus Web-Servern und damit verknüpften Objektspeichern arbeitet, etwa mit EMCs Elastic Cloud Storage (ECS). Object Storage ermöglicht das persistente Speichern von Daten auf einem zentralen, mandantenfähigen Speicher, der zudem automatisch beziehungsweise durch die Applikation oder die Platform-as-a-Service-Schicht gesteuert provisioniert werden kann. Damit erschließt er schon per se sämtliche Vorteile von NAS (zentrale Persistenz, zentrale Kontrolle, unabhängige Skalierung), ohne deren Nachteile mitzubringen (hoher Aufwand bei der Verwaltung, keine Integration des Managements in Applikation oder PaaS), und bietet gute Skalierbarkeit und Effizienz.
  • Zudem können Entwickler beide Vorteile noch erheblich ausbauen, wenn sie ihre Web-Apps mit dem HTTP-Feature „CORS“ ausstatten (kurz für Cross-Origin Ressource-Sharing). Dieses ermöglicht es Web-Anwendungen einer bestimmten Domäne, auf die Ressourcen einer anderen Domäne zuzugreifen – und erlaubt so, Web-Server aus dem Datenpfad der Anwendung herauszuhalten.

Noch mehr Vorteile mit EMCs Elastic Cloud Storage: Meta-Data und Big-Data mitverwalten

IT-Organisationen und Programmierer, die mit EMC ECS arbeiten, profitieren zusätzlich von weiteren Vorteilen: Die Speicher-Appliance unterstützt das Mit-Speichern von Metadaten und bietet von Haus aus mächtige Features für deren Durchsuchung und Verwaltung. Zudem bietet ECS den gleichzeitigen, aktiven Multiprotokollzugriff über das Hadoop Distributed Filesystem (HDFS), was nicht nur das Speichern, sondern auch das gleichzeitige Auswerten von Anwendungsdaten möglich macht, ohne diese erst verlagern zu müssen.

Beispiel-Anwendung im Web: Best-Practice-App „ECSPics“

Für alle, die mehr über das Entwickeln von Web-Anwendungen mit Objektspeicher wissen wollen, stellt EMC die Beispiel-App „ECSPics“ zu Verfügung: Das in Golang und mit AngularJS erstellte Bildverwaltungswerkzeug bündelt eine ganze Reihe von Best Practices wie CORS oder den Einsatz der REST-API und zeigt zudem die wichtigsten ECS-Features im Einsatz. Durch die Paketierung als Docker-Container ist die Installation sehr einfach. Interessierte Entwickler können den Code zum Projekt hier herunterladen.

Neugierig geworden?

Dann treffen Sie mich am 15.06.2016 auf der DevOpsCon in Berlin! Ich spreche von 12.00 bis 13.00 Uhr in Saal B über „Platform as a Service in Production (incl. Stateful Microservices). Und wenn Sie nicht dabei sein können: Kontaktieren Sie mich per Twitter unter @Seb2Tweet

Mehr Infos zur DevOpsCon gibt es unter http://www.devopsconference.de, mehr zu meinem dortigen Vortrag hier.