Cookies
Diese Website verwendet Cookies und ähnliche Technologien für Analyse- und Marketingzwecke. Durch Auswahl von Akzeptieren stimmen Sie der Nutzung zu, alternativ können Sie die Nutzung auch ablehnen. Details zur Verwendung Ihrer Daten finden Sie in unseren Datenschutz­hinweisen, dort können Sie Ihre Einstellungen auch jederzeit anpassen.

Engineering

i3 – eine moderne Hosting-Infrastruktur für Zweitag
Minuten Lesezeit
Blog Post - i3 – eine moderne Hosting-Infrastruktur für Zweitag
Felix Seidel

Zweitag begleitet seine Kunden von der Konzeption über den erfolgreichen Rollout und darüber hinaus beim Betrieb ihrer Projekte. Für den Kunden steht zunächst das Projekt, welches er gemeinsam mit Zweitag erfolgreich umsetzen möchte, im Vordergrund. Das Hosting des Projekts in der Umsetzungs- und Produktivphase spielt oftmals eine untergeordnete Rolle. Der Erfolg des Projekts hängt jedoch auch davon ab, wie gut es von Kunden erreicht werden kann und wie sicher die verarbeiteten Daten vor fremdem Zugriff sind – hier kommt die Infrastruktur ins Spiel.

Für Zweitag besteht die Infrastruktur eines Projekts aus all denjenigen Ressourcen, die für den Betrieb der Anwendung erforderlich sind. Dazu zählen neben der Umgebung für die Anwendung weitere Support-Dienste wie Datenbanken, Loadbalancer- und Speicherdienste.

Komplexe Projekte bringen komplexe Herausforderungen für die Infrastruktur mit sich. Für uns ist das Hosting der Infrastruktur eines Projekts kein Einmalprodukt, sondern vielmehr ein Enabler für den Erfolg mit langfristiger Perspektive.

Im Rahmen des Projekts „Infrastruktur 3.0” (kurz i3) entwickeln wir unsere Infrastruktur weiter und wollen den Anforderungen an die Projekte unserer Kunden in Zukunft noch besser gerecht werden. In diesem Blogbeitrag wollen wir die Anforderungen und die grundlegenden Eckpfeiler unserer Infrastruktur aufzeigen. Den technischen Unterbau werden wir in späteren Blogbeiträgen erläutern.

Anforderungen an eine moderne Infrastruktur

Die Hauptaufgabe der Infrastruktur besteht darin, den Projektfortschritt zu jedem Zeitpunkt im Lebenszyklus gegenüber den Stakeholdern sichtbar zu machen.
Zu Beginn eines Projekts, also in der Konzeptions- und Validierungsphase, soll häufig ein Prototyp internen und externen Zielgruppen zugänglich gemacht werden. Hierbei werden typischerweise verschiedene Ansätze diskutiert und evaluiert, zum Beispiel im Rahmen eines A/B-Tests. Die hierfür benötigten Ressourcen sollen sich jederzeit möglichst automatisiert und schnell bereitstellen und wieder freigeben lassen. Die Entwickler erhalten hiermit die Möglichkeit, in Zusammenarbeit mit dem Kunden zu experimentieren, ohne langfristig Ressourcen zu binden.
In der Umsetzungsphase des Projekts in einem agilen Vorgehen steht die Kommunikation des Fortschritts am Ende einer Iteration im Vordergrund. In dieser Phase ist es vorteilhaft, dem Kunden das Projekt in einem möglichst realitätsgetreuen Szenario zeigen zu können. Dadurch wird sichergestellt, dass die Erwartungen des Kunden an die Software in einer Produktivumgebung erfüllt werden. Wir vermeiden dadurch Engpässe bei der Bereitstellung von Infrastruktur beim Go Live – im Idealfall wurde die Software bereits in dieser Umgebung abgenommen.
Die wichtigste Aufgabe für die Hosting-Infrastruktur ist zweifelsohne die sich anschließende Produktivphase. Die Herausforderung für den Produktivbetrieb liegt im zuverlässigen (d.h. sicheren und unterbrechungsfreien) Betrieb der Anwendung.
Zum sicheren Betrieb gehören unter anderem geeignete Maßnahmen zur Überwachung der Infrastruktur und das automatisierte Einspielen von Sicherheitsaktualisierungen. Auch an die physische Infrastruktur werden immer häufiger hohe Anforderungen gestellt, z.B. die Zertifizierung des Rechenzentrums nach ISO 27001 für die Verarbeitung von besonders sensiblen personenbezogenen Daten. Mit der fortschreitenden Integration von Webanwendungen im Alltag werden die Anforderungen unserer Kunden an eine unterbrechungsfreie Verfügbarkeit ihrer Anwendungen immer höher. Die neue Infrastruktur soll diese Anforderungen für alle damit umgesetzten Projekte ohne zusätzlichen Aufwand für die Entwickler abdecken.
Die Infrastruktur ist also eine wichtige Support-Leistung für die erfolgreiche Umsetzung des Projekts. Die Zielgruppe besteht einerseits aus dem Kunden, der eine zuverlässige Betriebsplattform erwartet, und den am Projekt beteiligten Mitarbeitern von Zweitag, welche die Infrastruktur verwalten.

Die vier Eckpfeiler der neuen Infrastruktur

Im Folgenden wollen wir zeigen, wie wir die zuvor beschriebenen Anforderungen im Projekt i3 abbilden wollen. Wir haben dafür vier Grundbausteine identifiziert.

Zweitag i3

Self Service

Zur Vermeidung von Bottlenecks und Wissens-Silos, wie sie oftmals beim klassischen Betrieb von Anwendungen entstehen, können die beteiligten Zweitag-Mitarbeiter selbstständig Projekt-Clouds erstellen und verwalten. Wir nennen diese Projekt-Clouds „Cluster“. Ein Cluster ist in sich abgeschlossen, d.h. verschiedene Cluster teilen sich keine Hardware-Ressourcen oder Daten. Cluster können vom Entwickler eigenständig erweitert und verkleinert werden. Innerhalb des Clusters werden verschiedene Ressourcen angeboten (z.B. Loadbalancer, Applikationsserver und Datenbankserver). Die kleinste Einheit eines Clusters ist ein Node. Ein Node ist immer einer Ressource zugehörig und stellt einen Dienst zur Verfügung.
Cluster für Kundenanwendungen im Produktivbetrieb sind naturgemäß langlebig, aber es ist vorgesehen und gewünscht, dass Cluster z.B. im Rahmen von Experimenten und Kundenpräsentationen ad hoc erstellt und gelöscht werden können. Die Aufgabe der Infrastruktur in diesem Kontext besteht also darin, dem Zweitag-Entwickler die notwendigen Tools für die Verwaltung der von ihm benötigten Infrastruktur an die Hand zu geben.

##Ausfallsicherheit durch Redundanz

Der unterbrechungsfreie Betrieb ist eine wichtige Anforderung an eine moderne Infrastruktur. In unserem Kontext kann diese Anforderung durch die Bereitstellung von Redundanz gewährleistet werden. Damit das Projekt auch bei einem teilweisen Ausfall der Infrastruktur weiterhin erreichbar bleibt, darf es keinen „Single Point of Failure“ geben, d.h. es muss für jeden Dienst ein Duplikat zur Verfügung stehen. Dieses Duplikat muss die Aufgabe der ausgefallenen Ressource schnell und ohne manuellen Eingriff übernehmen können. Ein solches Cluster aus Diensten kann den Ausfall eines Teils seiner Ressourcen ohne Nachteile für die Verfügbarkeit der Anwendung als Ganzes überdauern. Die Fehler werden also durch die redundanten Ressourcen kompensiert. Wir möchten nur im äußersten Notfall manuell eingreifen müssen. Das ist dann der Fall, wenn die Ausfälle die bereitgestellte Redundanz überschreiten und eine Unterbrechung in der Verfügbarkeit der Anwendung droht. Ausfallsicherheit durch Redundanz ist eine Win-Win-Situation für den Kunden und für Zweitag: redundante Infrastruktur gleicht Störungen binnen Sekunden automatisch aus. Das ist viel schneller als die Alarmierung eines Mitarbeiters und ein manueller Eingriff. Wir erhöhen damit die Verfügbarkeit der Anwendung und minimieren menschliche Interventionen – auch aus der Erfahrung heraus, dass solche Interventionen mehr als einmal mitten in der Nacht notwendig waren.
Redundanz ist bei klassischen Ansätzen zumeist eine Zusatzfunktion, die – wenn gewünscht – in die bestehende Infrastruktur integriert wird. Mit i3 machen wir Redundanz zum Standardfall. Jeder Dienst in jedem Cluster wird standardmäßig redundant betrieben, wenn nicht explizit anders gewünscht. Die Anzahl der mehrfach vorhandenen Instanzen eines Dienstes lässt sich auch später einfach anpassen, z.B. damit statt einem dann zwei Datenbankserver jederzeit ohne Unterbrechung für die Anwendung ausfallen dürfen.

Provider- und Technologieunabhängigkeit

Die Landschaft an Web-Technologien entwickelt sich rasant. Zweitag ist zwar traditionell im Umfeld des Web-Frameworks Ruby on Rails verwurzelt, wir möchten uns mit der neuen Infrastruktur jedoch nicht darauf beschränken, solche Anwendungen in hoher Qualität betreiben zu können. Die Applikationsserver eines i3-Clusters sind aus diesem Grund technologieagnostisch und können neben Ruby-Apps auch mit NodeJS, Elixir oder Go entwickelte Anwendungen ausführen. Die Nutzung von Buildpacks erlaubt dies ohne dass der Entwickler die für die Infrastruktur benötigte Umgebung selbst entwickeln muss. Die Nutzung von Container-Technologie ermöglicht es uns die Abhängigkeiten verschiedener Anwendungen zu trennen. Eine ältere Anwendung kann neben einer Neuentwicklung betrieben werden – ohne, dass eine der beiden Anwendungen dafür angepasst oder kompatibel gemacht werden müsste.
Die Fortschritte im Bereich Cloud Computing sind nicht weniger bemerkenswert. Wir möchten diese Vorteile für uns nutzen und verschiedene Cloud-Anbieter anbinden. Hiermit können wir für jedes Projekt ein passendes Hosting-Angebot schnüren:

  • Projekte ohne besondere Anforderungen an Datensicherheit profitieren von der großen Vielfalt an Cloud-Anbietern mit viel Leistung für wenig Geld
  • Projekte, die besonders sensible Daten verarbeiten, werden in Rechenzentren mit ISO 27001-Zertifizierung betrieben
  • ein On Premise-Betrieb, d.h. der Betrieb direkt beim Kunden, ist ebenfalls vorgesehen

Automatisierung von Unterstützungsleistungen

In der Infrastruktur gibt es häufig Dienste, die nicht direkt an der Umsetzung der Hauptaufgabe – der Verfügbarmachung einer Webanwendung – mitwirken, dennoch aber unverzichtbar sind. Zu solchen Unterstützungsdiensten zählen automatische Backups, Logging, Monitoring, Traffic-Analysen und die Verwaltung von SSL-Zertifikaten. Das Fehlen dieser Dienste fällt häufig erst in dem Moment auf, in dem sie am dringendsten benötigt würden: das Paradebeispiel sind fehlende oder unvollständige Backups. Da diese Dienste in so gut wie jedem Projekt benötigt werden ist die Automatisierung der Verwaltung solcher Dienste nur naheliegend. Wir haben uns dafür entschieden, eine Reihe von Unterstützungsleistungen standardmäßig für jedes Cluster anzubieten.
Ein zentrales Logging erleichtert Fehleranalysen in einem geclusterten System und erlaubt darüber hinaus auch die Messung des Erfolgs des Projekts durch Analyse von Logdaten in anonymisierter Form und Berechnung von KPIs möglich. Auf das Logging setzt ein mehrstufiges Monitoring auf. Wird eine Situation, die einen manuellen Eingriff erforderlich machen wird, erkannt, werden umgehend Mitarbeiter benachrichtigt.
Jedes Cluster erstellt außerdem regelmäßig Backups der Nutzerdaten in verschlüsselter Form. Mit den i3-Entwicklertools können diese Backups leicht und reproduzierbar wiederhergestellt werden.
Des Weiteren bezieht jedes Cluster automatisch SSL-Zertifikate und bietet damit eine SSL-Verschlüsselung für den Zugriff auf die Webanwendung ab Tag 1, ohne manuellen Eingriff, langwierigen Bestellprozess und ohne Gefahr, eine rechtzeitige Zertifikatsverlängerung zu vergessen.

Make or Buy

Wir beobachten die Entwicklungen im Infrastruktur-Umfeld laufend und mit großem Enthusiasmus. Bei der Entscheidung für die Umsetzung von i3 spielte natürlich auch eine Rolle, ob und inwiefern bereits bestehende Projekte im näheren Umfeld genutzt und integriert werden können. Eine besondere Rolle spielen hier Projekte im Bereich Platform as a Service (z.B. Dokku oder Flynn) und im Container-Umfeld (z.B. Docker Swarm zur Orchestrierung von Containern).
Wir möchten den Zweitag-Entwicklern für i3 ein kohärentes Gesamtpaket für die Verwaltung aller von ihnen benötigten Aspekte der Infrastruktur an die Hand geben. Die dafür notwendigen Aufgaben sind vielfältig und werden in dem für Zweitag relevanten Projekt-Szenario von keinem auf dem Markt verfügbaren Projekt abgebildet. Unsere momentan umgesetzte Lösung integriert die Technologien in ein für den Nutzer von i3 transparentes Tool zum Management von Infrastruktur, was mit einem „Fertigpaket“ schwer möglich wäre. Wir werden die weitere Entwicklung aber natürlich genau verfolgen und in einem kontinuierlichen Prozess neue Technologien erproben und wo sinnvoll in unseren Technologie-Stack integrieren.
Die von uns genutzten Technologien bei der Umsetzung der zuvor vorgestellten Vision einer modernen Infrastruktur möchten wir in einem späteren Blogbeitrag näher betrachten. Dabei werden wir unter anderem beleuchten, wie wir die Zusammensetzung einer Projekt-Infrastruktur mit Terraform beschreiben und verwalten, wie wir mit Dokku Container für Apps bauen und deployen und wie wir Consul für die Konfiguration und Orchestrierung von Diensten nutzen.

Du suchst den richtigen Partner für erfolgreiche Projekte?

Lass uns ins Gespräch kommen.