Progressive Delivery: Eine Weiterentwicklung von Continuous Delivery

* Autor: Dirk Radde

Progressive Delivery ist ein moderner Ansatz für die Softwarebereitstellung, der auf den Prinzipien von Continuous Delivery aufbaut. Unternehmen können so Code schneller und mit hoher Kadenz bereitstellen, während sie gleichzeitig die Risiken reduzieren. Um dies zu erreichen, werden Advanced-Deployment-Strategien mit zusätzlichen Kontroll- und Überwachungsmöglichkeiten genutzt. Verbesserte Kontrolle ist ein zentrales Fundament von Progressive Delivery.

Ziele von Progressive Delivery

  • Schnellere und kontrollierte Freigabe von neuer Software
  • Minimierung von Ausfallzeiten
  • Begrenzung des “Explosionsradius” unbeabsichtigter Folgen beziehungsweise negativer Ergebnisse
  • Begrenzung des Work-in-Progress (WIP), höhere Kadenz und ein reibungsloser Ablauf
  • Schnelleres Lernen und schnellere Entscheidungen im Prozess

Deployment-Strategien für Progressive Delivery

Nachdem wir betrachtet haben, welche Ziele mit Progressive Delivery erreicht werden können, sehen wir uns nun drei gängige Muster (Blue/Green, Canary, Feature Flags) der Implementierung näher an.

Bild: Vorteile der jeweiligen Deployment-Strategien

Bild: Vorteile der jeweiligen Deployment-Strategien

Blue/Green Deployment

Ein Blue/Green Deployment reduziert Risiken, indem zwei identische Produktionsumgebungen betrieben werden. Zu jedem Zeitpunkt ist nur eine der beiden Umgebungen im Live-Betrieb. In diesem Beispiel ist „Blue“ in Live-Betrieb und „Green“ im Leerlauf. Nachdem Sie die neue Version auf „Green“ installiert haben, führen Sie Ihre Smoke-Tests durch und stellen sicher, dass alles in Ordnung ist. Sobald die Tests erfolgreich abgeschlossen sind, wird der Live-Verkehr auf “Green” umgeleitet.

Im Falle einer fehlgeschlagenen Bereitstellung ist der Rollback-Prozess stark vereinfacht. Wenn mit Ihrer neuen Version auf “Green” etwas Unerwartetes passiert, können Sie sofort zur letzten Version zurückkehren, indem Sie wieder auf “Blue” wechseln.

Bild: Blue/Green Deployment (Quelle: Argo)

Canary Deployment

Bei Canary Deployments wird ein Software-Update zunächst nur einer kleinen Nutzergruppe zur Verfügung gestellt. Diese Gruppe wird über einen Load Balancer auf die neue Software geleitet. Die neue Version wird einige Zeit lang überwacht, um aussagekräftige Daten zu sammeln. Stellt das Team ein Problem fest, wird die Software umgehend zurückgezogen. Wenn keine Probleme festgestellt werden, wird die Version schrittweise für alle Anwender verfügbar gemacht.

Mit Canary Deployments können Sie neue Features kontinuierlich einführen, ohne befürchten zu müssen, dass eine einzige neue Funktion Ihre gesamte Nutzerbasis beeinträchtigt. Der Zweck eines Canary Deployments besteht darin, eine eindeutige Antwort zu erhalten, ob die Version so sicher ist, um sie risikolos komplett in die Produktion zu überführen. Voraussetzung für die Beantwortung dieser Frage sind ein Monitoring und definierte Metriken.

Bild: Canary Deployment (Quelle: Argo)

Feature Flag Rollouts

Bei Feature Flag Rollouts wird der Code mit deaktivierten neuen Features in der Produktion bereitgestellt. Um mit dem Rollout zu beginnen, können Sie den Code zunächst nur den Entwicklern für einen abschließenden Smoke-Test zugänglich machen. Als Nächstes stellen Sie die neuen Features beispielsweise den Early Adopters zur Verfügung.

Wenn die Dinge immer noch gut laufen, beginnen Sie damit, die Einführung zu beschleunigen. Auf diese Weise können Sie neue Features schrittweise den Anwendern zugänglich machen und sehen, wie die Software sich verhält, bevor Sie den Prozentsatz weiter erhöhen.

Rückgängig kann dies ganz einfach durch Ausschalten des Feature Flags gemacht werden. Es sind keine Patches, kein erneutes Deployment oder ein geändertes Netzwerk-Routing erforderlich. Sie sind immer noch in der Produktion, aber Sie geben den neuen Code nicht mehr an ihre Anwender weiter.

Bild: Feature Flag Rollout (Quelle: Argo)

Progressive Delivery für Cloud-native Apps

In der Regel werden heute Cloud-native Anwendungen entwickelt und automatisch auf Knoten in einem Kubernetes-Cluster innerhalb einer Microservices-Architektur bereitgestellt. Allerdings fehlt die einfache Unterstützung ein paar wichtiger Deployment-Strategien.

Ergänzende Tools wie Argo Rollouts oder Flagger bieten die Funktionalität, um Blue/Green, Canary, A/B Testing für Kubernetes, Red Hat OpenShift oder andere kommerzielle Kubernetes-Plattformen effizient umzusetzen. Damit können Sie problemlos Progressive Delivery für Ihre Kubernetes-Cluster übernehmen.

Bild: Argo Rollout Controller für Kubernetes (Quelle: Argo)

Fazit

Progressive Delivery kann der nächste Schritt zur Verbesserung Ihres Software-Delivery-Prozesses sein. Unternehmen, die dieses Verfahren anwenden, können Risiken reduzieren und die Customer Experience verbessern. Progressive Delivery ist ein bewährtes Mittel, um kontrolliert in hoher Kadenz und Geschwindigkeit neue Features auszuliefern.

Über den Autor

Der Autor Dirk Radde ist Tech Lead DevOps Infrastructure bei Devoteam Germany. Devoteam ist ein führendes Beratungsunternehmen, das sich auf digitale Strategie, Technologieplattformen, Cybersecurity und Business Transformation konzentriert, um Unternehmen zu helfen, ihre Zukunft zu gestalten. Mit 25 Jahren Erfahrung und 10.000 Mitarbeitern in ganz Europa, dem Nahen Osten und Afrika, fördert Devoteam verantwortungsvolle Technologien für Menschen.

Creative Tech for Better Change
Weitere Informationen: https://de.devoteam.com