Feature-Flags vs. Blue-Green-Deployments: Weniger Risiko und mehr Kontrolle

26. Okt. 2020

Als Entwickler fragen Sie sich vielleicht, welche Vorteile Feature-Flags gegenüber Blue-Green-Deployments bieten und wann Sie welches Tool verwenden sollten.

Kurz erklärt: Bei Blue-Green-Deployments wird der Benutzerverkehr auf andere Server umgeleitet, die Ihre aktualisierte Anwendung hosten. Feature-Flags hingegen sind codebasiert und ermöglichen es Benutzern, ein Update durch Änderungen auf Anwendungsebene zu sehen.

Dieser Blogbeitrag gibt einen Überblick darüber, wie Feature-Flags ähnliche Herausforderungen wie Blue-Green-Deployments lösen, jedoch mit mehr Kontrolle und geringerem Entwicklungsaufwand. Schauen wir uns das genauer an:

Ein einfaches Beispiel: Blue-Green-Deployments

Bei einem Blue-Green-Deployment wird ein Teil Ihrer Server für die neue Version Ihrer Anwendung und ein anderer Teil für die vorherige Version verwendet. Im folgenden Diagramm hostet die blaue Servergruppe Ihre aktuelle Version, die grüne die neue. Um Benutzern das Update bereitzustellen, müssen Sie sich mit dem Betriebsteam abstimmen, um den Datenverkehr über den Load Balancer (auch bekannt als Traffic-Router) umzuleiten.

Wenn Sie ein Release veröffentlichen, das mehrere Funktionen aktualisiert, und dabei einen Fehler in einer dieser Funktionen entdecken, können Sie einfach zur vorherigen Version zurückkehren, indem Sie den Datenverkehr auf die vorherige Version oder die Server der „blauen Gruppe“ umleiten. Blue-Green-Deployments sind in dieser Hinsicht jedoch eine ungenaue Lösung, da sie keine Kontrolle auf Funktionsebene ermöglichen. Sie müssen das gesamte Update zurücksetzen, um nur eine Funktion zu deaktivieren. Vorteile und Nachteile von Blue-Green-Deployments
  • Vorteil: Ermöglicht das einfache Zurücksetzen einer Version durch Rückführung des Datenverkehrs auf eine blaue Umgebung
  • Vorteil: Es ist kein zusätzlicher Code in Ihrer Anwendung erforderlich.
  • Nachteil: Macht die gesamte Version rückgängig anstatt nur die fehlerhafte Funktion;
  • Nachteil: Ermöglicht keine detaillierte Steuerung auf Feature-Ebene, sondern nur Änderungen auf Release-Ebene.
  • Nachteil: Der Datenverkehr wird auf Serverebene aufgeteilt, und es ist schwierig, bestimmten Benutzern Zugriff zu gewähren oder diesen einzuschränken.
  • Nachteil:Erfordert häufig die Koordination des Zugriffs auf die Infrastruktur durch Entwickler und Betriebsteams.
  • Nachteil: Der Wechsel kann langsamer sein, da Load Balancer benötigen, dass alle Verbindungen entleert werden.

Eine präzise Lösung: Feature-Flag-Bereitstellungen

Mit Feature-Flags (auch bekannt als Feature-Toggles) verfügt jede Funktion Ihres Softwareupdates über ein eigenes Flag bzw. einen eigenen Toggle, der unabhängig von der vollständigen Version gesteuert werden kann. Mit einem Feature-Flag-Dienst wie Optimizely Rollouts können Sie die Flags innerhalb der Benutzeroberfläche der Feature-Flag-Plattform erstellen und anschließend neue Features oder Codepfade in den Feature-Flag-Code einbetten.

Wenn Sie dieses Mal einen Fehler in einer Ihrer Funktionen entdecken, müssen Sie nicht die gesamte Version zurücksetzen. Sie können die fehlerhafte Funktion einfach in Ihrem Feature-Management-Dashboard deaktivieren – ganz ohne Code-Deployment. Feature-Flags bieten dadurch mehr Kontrolle, reagieren schneller und sparen Entwicklungszeit im Vergleich zu Blue-Green-Deployments, die teamübergreifende Zusammenarbeit und die Pflege mehrerer Versionen auf Ihren Servern erfordern.

Vorteile und Nachteile von Feature-Flag-Deployments

  • Vorteil:Schaltet einzelne fehlerhafte Funktionen einfach ab.
  • Vorteil: Ermöglicht die Granularität auf Feature-Ebene
  • Vorteil: Sie können einzelnen Nutzern, bestimmten Zielgruppen oder bestimmten Prozentsätzen Ihrer Nutzer auf einfache Weise Zugriff auf Funktionen gewähren.
  • Vorteil:Softwareentwickler können Änderungen vornehmen, ohne die IT-Abteilung/DevOps einzubeziehen.
  • Nachteil: Erfordert zusätzlichen Code in Ihrer Anwendung und kann technische Schulden verursachen, wenn Sie keine Best Practice für das Entfernen vorhandener Flags haben.

Update nur für eine Teilmenge der Nutzer bereitstellen

Die Vorteile von Feature-Flags für die Veröffentlichung von Funktionen werden besonders deutlich, wenn man an Canary-Releases denkt. Dabei werden Funktionen zunächst nur einer kleinen Teilmenge der Nutzer zur Verfügung gestellt, bevor sie für alle freigegeben werden. Bei der Veröffentlichung einer neuen Version mit Funktionsupdates empfiehlt es sich, die Änderungen zunächst mit einer kleinen Gruppe zu testen, um sicherzustellen, dass alles einwandfrei funktioniert. In der Softwareentwicklung spricht man von Canary-Tests bzw. Canary-Deployments oder gestaffelten Rollouts. Canary-Tests ermöglichen es, neuen Code oder neue Funktionen zunächst einer kleinen Gruppe von Nutzern zur Verfügung zu stellen, um eventuelle Probleme zu erkennen, bevor sie für alle freigegeben werden. Durch die Beschränkung auf eine ausgewählte Gruppe lässt sich die Verbreitung neuer Releases minimieren, und Teams können Funktionalität und Leistung vor der Freigabe für alle Nutzer überprüfen. Dieser Ansatz hilft auch dabei, Probleme zu erkennen, die erst beim Wechsel von der Entwicklungs- oder Testumgebung in die Produktionsumgebung sichtbar werden. Canary-Tests lassen sich sowohl mit Blue-Green-Deployments als auch mit Feature-Flags durchführen, allerdings bestehen dieselben Herausforderungen bei der Steuerung des Datenverkehrs auf Serverebene. Canary-Tests mit Blue-Green-Deployments: Anstatt den gesamten Datenverkehr von der blauen Servergruppe, die die aktuelle Anwendungsversion hostet, zur grünen Servergruppe umzuleiten, kann nur ein Teil des Datenverkehrs auf die neue Version umgeleitet werden. Allerdings haben Sie weiterhin keine Kontrolle auf Feature-Ebene und müssen die gesamte Version zurücksetzen, wenn ein Feature fehlerhaft ist. Auch die Definition von Regeln auf Serverebene ist kompliziert, wenn Sie genauer steuern möchten, welche Kunden Zugriff auf ein Feature erhalten.

Canary-Tests durch Feature-Flag-Bereitstellungen: Mit Feature-Flags können Sie für jede Funktion mit einem Ein-/Ausschalter einen Canary-Test durchführen, indem Sie den Anteil des Datenverkehrs auswählen, der für die jeweilige Funktion freigegeben werden soll. Falls eine Funktion einen Fehler aufweist, können Sie sie einfach deaktivieren, anstatt zur vorherigen Version zurückzukehren. Sie können außerdem Zielgruppen-Targeting verwenden, um Funktionen für bestimmte Kunden oder Kundensegmente zu aktivieren (z. B. nur für Kunden des kostenlosen Tarifs).

Zusammenfassung

  • Feature-Flags bieten eine detailliertere und benutzerfreundlichere Lösung zur Risikominderung bei der Veröffentlichung neuer Funktionen.
  • Feature-Flags ermöglichen es Softwareentwicklungsteams, ihre Releases zu verwalten und den Bedarf an Betriebsunterstützung zu reduzieren.
  • Feature-Flags können verwendet werden, um Canary-Tests auf Benutzerebene auszuführen und bieten so mehr Kontrolle als auf Serverebene.
Wenn Sie mit Feature Flags beginnen möchten, sehen Sie sich unsere kostenlose Lösung an: Optimizely Rollouts.