spinny:~/writing $ less openfeature-feature-flags-progressive-delivery.md
12Η ανάπτυξη είναι όταν ο κώδικας φτάνει στην παραγωγή. Η κυκλοφορία είναι όταν κάποιος μπορεί πραγματικά να το χρησιμοποιήσει. Η σύγχυση των δύο είναι ένας από τους πιο γρήγορους τρόπους για να κάνετε κάθε ανάπτυξη λίγο τεταμένη στιγμή.34Τα feature flag χρησιμεύουν για να βάλουν χώρο ανάμεσα σε αυτές τις δύο στιγμές. Μπορείτε να αναπτύξετε σήμερα, να ενεργοποιήσετε αύριο για την εσωτερική ομάδα, μετά για έναν πιλοτικό πελάτη και μετά για το 10% των χρηστών. Εάν κάτι πάει στραβά, απενεργοποιήστε τη σημαία. Δεν χρειάζεται απαραίτητα να επαναφέρετε ολόκληρη την κυκλοφορία.56## Η σημαία δεν είναι απλώς ένα αν78Τεχνικά είναι συχνά ένα `if`. Πολιτιστικά είναι πολύ περισσότερα.910```typescript11if (await flags.isEnabled('checkout.v2.enabled', context)) {12 return newCheckout(input);13}1415return oldCheckout(input);16```1718Αυτό το μικρό `if` μπορεί να αντιπροσωπεύει μια σταδιακή διάθεση, ένα πείραμα, μια μετεγκατάσταση, μια άδεια επιχείρησης ή ένα λειτουργικό kill switch. Το πρόβλημα είναι ότι αν δεν το διαχειριστείς καλά, μπορεί να γίνει και τεχνικό χρέος που μένει στον κωδικό για δύο χρόνια.1920## Πού μπαίνει το OpenFeature2122Το OpenFeature είναι μια ανοιχτή προδιαγραφή για την αξιολόγηση του feature flag με ένα κοινό API. Η ιδέα είναι απλή: ο κωδικός της εφαρμογής σας δεν πρέπει να εξαρτάται άμεσα από τον προμηθευτή ή το εσωτερικό σύστημα που χρησιμοποιείτε για σημαίες.2324Η εφαρμογή ρωτά:2526```typescript27const enabled = await client.getBooleanValue('checkout.v2.enabled', false, {28 targetingKey: user.id,29 plan: user.plan,30 country: user.country,31});32```3334Ο πάροχος αποφασίζει από πού προέρχονται οι κανόνες: SaaS, αρχείο, εσωτερική υπηρεσία, σημαία, διαμόρφωση GitOps. Εάν κάποια μέρα αλλάξετε το backend επισήμανσης χαρακτηριστικών, η εφαρμογή δεν χρειάζεται να ξαναγραφτεί παντού.3536Αυτός ο διαχωρισμός φαίνεται σαν μια αρχιτεκτονική λεπτομέρεια, αλλά γίνεται αισθητός καθώς το έργο μεγαλώνει.3738## Το πλαίσιο είναι η μισή μάχη3940Μια σημαία ενεργοποίησης ή απενεργοποίησης για όλους είναι χρήσιμη, αλλά περιορισμένη. Η προοδευτική παράδοση ζει στο πλαίσιο:4142- εσωτερικός ή εξωτερικός χρήστης.43- δωρεάν ή επιχειρηματικό σχέδιο44- χωριό45- οργάνωση·46- έκδοση εφαρμογής.47- σταθερό ποσοστό κίνησης.4849Το σημαντικό κλειδί είναι `targetingKey`: πρέπει να είναι σταθερό. Αν αλλάζει με κάθε αίτημα, ένας χρήστης μπορεί να καταλήξει μία φορά στην παραλλαγή Α και μία στην παραλλαγή Β. Για ένα πείραμα είναι τρομερό, για ένα ταμείο μπορεί να είναι καταστροφικό.5051## Μια λογική διάθεση5253Μια ροή που μου αρέσει είναι η εξής:54551. Αναπτύξτε με σημαία σβηστή.562. ανάφλεξη για προγραμματιστές και QA.573. Ενεργοποίηση για πιλότο πελάτη ή ενοικιαστή.584. 5% διάθεση.595. διάθεση στο 25%.606. 100% διάθεση.617. αφαίρεση παλιού κωδικού και σημαίας.6263Το συχνά ξεχασμένο σημείο είναι το τελευταίο. Μια προσωρινή σημαία πρέπει να έχει ημερομηνία θανάτου. Αν μείνει για πάντα, κάθε μελλοντικός ανασχηματιστής θα πρέπει να ρωτήσει: «μα είναι ακόμα χρήσιμο αυτός ο κλάδος;».6465## Kill switch: ετοιμάστε τα πρώτα6667Το kill switch είναι η σημαία που σας σώζει όταν μια εξωτερική εξάρτηση αρχίζει να σας ενοχλεί, μια εργασία καταναλώνει πάρα πολλούς πόρους ή η νέα λογική δημιουργεί περίεργα σφάλματα.6869Ένα καλό kill switch πρέπει να είναι:7071- εύκολο να βρεθεί?72- τεκμηριωμένη στο runbook.73- δοκιμάζεται περιστασιακά.74- παρατηρήσιμο όταν ενεργοποιείται.75- ανεξάρτητο, όσο το δυνατόν περισσότερο, από το τμήμα που θα μπορούσε να σπάσει.7677Το χειρότερο είναι να ανακαλύψεις κατά τη διάρκεια του ατυχήματος ότι η σημαία υπάρχει, αλλά κανείς δεν ξέρει αν εξακολουθεί να λειτουργεί.7879## Παρατηρησιμότητα ή όχι προοδευτική παράδοση8081Η ενεργοποίηση μιας λειτουργίας στο 10% χωρίς να εξετάζετε μετρήσεις είναι απλώς αισιοδοξία με πολλά βήματα.8283Κάθε κυκλοφορία θα πρέπει να απαντά σε απλές ερωτήσεις:8485- έχουν αυξηθεί τα σφάλματα;86- έχει αλλάξει η καθυστέρηση;87- ολοκληρώνουν οι χρήστες τη ροή;88- υπάρχουν περισσότερα εισιτήρια ή επαναλήψεις;89- επηρεάζει μια παραλλαγή μόνο ένα τμήμα;9091OpenFeature υποστηρίζει αγκίστρια γύρω από την αξιολόγηση σημαίας. Είναι χρήσιμα για την καταγραφή σφαλμάτων, την προσθήκη μετρήσεων ή τη σύνδεση της βαθμολογίας με ένα trace.9293## Ονομασία και ιδιοκτησία9495Τα ονόματα έχουν σημασία. `new_ui` δεν λέει τίποτα. Το `checkout.v2.enabled` λέει πολλά περισσότερα.9697Για κάθε σημαία θα σημείωνα τουλάχιστον:9899- όνομα100- περιγραφή101- ιδιοκτήτης102- ασφαλής προεπιλογή103- ο λόγος για τον οποίο υπάρχει.104- ημερομηνία ή προϋπόθεση απομάκρυνσης.105106Μια σημαία χωρίς ιδιοκτήτη είναι σχεδόν πάντα μια σημαία που κανείς δεν θα καθαρίσει.107108## Πού να τα αξιολογήσετε109110Frontend, backend ή edge; Εξαρτάται.111112Εάν η σημαία είναι για διάταξη, αντιγραφή ή ενσωμάτωση, η διεπαφή είναι εντάξει. Εάν αφορά δικαιώματα, χρέωση, όρια ή ευαίσθητα δεδομένα, πρέπει να βρίσκεται στο backend. Εάν περιλαμβάνει πειράματα δρομολόγησης ή υψηλής επισκεψιμότητας, η άκρη μπορεί να έχει νόημα.113114Ο απλός κανόνας: το frontend μπορεί να βελτιώσει την εμπειρία, αλλά δεν πρέπει να είναι το μόνο εμπόδιο ασφαλείας.115116## Συμπέρασμα117118Το feature flag που έγινε καλά αλλάζει τη σχέση με την παραγωγή. Δεν εξαλείφουν τον κίνδυνο, αλλά τον κάνουν μικρότερο και πιο διαχειρίσιμο. Μπορείτε να απελευθερώσετε σε φέτες, να παρατηρήσετε, να σταματήσετε, να επιστρέψετε, να μάθετε.119120Το OpenFeature προσθέτει μια καθαρή βάση: ένα κοινό API, εναλλάξιμους παρόχους και έναν πιο τακτοποιημένο τρόπο ανάπτυξης του συστήματος. Αλλά η πειθαρχία παραμένει δική σας: ασφαλείς προεπιλογές, ξεκάθαρα ονόματα, μετρήσεις, ιδιοκτήτες και καθαριότητα.121122Η καλύτερη σημαία είναι αυτή που σε βοηθά να απελευθερωθείς ήρεμα και μετά εξαφανίζεται όταν δεν χρειάζεται πλέον.123124## Πηγές125126- [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: απελευθερώστε χωρίς να κρατάτε την αναπνοή σαςlines 1-131 (END) — press q to close