Funktionsväxling
Innehållsförteckning
Vad är en funktionsväxling?
Inom programvaruutveckling är en funktionsväxling en mekanism som gör det möjligt att slå på eller av kod på distans utan att behöva göra en deploy. Feature toggles används ofta av produkt-, teknik- och DevOps-team för canary releases, A/B-testning, produktexperimentering och kontinuerlig driftsättning.
De kallas även "feature flags", "feature switches" eller "release toggles" och har en mängd olika användningsområden i applikationer och infrastruktur, varav de flesta är riskminimerande.
De kan till exempel användas i applikationer för att gradvis rulla ut nya funktioner, vilket gör det möjligt för team att testa ändringar på en liten delmängd användare innan de släpps till alla. På samma sätt kan funktionsväxlingar fungera som strömbrytare i infrastruktur, så att ingenjörer kan fjärrstyra ett distribuerat systems beteende.
Hur funktionsväxlingar fungerar
Funktionsväxlingar läggs vanligtvis till i kodbaser för att möjliggöra fjärrstyrning av viss logik vid körning. I koden är denna logik inkapslad så att den kan styras av statusen för en funktionsväxling. Om statusen för funktionsväxlingen är "on" körs den inkapslade logiken. Om statusen för funktionsväxlingen är "av" hoppas den inkapslade logiken över.
När en applikation vill veta statusen för en funktionsväxling vid körning gör den en begäran till en extern datakälla eller managed service som Optimizely Feature Experimentation. Applikationen kan sedan bestämma om den omslutna logiken ska köras eller inte baserat på den returnerade statusen.
Eftersom programmet hämtar statusen för feature flags från en fjärrkälla kan den inkapslade logiken styras på distans, helt enkelt genom att slå på eller av flaggan i konfigurationsfilen utan att kod behöver distribueras. Om till exempel statusen för en funktionsväxling ändras i Feature Experimentation, ändras den också i programmet vid körning.
Kodbaser innehåller ofta många funktionsväxlingar som styr olika delar av programmet. På grund av detta tilldelas funktionsväxlingar vanligtvis unika namn eller nycklar för att kunna göra skillnad och beskriva den logik som de styr. Dessutom kan funktionsväxlingarna ha olika status för olika användare eller målgrupper. Dessa unika nycklar samt information om användaren eller målgruppen kan sedan användas för att slå upp statusen för en viss funktionsväxling i en extern datakälla eller Feature Experimentation.
Fördelarna med funktionsväxling
Den främsta fördelen med feature flags är att det minskar riskerna med att släppa ändringar i en applikation. Oavsett om det handlar om en ny funktion eller en liten refaktor finns det alltid en inneboende risk för att nya regressioner släpps. För att minska detta kan ändringar i en applikation placeras bakom funktionsväxlingar, vilket gör att de kan slås på eller av i en nödsituation.
I mer komplexa fall kan funktionsväxlingar användas för att testa ändringar på små undergrupper av användare. Genom att aktivera en funktionsväxling för en bråkdel av alla användare kan team få insikter innan ändringar rullas ut till alla. Denna funktionalitet för funktionsväxling används vanligtvis för utrullning av funktioner eller canary releases, vilket innebär att validera ändringar i applikationer och infrastruktur genom att testa dem på en delmängd av användarna. Dessa metoder gör det möjligt för team att fånga upp regressioner tidigt och rulla tillbaka vid behov, vilket minskar risken för buggar vid körning.
Utvecklingsprocess för funktionsväxling
Det första steget i implementeringen av en funktionsväxling är att skapa och definiera den i en extern datakälla eller en tjänst som Optimizely. Detta innebär vanligtvis att man väljer ett unikt namn eller en nyckel för funktionsväxlingen samt en initial status. När funktionsväxlingen har definierats kan applikationer och infrastruktur börja söka upp dess status med hjälp av den unika nyckeln.
När funktionsväxlingen har definierats i Optimizely eller någon annanstans måste dess status vara tillgänglig för applikationen. Därför måste kod läggas till i kodbasen som gör det möjligt för applikationen att slå upp statusen för en funktionsväxling från den externa källan. Optimizely Feature Experimentation tillhandahåller SDK: er för många större språk och ramverk som tillhandahåller denna funktionalitet.
När funktionsväxlingarna är tillgängliga för applikationen kan de läggas till i specifika kodvägar för att ge fjärrkontroll. Kodvägar som kräver fjärrstyrning kan paketeras i villkorlig logik som kontrollerar statusen för funktionsväxlingen innan den körs. När den kodvägen nås under körning kommer den sedan bara att köras om feature flaggan är i ett visst tillstånd.
Exempel på funktionsväxling / användningsfall
Kanariefåglar som släpps
När du släpper en ny funktion är det ofta bra att testa den bland en liten delmängd användare innan du släpper den till alla. Denna metod kallas för "canary release" eller "utrullning av funktioner" och används av team för att minska riskerna när de lägger till eller ändrar en funktion. Funktionsväxlingar kan användas för att utföra "canary releases" genom att styra om den nya funktionen ska visas eller inte för en viss användare och ge möjlighet att rulla ut eller rulla tillbaka på distans.
Testning i produktion
På grund av komplexiteten i moderna distributionssystem kan det finnas skillnader mellan test- och produktionsmiljöer som kan introducera buggar som inte kan upptäckas under enhetstestning. Genom att införliva funktionsväxling i sin utvecklingsprocess kan programvaruutvecklingsteam släppa funktioner i sin utvecklarmiljö på ett kontrollerat sätt, med målgruppsinriktning på ett mindre segment av användarbasen för att minska risken, i syfte att testa nya funktioner i produktion. Om testet misslyckas kan det enkelt rullas tillbaka genom att helt enkelt justera växlingskonfigurationen utan några ändringar i källkoden.
A/B-testning
A/B-testning används av team för att experimentera med nya idéer och bekräfta hypoteser med hjälp av verkliga data. De segmenterar trafiken i en av två varianter av en funktion, vilket gör att mätvärden kan samlas in för varje variant sida vid sida. En funktionsväxling kan användas för att underlätta en A/B-testning genom att styra den variation som varje användare är bucketad i. Om en funktionsväxling är "av" för en användare ser de A-variationen av testet, medan om den är "på" ser de B-variationen.
Strömbrytare
När en applikation eller infrastruktur blir alltmer komplex kan den bli svårare att underhålla och långsammare att stabilisera vid ett fel. Funktionsväxlingar är ett bra sätt att hantera problem med underhåll och återställning i ett växande system. När funktionsväxlingarna används på samma sätt som strömbrytare eller nödstopp kan de ge teamen ett centraliserat, fjärrstyrt sätt att kontrollera komponenter i ett distribuerat system och reagera på fel.
Trunkbaserad driftsättning
Eftersom feature toggles möjliggör snabb distribution och rollbacks av ny kod kan de användas för att stödja en trunk-based development-process, där kodändringar kan göras i huvudstammen istället för att ha flera feature branches som sedan måste slås samman och stämmas av i Github eller andra plattformar för källhantering. detta kan leda till snabbare lanseringscykler och mindre tid på felsökning.
Funktionsväxling och kontinuerlig leverans
Kontinuerlig integration och kontinuerlig leverans (CI/CD), som implementerades av den inflytelserika programvaruutvecklaren Martin Fowler, är en disciplin inom programvaruutveckling som innebär att programvara kan släppas till produktion när som helst. Den har anammats av ledande programvaruföretag runt om i världen vars team nu förväntas att snabbt leverera programvara som är stabil och buggfri till din användarbas.
Feature flags förbättrar CI/CD genom att göra "kontinuerlig" mer uppnåelig. Feature flags och feature toggles är en huvudkomponent i implementeringen av kontinuerlig leverans, vilket gör det möjligt att separera utrullning av funktioner från koddistribution. Ofullständiga funktioner kan slås samman i produktionskodbasen men döljas bakom feature flags.
Med kontinuerlig leverans och feature flags-hantering kan ett team lansera, kontrollera och mäta sina funktioner i skala upp.
Optimizely och funktionsväxlingar
Optimizely är ledande inom progressiv leverans och Feature Experimentation, och vi erbjuder ett antal olika lösningar för feature flags-hantering.
Optimizely Feature Experimentation på serversidan är vår svit för funktionsflaggning och experimentering som gör det möjligt för utvecklingsteam att hantera funktioner och köra funktionstester på alla internetanslutna enheter, med SDK: er tillgängliga för de mest populära språken och ramverken, inklusive Node, Python, Ruby, Go, React, Swift och C#.
För team som bara vill komma igång med funktionsväxlingar är Optimizely gratis funktionsflaggning en funktionsflaggningslösning som du kan registrera dig för och distribuera direkt för att börja använda funktionsflaggor utan funktionaliteten för A/B-testning, helt gratis (till skillnad från konkurrenter som LaunchDarkly).
Funktionsväxling är ett kraftfullt verktyg att använda i din mjukvaruutveckling, och Optimizely Feature Experimentation gör det enklare än någonsin att minska risken, snabba upp utvecklingstiderna och testa ny funktionalitet i din programvara.