Το Laravel Pennant αποθηκεύει και ανακτά τις τιμές σημαίας χαρακτηριστικών χρησιμοποιώντας ένα ευέλικτο σύστημα αποθήκευσης που υποστηρίζει δύο κύριους οδηγούς: έναν οδηγό συστοιχίας σε μνήμη και ένα επίμονο πρόγραμμα οδήγησης βάσης δεδομένων.
Μηχανισμοί αποθήκευσης:
- Οδηγός συστοιχίας: Αυτός ο οδηγός αποθηκεύει τις επιλογές τιμών σημαίας χαρακτηριστικών σε μια συστοιχία εντός μνήμης. Είναι γρήγορο αλλά παροδικό, που σημαίνει ότι οι αποθηκευμένες τιμές σημαίας χαρακτηριστικών υπάρχουν μόνο κατά τη διάρκεια του τρέχοντος κύκλου ζωής αίτησης και χάνονται αργότερα. Αυτό είναι χρήσιμο για απλές ή προσωρινές περιπτώσεις χρήσης όπου δεν απαιτείται επιμονή.
- Οδηγός βάσης δεδομένων (προεπιλογή): Το Pennant μπορεί να επιμείνει στις τιμές σημαίας χαρακτηριστικών σε μια σχεσιακή βάση δεδομένων, ειδικά σε έναν πίνακα "Χαρακτηριστικά" που δημιουργήθηκε από τη λειτουργία των μεταναστεύσεων του Pennant. Αυτός ο οδηγός αποθηκεύει επίμονα τις τιμές σημαίας επιλογής χαρακτηριστικών, επιτρέποντας την κοινή χρήση των τιμών σε πολλαπλά αιτήματα και διακομιστές. Είναι ιδανικό για εφαρμογές που εκτελούνται σε πολλαπλούς διακομιστές ή περιβάλλοντα χωρίς διακομιστές. Το πρόγραμμα οδήγησης βάσης δεδομένων χρησιμοποιεί επίσης μια μνήμη προσωρινής μνήμης κατά τη διάρκεια ενός μόνο αιτήματος για την αποφυγή επαναλαμβανόμενων ερωτημάτων βάσης δεδομένων για την ίδια σημαία χαρακτηριστικών, βελτιώνοντας την απόδοση [1] [2] [5].
Πώς ορίζονται και επιλύονται σημαίες χαρακτηριστικών:
- Οι σημαίες χαρακτηριστικών ορίζονται χρησιμοποιώντας κλεισίματα που περιέχουν τη λογική για να προσδιορίσουν εάν ένα χαρακτηριστικό είναι ενεργό ή όχι. Αυτά τα κλεισίματα μπορούν να δεχθούν παραμέτρους όπως ο πιστοποιημένος χρήστης, επιτρέποντας τις σημαίες χαρακτηριστικών SCOPED (π.χ., επιτρέποντας μια λειτουργία μόνο για χρήστες διαχειριστών).
- Όταν μια σημαία χαρακτηριστικών ελέγχεται για πρώτη φορά για ένα δεδομένο πεδίο εφαρμογής (όπως ένας χρήστης), το Pennant εκτελεί το κλείσιμο για να επιλύσει την τιμή της λειτουργίας. Αυτή η επιλυμένη τιμή αποθηκεύεται στη συνέχεια στο διαμορφωμένο πρόγραμμα οδήγησης αποθήκευσης (πίνακας ή βάση δεδομένων).
- Σε επόμενους ελέγχους για το ίδιο χαρακτηριστικό και το πεδίο εφαρμογής, το Pennant ανακτά την αποθηκευμένη τιμή από το πρόγραμμα οδήγησης αποθήκευσης αντί να τον υπολογίζει εκ νέου, γεγονός που βελτιστοποιεί την απόδοση [2] [3].
Ανάκτηση τιμών σημαίας χαρακτηριστικών:
-Μπορείτε να ανακτήσετε την τιμή μιας σημαίας μόνο χρησιμοποιώντας μεθόδους όπως το `χαρακτηριστικό :: ενεργό ('χαρακτηριστικό-name')` για να ελέγξετε αν είναι ενεργοποιημένη (boolean) ή `χαρακτηριστικό :: value ('χαρακτηριστικό-name')` για να πάρει την αξία του, η οποία μπορεί να είναι boolean ή οποιοσδήποτε άλλος τύπος δεδομένων (Rich-value σημαίες).
- Το Pennant παρέχει επίσης μεθόδους για την ανάκτηση πολλαπλών τιμών σημαίας χαρακτηριστικών ταυτόχρονα, όπως το `χαρακτηριστικό :: τιμές (['χαρακτηριστικό1', 'χαρακτηριστικό2'])) ή` χαρακτηριστικό :: all () `για να αποκτήσουν όλα τα καθορισμένα χαρακτηριστικά για ένα δεδομένο πεδίο.
- Οι κατηγορίες χαρακτηριστικών μπορούν να ανακαλυφθούν δυναμικά και να καταχωρηθούν για να εξασφαλιστεί ότι περιλαμβάνονται κατά την ανάκτηση όλων των σημείων χαρακτηριστικών [1] [2].
Περίληψη:
Το Laravel Pennant επιλύει τις τιμές σημαίας χαρακτηριστικών εκτελώντας το κλείσιμο λογικής που καθορίζονται από το χρήστη και στη συνέχεια αποθηκεύει αυτές τις επιλυμένες τιμές είτε προσωρινά σε μια συστοιχία εντός μνήμης είτε επίμονα σε έναν πίνακα βάσης δεδομένων. Αυτός ο μηχανισμός αποθήκευσης επιτρέπει στο Pennant να ανακτά αποτελεσματικά τις καταστάσεις σημαίας χαρακτηριστικών σε επακόλουθες αιτήσεις χωρίς να υπολογίζει, υποστηρίζοντας τόσο τις απλές όσο και τις πολύπλοκες περιπτώσεις χρήσης, συμπεριλαμβανομένων των σημαιών SCOPED ανά χρήστη. Η προεπιλεγμένη και η συνιστώμενη προσέγγιση είναι η χρήση του προγράμματος οδήγησης βάσης δεδομένων για επίμονη αποθήκευση, ειδικά σε περιβάλλοντα πολλαπλών διακομιστών ή παραγωγής, ενώ ο οδηγός συστοιχίας ταιριάζει σε σενάρια μεταβατικών ή δοκιμών [1] [2] [5].
Αναφορές:
[1] https://laravel.com/docs/11.x/pennant
[2] https://www.honeybadger.io/blog/a-guide-to-deature-flags-in-laravel/
[3] https://www.reddit.com/r/laravel/comments/10yto7q/laravel_pennant_simple_and_lightweight_feature/
[4] https://redberry.international/laravel-pennant-feature-flagging-arade-easy/
[5] https://wpwebinfotech.com/blog/laravel-pennant-guide/
[6] https://dev.to/saurabh-dhariwal/how-to-manage-feature-flags-with-laravel-pennant-in-2024-1phb
[7] https://stackoverflow.com/questions/77751003/laravel-pennant-store-gainst-session-for-a-b-testing
[8] https://laracasts.com/series/whats-new-in-laravel-10/episodes/5