Apps für die Cloud: Die Stärkung der DevOps-Ausrichtung

Durch die Entwicklung und den Betrieb auf Cloud-Plattformen ändern sich die Anforderungen an moderne Applikationen: Skalierbarkeit, verteilte Systeme, Continous Integration sowie Container sind Schlagworte, mit denen sich Entwickler schon bei der Architektur beschäftigen sollten und die durch die Methodik der «Twelve Factor App» abgedeckt werden. In einer Blogpostserie zeigen wir euch wie Applikationen für die Cloud entwickelt, deployed und betrieben werden sollten.

Teamarbeit ist gefragt

Eine wichtige Voraussetzung, um Applikationen in die Cloud zu bringen, ist ganz klar das Know-how im Team. Im Idealfall sind Kenntnisse zu Betrieb, Betriebsplattform, Continous Integration und Delivery im Kernteam oder in Form von interdisziplinären Teams vorhanden oder werden aufgebaut. Im Cloudumfeld rückt das Team viel näher an die Infrastruktur als dies in klassischen Softwareprojekten der Fall ist. Viele Betriebsaufgaben müssen vom Team übernommen werden. Dies bestärkt die DevOps-Ausrichtung und sensibilisiert die Entwickler, ihre Software „betreibbar“ zu entwickeln. Es hat sich auch gezeigt, dass eine transparente Sicht in die darunterliegende Plattform und Infrastruktur von grossem Vorteil ist. Dadurch können gewisse Aspekte besser beleuchtet werden. Ebenso ist es essenziell, dass Informationen zur Cloud Plattform zugänglich sind und zeitnah zur Verfügung stehen.

Nebst den Betriebsaspekten, die tendenziell eher ins Team wandern, findet der Paradigmenwechsel auch auf technischer Ebene statt. In der klassischen Welt werden beispielsweise Ausfallsicherheit und Hochverfügbarkeit oft auf Infrastrukturebene implementiert. Im Cloudumfeld werden diese Themen im Sinne der Reduktion von Komplexität und Einhaltung von Best Practices auf Applikationsstufe angegangen.

Automatisierung CI/CD und Hohe Testabdeckung

Die Automatisierung in der Softwareentwicklung und im Betrieb ist der Schlüssel zum Erfolg. Sie dient als Dokumentation, unterstützt die Reproduzierbarkeit und Zuverlässigkeit und beschleunigt den Deploymentprozess massiv. Bei unseren Projekten haben wir uns jeweils von Anfang an darauf fokussiert, eine Continuous Integration und Delivery Pipeline aufzubauen. Die Applikationen werden also von Beginn an vollautomatisch auf Testumgebungen und per Knopfdruck auf Produktion deployed. Ebenso wurde das Aufsetzen ganzer Umgebungen auf unserer Container Plattform APPUiO automatisiert. Dies hat uns einerseits geholfen echte Integrationstests inkl. Setup der Umgebung zu bauen, andererseits Umgebungen per Knopfdruck erstellen zu können.

Die hohe Testabdeckung mit automatisierten Tests auf unterschiedlichen Ebenen (Unit, System und Integration) war uns ebenfalls sehr wichtig. Dadurch können wir den Regressionstestaufwand massiv verringern und bedenkenlos oft deployen. Die Qualität der Deployments auf Test und gar Produktion konnte enorm gesteigert werden. Der hohe Testabdeckungsgrad mag zu Beginn als aufwendig erscheinen, lohnt sich mittelfristig aber alle mal. Die Docker Containertechnologie unterstützt uns als treibende Kraft beim Entwickeln lokal und als Technologie für den Betrieb unserer cloudready Applikationen.

Zwölf Faktoren setzen den Rahmen

Die Methodik der «Twelve Factor App» (www.12factor.net) hat uns als technologieagnostische Grundlage gedient und uns ein gemeinsames Vokabular und Verständnis für Devs und Ops hinsichtlich dem Deployment von Applikationen in die Cloud gegeben. Docker und Containertechnologien – wie sie etwa bei unserer Container Plattform APPUiO als Basistechnologie im Einsatz sind – implementieren gewisse Faktoren von sich aus. Gleichzeitig helfen sie dabei, Applikationen cloudready zu entwickeln und zu betreiben. Das Zwölffaktorapp-Manifest ist nicht nur auf Cloudapps anwendbar. Es gibt einen allgemeinen Rahmen vor, um Applikationen portierbarer, leichtgewichtiger und robuster zu implementieren und zu betreiben.

Im nächsten Blogbeitrag werden wir detaillierter darauf eingehen, was bereits bei der Entwicklung von Applikationen beachtet werden muss, um Software auf einer Cloudumgebung zuverlässig zu betreiben.

Kommentare sind geschlossen.