spinny:~/writing $ less openfeature-feature-flags-progressive-delivery.md
12Az üzembe helyezés az, amikor a kód megérkezik az éles rendszerbe. A kiadás az, amikor valaki ténylegesen használhatja. A kettő összekeverése az egyik leggyorsabb módja annak, hogy minden telepítést egy kicsit feszült pillanatokká varázsoljunk.34A feature flag arra szolgál, hogy helyet tegyen e két pillanat közé. Ma telepítheti, holnap elindíthatja a belső csapatot, majd egy kísérleti ügyfélnél, majd a felhasználók 10%-ánál. Ha valami elromlik, kapcsolja ki a zászlót. Nem feltétlenül kell visszaállítania a teljes kiadást.56## A zászló nem csak egy ha78Technikailag gyakran `if`. Kulturálisan ez sokkal több.910```typescript11if (await flags.isEnabled('checkout.v2.enabled', context)) {12 return newCheckout(input);13}1415return oldCheckout(input);16```1718Ez a kis `if` jelenthet fokozatos bevezetést, kísérletet, migrációt, vállalkozási engedélyt vagy működési kill switch-t. A probléma az, hogy ha nem jól kezeled, akkor technikai adósság is lehet belőle, ami két évig a kódban marad.1920## Hol jön be az OpenFeature?2122A OpenFeature egy nyílt specifikáció a feature flag kiértékeléséhez egy közös API-vel. Az ötlet egyszerű: az alkalmazás kódja nem függhet közvetlenül a jelzőkhöz használt szállítótól vagy belső rendszertől.2324Az alkalmazás megkérdezi:2526```typescript27const enabled = await client.getBooleanValue('checkout.v2.enabled', false, {28 targetingKey: user.id,29 plan: user.plan,30 country: user.country,31});32```3334A szolgáltató dönti el, honnan származnak a szabályok: SaaS, fájl, belső szolgáltatás, megjelölt, GitOps konfiguráció. Ha egy nap megváltoztatja a funkciójelző háttérrendszert, az alkalmazást nem kell mindenhol átírni.3536Ez az elválasztás építészeti részletnek tűnik, de a projekt növekedésével érezhető.3738## A kontextus fél siker3940A be- vagy kikapcsolási jelző mindenki számára hasznos, de korlátozott. A progresszív szállítás a következő összefüggésekben él:4142- belső vagy külső felhasználó;43- ingyenes vagy vállalati csomag;44- falu;45- szervezés;46- az alkalmazás verziója;47- stabil százalékos forgalom.4849A fontos kulcs a `targetingKey`: stabilnak kell lennie. Ha minden kéréssel változik, a felhasználó egyszer az A változatba, egyszer pedig a B változatba kerülhet. Egy kísérletnél ez szörnyű, egy fizetésnél katasztrofális lehet.5051## Ésszerű bevezetés5253Egy áramlás, amit szeretek, ez:54551. telepítés kikapcsolt jelzővel;562. gyújtás a fejlesztőknek és a minőségbiztosításnak;573. bekapcsolás kísérleti ügyfél vagy bérlő számára;584. 5%-os bevezetés;595. 25%-os bevezetés;606. 100%-os bevezetés;617. a régi kód és zászló eltávolítása.6263A gyakran elfelejtett pont az utolsó. Az ideiglenes zászlónak tartalmaznia kell a halál dátumát. Ha ez örökre megmarad, minden leendő refaktornak meg kell kérdeznie: "de hasznos-e még ez az ág?".6465## Kill switch: először készítse elő őket6667A kill switch az a jelző, amely megmenti Önt, ha egy külső függőség zavarja Önt, egy feladat túl sok erőforrást fogyaszt, vagy az új logika furcsa hibákat produkál.6869A jó kill switch-nek a következőnek kell lennie:7071- könnyen megtalálható;72- a runbookban dokumentálva;73- alkalmanként tesztelve;74- aktivált állapotban megfigyelhető;75- lehetőség szerint független attól a résztől, amely eltörhet.7677A legrosszabb az, ha a baleset során felfedezzük, hogy a zászló létezik, de senki sem tudja, működik-e még.7879## Megfigyelhetőség vagy nem progresszív szállítás8081Egy funkció 10%-os bekapcsolása a mutatók megtekintése nélkül csak optimizmus, több lépéssel.8283Minden kiadásnak meg kell válaszolnia az egyszerű kérdéseket:8485- nőtt a hibák száma?86- változott a késleltetés?87- a felhasználók befejezik a folyamatot?88- van több jegy vagy próbálkozás?89- egy változat csak egy szegmenst érint?9091A OpenFeature támogatja a zászlóértékelés körüli horgokat. Hasznosak a hibák naplózásához, mérőszámok hozzáadásához vagy az értékelés trace-hez való kapcsolásához.9293## Elnevezés és tulajdonjog9495A nevek számítanak. `new_ui` nem mond semmit. `checkout.v2.enabled` sokkal többet mond.9697Minden zászlónál legalább a következőket jelölném:9899- név;100- leírás;101- tulajdonos;102- biztonságos alapértelmezett;103- a létezés oka;104- az eltávolítás dátuma vagy feltétele.105106A gazdátlan zászló szinte mindig olyan zászló, amelyet senki sem fog letörölni.107108## Hol kell értékelni őket109110Frontend, backend vagy edge? attól függ.111112Ha a zászló az elrendezésre, a másolásra vagy a beépítésre vonatkozik, az előtér rendben van. Ha engedélyekre, számlázásra, korlátokra vagy bizalmas adatokra vonatkozik, akkor a háttérben kell lennie. Ha ez útválasztást vagy nagy forgalmú kísérleteket foglal magában, az élnek lehet értelme.113114Az egyszerű szabály: a frontend javíthatja az élményt, de nem ez lehet az egyetlen biztonsági akadály.115116## Következtetés117118A jól sikerült feature flag megváltoztatja a termeléshez való viszonyt. Nem szüntetik meg a kockázatot, de kisebbé és kezelhetőbbé teszik. Lehet szeletekben elengedni, megfigyelni, megállni, visszamenni, tanulni.119120Az OpenFeature tiszta alapot ad: egy közös API, cserélhető szolgáltatókat és egy rendezettebb módszert a rendszer bővítésére. De a fegyelem a tiéd marad: biztonságos alapértelmezések, egyértelmű nevek, mutatók, tulajdonosok és tisztaság.121122A legjobb zászló az, amely segít nyugodtan elengedni, majd eltűnik, amikor már nincs rá szükség.123124## Források125126- [OpenFeature: Introduction](https://openfeature.dev/docs/reference/intro/)127- [OpenFeature: Node.js SDK](https://openfeature.dev/docs/reference/sdks/server/javascript/)128- [OpenFeature Specification: Flag Evaluation API](https://openfeature.dev/specification/sections/flag-evaluation)129- [OpenFeature: Hooks](https://openfeature.dev/docs/reference/concepts/hooks/)130- [CNCF: OpenFeature](https://www.cncf.io/projects/openfeature/)131
:Feature flag: lélegzetvisszatartás nélkül engedje ellines 1-131 (END) — press q to close