Feature Toggle
Inhalt
Was ist ein Feature Toggle?
In der Softwareentwicklung ist ein Feature Toggle ein Mechanismus, mit dem Code aus der Ferne ein- oder ausgeschaltet werden kann, ohne dass eine Bereitstellung erforderlich ist. Feature Toggles werden häufig von Produkt-, Entwicklungs- und DevOps-Teams für Canary-Releases, A/B-Tests, Produkt-Experimente und kontinuierliche Bereitstellung verwendet.
Sie werden auch als "Feature Flags", "Feature Switches" oder "Release Toggles" bezeichnet. Feature Toggles werden in Anwendungen und Infrastrukturen auf vielfältige Weise eingesetzt, wobei die meisten davon der Risikominimierung dienen.
Sie können zum Beispiel in Anwendungen verwendet werden, um neue Funktionen schrittweise einzuführen, so dass Teams Änderungen an einer kleinen Untergruppe von Benutzern testen können, bevor sie sie für alle freigeben. Auch in der Infrastruktur können Feature Toggles wie Stromkreisunterbrecher wirken und es Ingenieuren ermöglichen, das Verhalten eines installierten Systems aus der Ferne zu steuern.
Wie Feature Toggles funktionieren
Feature Toggles werden in der Regel zu Codebases hinzugefügt, um die Fernsteuerung einer bestimmten Logik zur Laufzeit zu ermöglichen. Im Code wird diese Logik so verpackt, dass sie durch den Status eines Feature Toggles gesteuert werden kann. Wenn der Status des Feature Toggles "an" ist, wird die verpackte Logik ausgeführt. Wenn der Status des Feature Toggles "aus" ist, wird die umschlossene Logik übersprungen.
Wenn eine Anwendung den Status eines Feature Toggles zur Laufzeit wissen möchte, stellt sie eine Anfrage an eine externe Datenquelle oder einen Managed Service wie Optimizely Feature Experimentation. Die Anwendung kann dann auf der Grundlage des zurückgegebenen Status entscheiden, ob die umgeschlagene Logik ausgeführt werden soll oder nicht.
Da die Anwendung den Status von Feature Toggles aus einer entfernten Quelle erhält, kann die Wrapped Logic aus der Ferne gesteuert werden, indem das Flag in der Konfigurationsdatei einfach ein- oder ausgeschaltet wird, ohne dass Code bereitgestellt werden muss. Wenn beispielsweise der Status eines Feature Toggles in Feature Experimentation geändert wird, wird er zur Laufzeit auch in der Anwendung geändert.
Codebases enthalten oft viele Feature Toggles, die verschiedene Teile der Anwendung steuern. Aus diesem Grund werden Feature Toggles in der Regel eindeutige Namen oder Schlüssel zugewiesen, damit sie unterscheidbar sind und die Logik, die sie steuern, beschreiben. Außerdem können Feature Toggles für verschiedene Benutzer oder Zielgruppen einen unterschiedlichen Status haben. Diese eindeutigen Schlüssel sowie Details über den Benutzer oder die Zielgruppe können dann verwendet werden, um den Status eines bestimmten Feature Toggles in einer externen Datenquelle oder beim Feature Experimentieren nachzuschlagen.
Die Vorteile von Feature Toggles
Der Hauptvorteil von Feature Flags besteht darin, dass sie die mit der Freigabe von Änderungen an einer Anwendung verbundenen Risiken mindern. Unabhängig davon, ob es sich um ein neues Feature-Release oder ein kleines Refactoring handelt, besteht immer das Risiko, dass neue Regressionen veröffentlicht werden. Um dieses Risiko zu minimieren, können Änderungen an einer Anwendung mit Feature Toggles versehen werden, so dass sie im Notfall ein- oder ausgeschaltet werden können.
In komplexeren Fällen können Feature Toggles verwendet werden, um Änderungen an kleinen Teilmengen von Benutzern zu testen. Durch die Aktivierung eines Feature Toggles für einen Bruchteil aller Benutzer können Teams Erkenntnisse gewinnen, bevor die Änderungen an alle Benutzer weitergegeben werden. Diese Funktionalität von Feature Toggles wird in der Regel für Feature-Rollouts oder Canary-Releases verwendet, bei denen Änderungen an Anwendungen und Infrastrukturen durch Tests an einer Teilmenge von Benutzern validiert werden. Auf diese Weise können Teams Regressionen frühzeitig erkennen und bei Bedarf zurücksetzen, um das Risiko von Fehlern während der Laufzeit zu verringern.
Feature Toggle Entwicklungsprozess
Der erste Schritt bei der Implementierung eines Feature Toggles besteht darin, es in einer externen Datenquelle oder einem Dienst wie Optimizely zu erstellen und zu definieren. Dazu gehört in der Regel die Wahl eines eindeutigen Namens oder Schlüssels für das Feature Toggle sowie die Festlegung eines Anfangsstatus. Sobald das Feature Toggle definiert ist, können Anwendungen und Infrastrukturen den Status anhand des eindeutigen Schlüssels abfragen.
Nachdem das Feature Toggle in Optimizely oder anderswo definiert wurde, muss sein Status für die Anwendung zugänglich sein. Daher muss der Codebasis Code hinzugefügt werden, der es der Anwendung ermöglicht, den Status eines Feature Toggles aus einer externen Quelle abzurufen. Optimizely Feature Experimentation bietet SDKs für viele wichtige Sprachen und Frameworks, die diese Funktionalität bereitstellen.
Sobald Feature Toggles für die Anwendung zugänglich sind, können sie zu bestimmten Codepfaden hinzugefügt werden, um eine Fernsteuerung zu ermöglichen. Codepfade, die eine Fernsteuerung erfordern, können in eine bedingte Logik verpackt werden, die vor der Ausführung den Status des Feature Toggles überprüft. Wenn der Codepfad dann zur Laufzeit erreicht wird, wird er nur ausgeführt, wenn sich das Feature Flag in einem bestimmten Zustand befindet.
Beispiele für Feature Toggle / Anwendungsfälle
Kanarienvogel-Freigaben
Bei der Freigabe einer neuen Funktion ist es oft sinnvoll, sie mit einer kleinen Gruppe von Benutzern zu testen, bevor sie für alle freigegeben wird. Diese Praxis ist als "Canary Release" oder "Feature-Rollout" bekannt und wird von Teams verwendet, um das Risiko beim Hinzufügen oder Ändern einer Funktion zu minimieren. Feature Toggles können zur Durchführung von Canary Releases verwendet werden, indem sie festlegen, ob die neue Funktion einem bestimmten Benutzer angezeigt werden soll oder nicht, und die Möglichkeit bieten, den Rollout oder Rollback aus der Ferne durchzuführen.
Testen in der Produktion
Aufgrund der Komplexität moderner Bereitstellungssysteme kann es Unterschiede zwischen Test- und Produktionsumgebungen geben, die zu Fehlern führen können, die bei Unit-Tests nicht entdeckt werden können. Durch die Integration von Feature Toggle in den Entwicklungsprozess können Software-Entwicklungsteams neue Funktionen kontrolliert in die Produktionsumgebung einführen und dabei ein kleineres Segmenting ihrer Benutzerbasis anvisieren, um das Risiko zu verringern, neue Funktionen in der Produktion zu testen. Wenn der Test fehlschlägt, kann er leicht rückgängig gemacht werden, indem einfach die Toggle-Konfiguration angepasst wird, ohne dass der Quellcode geändert werden muss.
A/B-Tests
A/B-Tests werden von Teams eingesetzt, um mit neuen Ideen zu experimentieren und Hypothesen anhand von realen Daten zu bestätigen. Sie segmentieren den Datenverkehr in eine von zwei Varianten einer Funktion, so dass die Metriken für jede Variante nebeneinander erfasst werden können. Ein Feature Toggle kann zur Erleichterung eines A/B-Tests verwendet werden, indem er die Variation steuert, in die jeder Benutzer eingeteilt wird. Wenn ein Feature Toggle für einen Benutzer "aus" ist, sieht er die "A"-Variante des Tests, während er, wenn er "an" ist, die "B"-Variante sehen würde.
Stromkreisunterbrecher
Je komplexer eine Anwendung oder Infrastruktur wird, desto schwieriger kann es werden, sie zu pflegen und bei einem Ausfall zu stabilisieren. Feature Toggles sind eine gute Möglichkeit, die Probleme der Wartbarkeit und Wiederherstellbarkeit in einem wachsenden System zu lösen. Feature Toggles, die wie Stromkreisunterbrecher oder Kill Switches verwendet werden, bieten Teams eine zentralisierte, ferngesteuerte Möglichkeit, Komponenten eines bereitgestellten Systems zu kontrollieren und auf Ausfälle zu reagieren.
Trunk-basierte Bereitstellung
Da Feature Toggles die schnelle Bereitstellung und das Rollback von neuem Code ermöglichen, können sie zur Unterstützung eines trunk-basierten Entwicklungsprozesses eingesetzt werden, bei dem Codeänderungen am Hauptstamm vorgenommen werden können, anstatt mehrere Feature Branches zu haben, die dann in Github oder anderen Source Management Plattformen zusammengeführt und abgeglichen werden müssen. Dies kann zu schnelleren Release-Zyklen und weniger Zeitaufwand für die Fehlersuche führen.
Feature Toggles und Continuous Delivery
Die kontinuierliche Integration und Continuous Delivery (CI/CD) wurde von dem einflussreichen Softwareentwickler Martin Fowler propagiert und ist eine Disziplin der Softwareentwicklung, bei der Software jederzeit für die Produktion freigegeben werden kann. Sie wurde von führenden Softwareunternehmen auf der ganzen Welt übernommen, von deren Teams nun erwartet wird, dass sie schnell stabile und fehlerfreie Software für Ihre Benutzer bereitstellen.
Feature Flags verbessern CI/CD, indem sie eine "kontinuierliche" Entwicklung möglich machen. Die Feature Flags und Feature Toggles sind eine wichtige Funktion bei der Implementierung von Continuous Delivery und ermöglichen die Trennung von Feature-Rollout und Code-Deployment. Unvollständige Features können in die Produktionscodebasis eingebunden werden, aber hinter Feature Flags versteckt werden.
Mit Continuous Delivery und Feature Flags Management kann ein Team seine Features in großem Umfang einführen, kontrollieren und messen.
Optimizely und Feature Toggles
Optimizely ist führend im Bereich Progressive Delivery und Experimentieren, und wir bieten eine Reihe verschiedener Lösungen für das Feature Flag Management an.
Optimizely Server-side Experimentation ist unsere Enterprise Feature Flagging- und Experimentier-Suite, mit der Entwicklungsteams Features verwalten und Feature-Tests auf jedem mit dem Internet verbundenen Gerät durchführen können, wobei SDKs für die gängigsten Sprachen und Frameworks wie Node, Python, Ruby, Go, React, Swift und C# zur Verfügung stehen.
Für Teams, die einfach nur mit Feature Toggles beginnen möchten, ist Optimizely Free Feature Flagging eine Feature Flagging-Lösung, für die Sie sich anmelden und sofort einsetzen können, um Feature Flags ohne die A/B-Testing-Funktionalität zu nutzen, und zwar völlig kostenlos (im Gegensatz zu Wettbewerbern wie LaunchDarkly).
Feature Toggles sind ein leistungsfähiges Werkzeug, das Sie in Ihrer Softwareentwicklungspraxis einsetzen können, und Optimizely Feature Experimentation macht den Einsatz einfacher denn je, um Risiken zu verringern, Entwicklungszeiten zu verkürzen und neue Funktionen in Ihrer Software zu testen.