Feature-Flags - AWS Präskriptive Leitlinien

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Feature-Flags

Feature-Flags können in Mikro-Frontends implementiert werden, um die Koordination von Tests und Freigaben von Funktionen in mehreren Umgebungen zu erleichtern. Die Feature-Flag-Technik besteht darin, Entscheidungen in einem auf Booleschen Werten basierenden Speicher zu zentralisieren und das Verhalten darauf aufbauend zu steuern. Sie wird häufig verwendet, um Änderungen, die bis zu einem bestimmten Zeitpunkt verborgen bleiben können, im Hintergrund zu verbreiten und gleichzeitig neue Versionen für neue Funktionen freizuschalten, die andernfalls blockiert würden, wodurch die Teamgeschwindigkeit reduziert wird.

Stellen Sie sich das Beispiel von Teams vor, die an einer Micro-Frontend-Funktion arbeiten, die an einem bestimmten Datum veröffentlicht wird. Die Funktion ist fertig, muss aber zusammen mit einer Änderung an einem anderen Mikrofrontend veröffentlicht werden, das unabhängig veröffentlicht wird. Eine Blockierung der Veröffentlichung beider Mikrofrontends würde als Anti-Pattern angesehen werden und würde das Risiko erhöhen, wenn sie eingesetzt werden.

Stattdessen können die Teams in einer Datenbank ein boolesches Feature-Flag erstellen, das beide während der Renderzeit verwenden (vielleicht durch einen HTTP-Aufruf an eine gemeinsam genutzte Feature-Flags-API). Die Teams können die Änderung sogar in einer Testumgebung veröffentlichen, in der der boolesche Wert so eingestellt ist, dass er projektübergreifende funktionale und nichtfunktionale True Anforderungen verifiziert, bevor mit der Produktion begonnen wird.

Ein weiteres Beispiel für die Verwendung von Feature-Flags ist die Implementierung eines Mechanismus zum Überschreiben des Werts eines Flags, indem ein bestimmter Wert über den QueryString Parameter festgelegt oder eine bestimmte Testzeichenfolge in einem Cookie gespeichert wird. Produkteigentümer können an Funktionen iterieren, ohne die Veröffentlichung anderer Funktionen oder Bugfixes bis zum Startdatum zu blockieren. Wenn der Flaggenwert in der Datenbank am angegebenen Datum geändert wird, wird die Änderung sofort in der Produktion sichtbar, ohne dass teamübergreifend koordinierte Releases erforderlich sind. Nach der Veröffentlichung einer Funktion bereinigen die Entwicklungsteams den Code, um das alte Verhalten zu entfernen.

Zu den weiteren Anwendungsfällen gehört die Veröffentlichung eines kontextbasierten Feature-Flag-Systems. Wenn beispielsweise eine einzelne Website Kunden in mehreren Sprachen bedient, ist eine Funktion möglicherweise nur für Besucher eines bestimmten Landes verfügbar. Das Feature-Flag-System kann davon abhängig sein, dass der Verbraucher den Länderkontext sendet (z. B. durch Verwendung des Accept-Language HTTP-Headers), und je nach Kontext kann es zu einem unterschiedlichen Verhalten kommen.

Feature-Flags sind zwar ein leistungsstarkes Tool, um die Zusammenarbeit zwischen Entwicklern und Produktbesitzern zu erleichtern, sie sind jedoch auf die Sorgfalt der Mitarbeiter angewiesen, um eine signifikante Verschlechterung der Codebasis zu vermeiden. Wenn Flags für mehrere Funktionen aktiviert bleiben, kann dies die Komplexität bei der Behebung von Problemen erhöhen, die JavaScript Paketgröße erhöhen und letztendlich technische Schulden anhäufen. Zu den üblichen Maßnahmen zur Schadensbegrenzung gehören:

  • Unit-Tests für jedes Feature hinter einem Flag, um die Wahrscheinlichkeit von Fehlern zu verringern, was zu längeren Feedback-Schleifen in den automatisierten CI/CD-Pipelines führen kann, in denen die Tests ausgeführt werden

  • Entwicklung von Tools zur Messung der Zunahme der Paketgröße bei Codeänderungen, die bei Code-Reviews abgemildert werden können

AWS bietet eine Reihe von Lösungen zur Optimierung von A/B-Tests am Edge mithilfe von CloudFront Amazon-Funktionen oder Lambda @Edge. Diese Ansätze tragen dazu bei, die Komplexität der Integration einer Lösung oder des vorhandenen SaaS-Produkts, das Sie zur Bestätigung Ihrer Annahmen verwenden, zu reduzieren. Weitere Informationen finden Sie unter A/B-Tests.