Co to jest "flaga funkcji"?

Highscalability wspomnieć flagi funkcji tutaj:

Http://www.iheavy.com/2011/08/26/5-things-are-toxic-to-scalability/

Czym dokładnie są flagi funkcji?

Thanks

Author: dotnetdev, 2011-10-10

9 answers

'feature flag' (lub feature Toggle) to możliwość łatwego włączania/wyłączania funkcji (podsekcji) aplikacji:

  • Być może poprzez re-deploy, lub
  • jakaś wewnętrzna strona, na której strony / funkcje mogą być przełączane na żywo.

Myślę, że na przykładzie było, że warto mieć kontrolę, aby zmniejszyć zestaw funkcji, jeśli trzeba, powiedzmy, zmniejszyć zapytania db, jeśli obciążenie jest zbyt wysokie.

Istnieje mnóstwo innych powodów TY chciałbym użyć tego tho - jeden z głównych jest enabling Continuous Delivery : pchanie rzeczy do produkcji / na żywo, ale mając funkcję wyłączoną / przełączoną, dopóki nie zostanie zakończona. Często używamy tego, co nazywamy "dev cookie", aby pokazać niedokończone funkcje tylko zespołowi deweloperów. W ten sposób możemy przetestować częściowo ukończone prace w produkcji (oh yeh! czy istnieje lepsza integracja?) przez wiele wydań/wdrożeń, zanim "rozpiszemy" (zakończymy) go i stanie się widoczny dla publiczne.

Oto prosty pakiet, który pomoże Ci to zrobić w ASP.NET MVC land: https://github.com/cottsak/DevCookie (pełne ujawnienie: jestem autorem)

Fowler ma również znacznie dłuższy artykuł niż ten linkowany powyżej z dużo większą ilością szczegółów .

Ten post (również na stronie Fowlera) wyjaśnia różne rodzaje strategii przełączania . [[19]}DevCookie obsługuje strategię opartą na mainline/trunk i jest nazywany "Release Toggle " w artykuł.

Adil ' s answer podkreśla, że istnieje wiele terminów i powodów, dla których możesz chcieć części tej infrastruktury. Pamiętaj, że możesz potrzebować tylko niektórych z tych rzeczy. Na przykład mogę chcieć tylko włączyć prosty i zwinny przepływ pracy w zakresie wdrażania/dostarczania, a więc wystarczy prosta Infrastruktura. Jeśli zdecydujesz, że chcesz przejść do pełnego # leanstartup eksperymentowania z A / B, testów kohortowych i takich rzeczy, jak kontrolowane roll-out, powinieneś rozważ narzędzie analityczne (np. Heap ), który ułatwia te metodologie rozwoju Oparte na danych jako odrębne rozwiązanie. Infrastruktura przełączania, która wykonuje wszystkie powyższe czynności, doprowadzi do nadęcia i niepotrzebnej złożoności.

 65
Author: Matt Kocaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-24 02:29:03

Feature Flag to technika polegająca na wyłączeniu niektórych funkcji aplikacji, poprzez konfigurację, bez wdrażania nowego kodu.

Flagi funkcji odgrywają kluczową rolę w systemie CI, gdzie funkcje są stale wdrażane, ale niekoniecznie "wypuszczane" do produkcji.

Więcej informacji tutaj:

-- EDIT:

Feature Flags Java implementation .

 22
Author: Maxim Veksler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-15 21:12:55

Flagi funkcji, przełączniki funkcji, eksperymenty i kontrolowane wdrożenia to synonimy prostego, ale potężnego pomysłu: oddzielenie kodu od wdrożenia funkcji. Mówiąc wprost, jest to możliwość popchnięcia zobowiązań twojej funkcji do produkcji, wybierając, kto z Twoich klientów - jeśli ktokolwiek w ogóle-zobaczy tę funkcję.

Spopularyzował je po części Strażnik portalu Facebook. Lix LinkedIn to kolejny dobry przykład.

Przyjęcie tej prostej idei kładzie Fundacja wielu najlepszych praktyk, w tym:

Continuous Deployment / Delivery - wielokrotne wprowadzanie kodu do produkcji w ciągu jednego dnia.

Rozwój Trunk / Mainline - gałęzie funkcji powinny być tworzone tylko dla żądań pull, a nie dla długotrwałego rozwoju funkcji.

Nigdy więcej pociągów Release , aby bagatelizować rzeczy.

Testy QA / Perf w produkcji - prawdziwe testy QA i wydajności są na infrastrukturze produkcyjnej z produkcją korki. Nie trać czasu na budowanie rozległych laboratoriów wydajności i środowisk inscenizacyjnych.

Experimentation - dowiedz się, jak nowa funkcja przesuwa igłę na Twoich KPI.

Unikanie poprawek lub cofania kodu w przypadku wystąpienia problemów - zarówno poprawki, jak i cofanie kodu są stresujące, zajmują dużo czasu i prowadzą do większej liczby problemów niż jest to konieczne. Zamiast tego wyłącz tę funkcję lub obniż ją.

Inni wspominali o bibliotekach open source. Dobry przykład pełnego rozwiązanie-podobnie jak Gatekeeper i LiX-to Split . Pracuję dla Splitu.

 14
Author: Adil Aijaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-27 07:47:15

Flaga funkcji (znana również jako funkcja przerzucania lub przełącznik funkcji) jest przełącznikiem, który włącza lub wyłącza potencjalnie kosztowną funkcję w razie potrzeby(np. To da ci trochę czasu, dopóki nie zwiększysz skali, lub dopóki skok obciążenia nie zniknie.

Oto przykład z dokumentacji SWIG .

 8
Author: Michael Petrotta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-09 23:56:22

Jest tu wiele świetnych odpowiedzi, wszystkie kierując się ważną, podstawową definicją spopularyzowaną wMartin Fowler post:

są to fragmenty kodu, które " pozwalają zespołom modyfikować zachowanie systemu bez zmiany kodu."

Więc historycznie myśleliśmy o nich jako o pseudo-kodzie:

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

Jest to całkowicie dokładny sposób myślenia o tym, a zarówno Matt, jak i Adil ładnie rozszerzają go o różne taktyczne przypadki użycia dla tej funkcji flaga.

Ale chciałbym zaoferować zmienioną definicję, która odzwierciedla, jak rzeczywistość ewoluowała w ciągu sześciu lat i zmieniła się od czasu, gdy dotnetdev zadał pierwotne pytanie. Pracuję dla Rollout.io / align = "left" /

Mówiąc najprościej, flagi funkcji nie są już tylko sposobem włączania i wyłączania bitów funkcjonalności w aplikacji. To tak, jakby odpowiedzieć "co to jest element linii faktury", mówiąc " to opis i kwota waluty."Prawda, ale nie jeździ w szerszym punkcie samej faktury.

Flagi funkcyjne są taktycznymi elementami nadrzędnego rozwiązania strategicznego w nowoczesnym oprogramowaniu. Są to środki, za pomocą których można odroczyć ważną logikę decyzji w kodzie do czasu uruchomienia, gdy masz więcej informacji. I, być może najważniejsze, nie występują już tylko w izolacji, z jednym sprawdzeniem, czy numer wersji jest większy niż 2.7, czy nie; organizacje, które używają są one zazwyczaj włączane jako część kompleksowego, systemowego podejścia produktowego.

Jak już wspominali inni, Facebook i LinkedIn były pionierami w tym zakresie, ale w 2018 r. robi to wiele organizacji. Odkładają pytania logiki decyzyjnej dla środowiska uruchomieniowego w ramach strategii rozwoju, strategii operacyjnej( lub strategii DevOps, jeśli chcesz) i strategii produktu. Oto przykłady takich pytań.

  • Kto powinien zobaczyć nowy ekran administratora, że jesteśmy i kiedy?
  • jaki poziom członkostwa jest wymagany, aby odblokować Easter egg?
  • kiedy powinniśmy przejść do nowej bazy danych?
  • czy powinniśmy umieścić zdjęcie geparda lub orła na przycisku kasy, aby zwiększyć konwersje?

Aby mieć aplikację, która odroczy znaczną liczbę takich decyzji do czasu uruchomienia, nie możesz dodawać FLAG funkcji do aplikacji w sposób ad-hoc lub pogrążysz się w technicznym długu. Potrzebujesz, w dzisiejszych czasach, aby mieć kompleksową strategię zarządzania FLAG funkcji, która obejmuje kilka różnych składników.

  • Toggle points są używane do zmiany zachowania nowych funkcji.
  • Wiele punktów przełączania łączy się, tworząc router przełączający . Router przełączający określa stan funkcji.
  • Toggle context dostarcza routerowi toggle niezbędne informacje kontekstowe (np. konkretny użytkownik).
  • Przełącz konfiguracja dostarcza routerowi przełączania informacji o środowisku.

Więc, w końcu, co to są flagi funkcji?

Są ważną częścią szerszej strategii posiadania aplikacji, która może być dostosowana zarówno do potrzeb technicznych, jak i rynkowych.
 6
Author: Erez Rosovsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-09 17:26:09

Flagi funkcji (lub przełączniki funkcji) umożliwiają zdalne włączanie funkcji w aplikacji bez konieczności ponownego budowania/ponownego wdrażania aplikacji. Dzięki temu możesz wdrożyć kod do produkcji, ale nie zwolnić funkcji, dopóki nie będziesz gotowy. Możesz kierować do konkretnych użytkowników, aby umożliwić użytkownikom beta testowanie nowej funkcji.

W naszej firmie korzystaliśmy wcześniej z LaunchDarkly i innych sugestii z FeatureFlags.io . próbowaliśmy również użyj zdalnej konfiguracji Firebase , aby spróbować to zadziałać, jednak okazało się, że nie jest to odpowiednie do tego celu.

W końcu opracowaliśmy naszą własną wersję o nazwie Bullet Train , którą mamy open source. Łączy w sobie zarówno flagi/Przełączniki funkcji, jak i zdalną konfigurację.

 3
Author: TStu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-14 13:51:20

Rozumiem, że flagi funkcji pomagają w bramce funkcjonalności, decydując, którzy użytkownicy otrzymują określone funkcje.

Załóżmy na przykład, że chcesz, aby użytkownicy wersji beta zobaczyli nową funkcję. Możesz "przełączyć" tę funkcję dla użytkowników beta, a reszta użytkowników jej nie zobaczy.

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
 }

Testujęflagi funkcji LaunchDarkly dla niektórych testów front-endowych JS A/B - wydaje się działać dobrze. Możesz również sprawdzić ta strona dla przełączników funkcji i feature flag libraries .

 1
Author: Hbitspark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-12 06:01:40

Feature Flags zasadniczo daje możliwość włączania i wyłączania funkcji bez wprowadzania zmian w kodzie lub wydawania nowej wersji. Jest to ważne rozwiązanie szczególnie dla twórców aplikacji mobilnych, ponieważ nie mają oni kontroli nad aktualizacją aplikacji do nowej wersji.

Istnieje kilka firm oferujących tę usługę dla aplikacji mobilnych deweloperzy.

 0
Author: OFK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-19 14:49:17

W mojej firmie używamy FLAG funkcji dla każdej nowej funkcji, którą wprowadzamy w naszej aplikacji SaaS. Oprócz korzyści płynących z wydajności, pozwala nam to na stopniowe wprowadzanie nowych funkcji-najpierw wprowadzanie nowych funkcji do zaawansowanych użytkowników, uzyskiwanie od nich opinii i improwizowanie, zanim będziemy mogli wdrożyć je do wszystkich użytkowników.

Pozwala nam również dostosować ofertę do indywidualnych użytkowników-zaawansowani użytkownicy chcą wszystkich funkcji; zwykli użytkownicy mogą chcieć tylko podstawowych rzeczy i mogą się mylić przez wszystkich potężne złożone funkcje. Pozwala to również naszemu zespołowi sprzedaży na sprzedaż.

I oczywiście, jak zauważyli inni, jeśli stwierdzimy, że funkcja powoduje pogorszenie wydajności, możemy po prostu wyłączyć tę jedną funkcję(dla wszystkich klientów lub dla jednego klienta, który powoduje problem).

 0
Author: Dharmendar Kumar 'DK',
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-19 23:50:44