it-swarm.com.de

Was ist eine "Merkmalsflagge"?

Highscalability-Merkmalsflaggen hier:

http://www.iheavy.com/2011/08/26/5-things-are-oxic-to-scalability/

Was genau sind Merkmalsflags?

Vielen Dank

75
dotnetdev

Ein "Feature-Flag" (oder Feature Toggle ) ist die Möglichkeit, Features (Unterabschnitte) Ihrer Anwendung auf einfache Weise ein-/auszuschalten: 

  • vielleicht über eine erneute Bereitstellung oder
  • einige interne Seiten, auf denen Seiten/Funktionen live umgeschaltet werden können.

Ich denke, das Beispiel dort war, dass es praktisch ist, das Steuerelement zu haben, um das Feature-Set etwas zu reduzieren, wenn Sie beispielsweise db-Abfragen reduzieren müssen, wenn die Last zu hoch ist. 

Es gibt Haufen aus anderen Gründen , aus denen Sie diese Option verwenden möchten - einer der Hauptgründe ist die Aktivierung von Continuous Delivery : Sie können Dinge in Produktion/Live verschieben, wobei die Funktion jedoch deaktiviert/umgeschaltet ist, bis sie abgeschlossen ist. Wir verwenden häufig ein so genanntes "dev-Cookie", um nur dem Entwicklerteam unvollständige Funktionen anzuzeigen. Auf diese Weise können wir die teilweise abgeschlossene Arbeit in der Produktion testen (oh ja, gibt es eine bessere Integration?) Über mehrere Releases/Bereitstellungen, bevor wir sie abblocken (abgeschlossen) und sie für die Öffentlichkeit sichtbar werden.

Hier ist ein einfaches Paket, das Sie in ASP.NET MVC Land unterstützt: https://github.com/cottsak/DevCookie (vollständige Offenlegung: Ich bin der Autor)

Fowler hat auch einen viel längeren Artikel als der oben verlinkte mit viel mehr Details .

Dieser Beitrag (auch auf der Website von Fowler) erläutert die verschiedenen Arten von Umschaltstrategien . DevCookie unterstützt die Mainline-/Trunk-basierte Strategie und wird im Artikel als " Release Toggle " bezeichnet. 

Adils Antwort hebt hervor, dass es viele Begriffe und Gründe gibt, warum Sie etwas von dieser Infrastruktur wünschen. Denken Sie daran, dass Sie möglicherweise nur einige dieser Dinge benötigen. Ich möchte zum Beispiel nur einen einfachen und agilen Bereitstellungs-/Bereitstellungsworkflow ermöglichen, so dass eine einfache Infrastruktur ausreicht. Wenn Sie sich dann für das vollständige #leanstartup -Experiment mit A/B, Kohortentests und Dinge wie kontrolliertes Rollout entscheiden, sollten Sie ein Analysewerkzeug (z. B. Heap ) in Betracht ziehen, das diese Daten erleichtert -getriebene Entwicklungsmethoden als eigenständige Lösung. Eine umschaltbare Infrastruktur, die alle oben genannten Funktionen erfüllt, führt zu Aufblähung und unnötiger Komplexität. 

72
Matt Kocaj

Feature-Flag ist eine Technik, mit der einige Funktionen Ihrer Anwendung über die Konfiguration deaktiviert werden können, ohne neuen Code bereitzustellen.

Feature-Flags spielen eine Schlüsselrolle im CI-Schema, bei dem Features ständig bereitgestellt, jedoch nicht unbedingt in der Produktion "freigegeben" werden.

Mehr Infos hier:

- BEARBEITEN:

Feature Flags Java-Implementierung .

22
Maxim Veksler

Feature-Flags, Feature-Toggles, Experimente und kontrollierte Rollouts sind Synonyme für eine einfache, aber leistungsstarke Idee: Separate Code-Bereitstellung von Feature-Rollouts. Im Grunde genommen ist es die Möglichkeit, die Commits Ihrer Funktionen in die Produktion zu bringen und dabei zu entscheiden, wer unter Ihren Kunden - wenn überhaupt jemand - diese Funktion sehen kann.

Sie wurden teilweise von Facebook Gatekeeper populär gemacht. LinkedIn LiX ist ein weiteres gutes Beispiel.

Die Umsetzung dieser einfachen Idee bildet die Grundlage für viele bewährte Verfahren, darunter:

Continuous Deployment/Delivery - Mehrere Codes werden an einem Tag in die Produktion verschoben.

Trunk/Mainline-Entwicklung - Feature-Zweige sollten nur für Pull-Anforderungen erstellt werden, nicht für die langlebige Feature-Entwicklung. 

No More Release Trainiere, um die Dinge zu zerstören.

QA/Perf-Testing in der Produktion - Echte QS- und Leistungstests finden in der Produktionsinfrastruktur mit Produktionsverkehr statt. Verschwenden Sie keine Zeit mit dem Aufbau umfangreicher Leistungslabore und Inszenierungsumgebungen.

Experimentation - wissen, wie eine neue Funktion die Nadel auf Ihren KPIs bewegt.

Vermeiden von Hotfixes oder Code-Rollbacks bei Problemen - Sowohl Hotfixes als auch Code-Rollbacks sind anstrengend, dauern viel Zeit und führen zu mehr Problemen als nötig. Deaktivieren Sie stattdessen die Funktion oder fahren Sie sie herunter.

Andere haben Open-Source-Bibliotheken erwähnt. Ein gutes Beispiel für eine vollständige Lösung - wie Gatekeeper und LiX - ist Split . Ich arbeite für Split.

15
Adil Aijaz

Ein Feature-Flag (auch Feature Flipping oder Feature Toggle ) ist ein Schalter zum Aktivieren oder Deaktivieren eines potenziell teuren Features (z. B. wenn ein Standort mit unerwartetem Verkehr belastet wird). Dies kostet Sie ein wenig Zeit, bis Sie die Geschwindigkeit erhöhen oder die Lastspitze wegfällt.

Hier ist ein Beispiel aus der SWIG-Dokumentation .

8

Hier gibt es viele großartige Antworten, die alle auf die wichtige, grundlegende Definition im Martin Fowler Post eingehen:

Es handelt sich um Bits, die "das Teamverhalten des Moduls ohne Änderung des Codes ändern". 

Wir haben sie also historisch betrachtet, wie durch den Pseudocode dargestellt:

if(app_settings["beta-mode"] == "true")
  showAwesomeNewGui();
else
  sameOldSnoozeFeset();

Das ist eine absolut genaue Art und Weise, darüber nachzudenken, und sowohl Matt als auch Adil erweitern es mit einer Vielzahl taktischer Anwendungsfälle für die Feature-Flagge.

Ich möchte jedoch eine überarbeitete Definition anbieten, die widerspiegelt, wie sich die Realität in den sechs Jahren entwickelt hat und seit sich dotnetdev der ursprünglichen Frage gestellt hat. Ich arbeite für Rollout.io , eine Feature-Flag-Plattform. Ich hatte also einen Platz in der ersten Reihe für diese Entwicklung.

Einfach gesagt, Feature-Flags sind nicht mehr nur eine Möglichkeit, einige Funktionen in Ihrer Anwendung ein- und auszuschalten. Das ist wie das Beantworten von "Was ist ein Rechnungsposten", indem er sagt, "es handelt sich um eine Beschreibung und einen Währungsbetrag". Richtig, aber es wird nicht an der breiteren Stelle der Rechnung selbst gefahren.

Feature-Flags sind die taktischen Elemente einer übergeordneten strategischen Lösung in moderner Software. Sie sind die Mittel, mit denen Sie wichtige Entscheidungslogik in Ihrem Code bis zur Laufzeit verschieben, wenn Sie mehr Informationen haben. Am wichtigsten ist jedoch, dass sie nicht mehr nur isoliert auftreten, sondern nur einmal überprüfen, ob die Versionsnummer größer als 2,7 ist oder nicht. Organisationen, die sie verwenden, beziehen sie normalerweise in einen umfassenden, systemweiten Produktansatz ein.

Wie bereits erwähnt, haben Facebook und LinkedIn Pionierarbeit geleistet, aber im Jahr 2018 tun dies viele Organisationen. Sie verschieben Entscheidungslogikfragen zur Laufzeit als Teil der Entwicklungsstrategie, der Betriebsstrategie (oder DevOps-Strategie, wenn Sie möchten) und der Produktstrategie. Hier sind Beispiele für solche Fragen.

  • Wer sollte den neuen Admin-Bildschirm sehen, den wir einführen und wann?
  • Welche Mitgliedschaftsstufe ist erforderlich, um dieses Osterei freizuschalten?
  • Wann sollten wir auf die neue Datenbank umstellen?
  • Sollten wir ein Bild von einem Gepard oder einem Adler auf den Checkout-Button setzen, um die Konvertierung zu verbessern?

Um eine Anwendung zu haben, die eine beträchtliche Anzahl solcher Entscheidungen bis zur Laufzeit zurückstellt, können Sie Feature-Flags nicht ad hoc in Ihre Anwendung werfen, da Sie sich sonst in technischen Schulden verstecken. Heutzutage benötigen Sie eine umfassende Verwaltungsstrategie für Feature-Flags, die einige verschiedene Komponenten umfasst.

  • Umschaltpunkte werden verwendet, um das Verhalten für neue Funktionen zu ändern.
  • Mehrere Umschaltpunkte bilden einen Toggle-Router. Ein Toggle-Router bestimmt den Status einer Funktion.
  • Toggle context liefert dem Toggle-Router die notwendigen Kontextinformationen (z. B. bestimmten Benutzer).
  • Toggle configuration liefert die umschaltbaren Routerinformationen zur Umgebung.

Was sind also letztendlich Feature-Flags?

Nun, sie sind ein wichtiger Teil einer umfassenderen Strategie für eine Anwendung, die sowohl an die technischen Anforderungen als auch an die Marktanforderungen angepasst werden kann. 

7
Erez Rosovsky

In meiner Firma hatten wir dafür eine eigene Lösung. Wir haben einen Dienst erstellt, der für jede App eine herunterladbare Konfigurationsdatei (.json) bereitstellt. In dieser Konfiguration haben wir die Flags für die Features gespeichert. Basierend auf dieser Konfiguration kann die App die aktuelle Funktion ein- oder ausblenden. (Zum Beispiel ein Menüelement in der Seitenleiste ein- oder ausblenden).

Wir haben auch eine interne Administrationsseite erstellt, auf der wir die Feature-Flags konfigurieren können. Es hat eine Weile ganz gut geklappt, aber danach hätten wir gerne User-Targeting und A/B-Tests durchgeführt. Eigenentwicklung Es schien zu aufwendig, also entschieden wir uns für eine Lösung von Drittanbietern. Wie hier bereits erwähnt, gibt es dafür viele Lösungen.

Wir haben uns für ConfigCat entschieden, weil es gleichzeitig angepasste Zielgruppen und prozentuales Rollout unterstützt. Sie können die unterstützten Open-Source-DVDs auf github überprüfen.

5
mon

Mit Feature-Flags (oder Feature-Toggles) können Sie Features remote in einer Anwendung aktivieren, ohne die Anwendung neu erstellen/implementieren zu müssen .. Dadurch können Sie den Code für die Produktion bereitstellen, die Funktion jedoch erst freigeben, wenn Sie bereit sind Sie können bestimmte Benutzer gezielt ansprechen, sodass Sie Ihren Beta-Benutzern eine neue Funktion zum Testen zur Verfügung stellen können.

In unserem Unternehmen haben wir bereits LaunchDarkly und andere Vorschläge von FeatureFlags.io verwendet. Wir haben auch versucht, Firebases Remote-Konfiguration zu verwenden, um dies zu versuchen, aber wir fanden, dass es für diesen Zweck nicht wirklich geeignet war.

Am Ende haben wir eine eigene Version namens Bullet Train entwickelt, die wir als Open Source anbieten. Es kombiniert sowohl Feature Flags/Toggles als auch Remote Config.

3
TStu

Merkmalsflags werden für verschiedene Zwecke verwendet. Die Grundidee besteht darin, die Kontrolle darüber, welcher Benutzer welche Funktion sieht, an ein Remote-Dashboard oder ein Back-Office zu delegieren.

Sobald eine Funktion im Code markiert ist, können Sie jetzt mit verschiedenen Methoden feststellen, welcher Benutzer sie in Ihrer Anwendung sieht: 1. Ein/Aus - Zeigt die Funktion allen oder keinem Ihrer Benutzer an . 2. Gradual Release - Zeigen Sie die Funktion nur einem Prozentsatz Ihrer Benutzer an, und zeigen Sie sie dann schrittweise allen Benutzern an. 3. Targeting - Zeigt die Funktion für bestimmte Benutzer basierend auf Eigenschaften oder Merkmalen dieses Benutzers an.

Werkzeuge, die bei der Steuerung von Feature-Flags (Booleans) und Feature-Konfigurationen (Zeichenfolgen, Zahlen usw.) hilfreich sind, werden normalerweise als Feature Management Platforms .__ bezeichnet. Es gibt einen hervorragenden Dienst für das Feature-Management mit dem Namen Configz.io . _

3

Ich verstehe, dass Feature-Flags Ihnen beim Öffnen der Funktionalität helfen, indem Sie entscheiden, welche Benutzer bestimmte Funktionen erhalten.

Angenommen, Sie möchten nur, dass Ihre Beta-Benutzer eine neue Funktion sehen. Sie würden diese Funktion für Beta-Benutzer "umschalten" und der Rest Ihrer Benutzer würde es nicht sehen.

LDUser user = new LDUser("[email protected]");

boolean showFeature = ldClient.toggle("your.feature.key", user, false);

if (showFeature) {
     // application code to show the feature 
 }
else {
     // the code to run if the feature is off
 }

Ich teste LaunchDarklys Feature-Flags für einige Front-End-Tests mit JS A/B - scheint gut zu funktionieren. Sie können this site auch auf Feature-Toggles und Feature-Flag-Bibliotheken überprüfen.

1
Hbitspark

Feature-Flags bieten Ihnen grundsätzlich die Möglichkeit, eine Funktion ein- und auszuschalten, ohne Änderungen am Code vorzunehmen oder eine neue Version zu veröffentlichen. Dies ist eine wichtige Lösung, insbesondere für Entwickler von mobilen Anwendungen, da sie nicht die Möglichkeit haben, dass Benutzer ihre Anwendung auf eine neue Version aktualisieren.

Es gibt mehrere Unternehmen, die diesen Service für Entwickler von mobilen Anwendungen anbieten.

0
OFK

In meinem Unternehmen verwenden wir Feature-Flags für jedes neue Feature, das wir in unserer App SaaS einführen. Neben den Vorteilen für die Leistung können wir auch schrittweise neue Funktionen einführen. Neue Funktionen werden eingeführt, um die Benutzer vorrangig zu nutzen, Feedback von ihnen zu erhalten und sie zu improvisieren, bevor wir sie allen Benutzern zur Verfügung stellen können. 

Es ermöglicht uns auch, das Angebot an einzelne Benutzer anzupassen - Power-User wünschen alle Funktionen. Einfache Benutzer möchten vielleicht nur das Grundlegende und können von den leistungsstarken komplexen Funktionen verwirrt werden. Es ermöglicht auch unserem Verkaufsteam einen Up-Selling.

Wie andere bereits erwähnt haben, können wir diese Funktion einfach deaktivieren, wenn wir feststellen, dass ein Feature einen Leistungsabfall verursacht (entweder für alle Clients oder für den einen Client, der ein Problem verursacht).