Cloudflare Flagship
(developers.cloudflare.com)- Cloudflare Flagship est le service de feature flags de Cloudflare qui permet de contrôler l’exposition des fonctionnalités d’une application sans redéployer le code
- Les flags sont définis par des règles de ciblage et des rollouts progressifs basés sur un pourcentage, et peuvent être évalués directement depuis les bindings natifs de Workers
- Compatible avec OpenFeature, il est possible d’évaluer les flags dans Workers, Node.js et le navigateur avec le SDK @cloudflare/flagship
- Le ciblage prend en charge les attributs utilisateur, 11 opérateurs de comparaison, le groupement AND/OR, l’évaluation séquentielle, et conserve les valeurs grâce au hachage cohérent
- Les variations prennent en charge les booléens, chaînes, nombres et objets JSON, et peuvent être créées, modifiées ou supprimées par application depuis le tableau de bord Cloudflare
Fonctionnalités principales
-
Bindings Workers
- Binding reference
- Évalue les flags via les bindings natifs de Workers
- Fournit des méthodes type-safe et un repli automatique vers une valeur par défaut
-
SDK OpenFeature
- View SDK docs
- Le provider OpenFeature @cloudflare/flagship permet d’évaluer les flags dans Workers, Node.js et le navigateur
- Lors d’une migration depuis un autre fournisseur de feature flags, il suffit de changer une seule ligne de configuration
-
Règles de ciblage
- Learn about targeting
- Fournit des valeurs de flag différentes selon les attributs utilisateur
- Les règles prennent en charge 11 opérateurs de comparaison, le groupement logique AND/OR et l’évaluation séquentielle
-
Rollouts basés sur un pourcentage
- Learn about rollouts
- Permet de déployer progressivement une fonctionnalité auprès d’un pourcentage d’utilisateurs
- Le hachage cohérent garantit qu’un même utilisateur reçoit toujours la même valeur de flag
-
Variations multi-types
- Use Multi-type variations
- Les variations de flag peuvent être des booléens, des chaînes, des nombres ou des objets JSON structurés
- Les variations d’objet permettent de transmettre un bloc de configuration complet avec un seul flag
-
Gestion des flags
- Use Flag management
- Vous pouvez créer, mettre à jour et supprimer des flags depuis le tableau de bord Cloudflare
- Les flags sont organisés en applications mappées à des projets ou services
- Vous pouvez créer votre premier feature flag via le guide de démarrage
Services Cloudflare associés
- Workers : permet de créer des applications serverless sur le réseau mondial de Cloudflare, et Flagship s’intègre nativement à Workers via des bindings
- KV : stocke des données clé-valeur sur l’ensemble du réseau mondial de Cloudflare, et Flagship utilise cette infrastructure pour distribuer la configuration des flags
1 commentaires
Avis sur Hacker News
Il ne faut pas sous-estimer une abstraction sans aller-retour réseau. Au-dessus de
f(feature_name, context), le contexte peut être ajusté de façon extrêmement fine : inventaire précis, fournisseur précis, utilisateur précis d’un client B2B précis, sous-type précis de modèle économique, jusqu’à l’affichage ou non selon une tranche horaire préciseSi on peut écrire la logique directement et l’exécuter comme une constante dans une boucle serrée, l’agilité métier augmente fortement. Si l’on pense qu’un libellé peut changer pour certains clients, il suffit de l’implémenter dans le code de façon configurable, et les tests ainsi que les flags suivent naturellement
En revanche, ce type de configuration 0-hop nécessite un moteur d’exécution client sophistiqué, et Cloudflare ne semble pas avoir implémenté cela ici. C’est compréhensible dans des Workers avec des contraintes mémoire, mais moins convaincant dans une infrastructure traditionnelle
J’aime assez l’approche de Statsig : « Server SDKs hold the entire ruleset of your project in memory... »
https://docs.statsig.com/sdks/how-evaluation-works
On peut aussi le construire soi-même. Il suffit qu’un thread en arrière-plan synchronise l’ensemble de règles dans quelques structures de données toutes les quelques secondes, puis remplace les références de façon atomique. Ensuite, il ne reste qu’à fournir une interface CRUD sur les dimensions des règles applicables
Il faut toutefois absolument de la gouvernance sur qui peut modifier quels candidats de constantes. Avec de grands pouvoirs viennent de grandes responsabilités
Les feature flags servent plutôt, à mon avis, avec le développement trunk-based, à activer des fonctionnalités en environnement de QA, sans les livrer encore en production, tout en permettant les tests PO/PM. Le trunk-based development permet un DevOps rapide et simple, sans stratégie de branches complexe
À l’inverse, la configuration applicative fait partie de l’application et concerne sa personnalisation selon le contexte métier. Je ne sais pas s’il existe des frameworks ou outils adaptés, mais il faut clairement distinguer les deux
C’est cette combinaison modulo + aléatoire qui a obligé des outils comme LaunchDarkly à fournir des SDK pour plusieurs langages, et ceux que j’ai dû utiliser étaient très mal adaptés à leur langage. En poussant l’évaluation jusqu’à l’edge, on a rendu l’ensemble du système plus complexe que nécessaire
En pratique, il suffit de recharger de temps en temps la table de flags courante « pour ce client », et c’est bien moins pénible. Heureusement qu’il y a Flipper, ça évite d’avoir à gérer cela soi-même désormais
https://www.stigg.io/blog-posts/entitlements-untangled-the-m...
La facturation contractuelle par siège est un peu rude, mais reste supportable
On dirait un Boolean-as-a-service doré à l’or fin
En simplifiant à ce point, on pourrait réduire tous les services du monde à du bits-as-a-service. En réalité, il y a une vraie valeur métier derrière ce genre de produit, ainsi qu’une complexité réelle dans sa fourniture
On pourrait appeler n’importe quel outil SaaS « excel-as-a-service », et ce serait du même niveau comme formule
Dans la documentation du SDK JS, il y a cet avertissement : « Le provider client a besoin d’un token API pour récupérer les valeurs des flags. Ce token n’est pas limité à une seule application ; toute personne qui possède le token peut donc évaluer les flags de toutes les applications du compte. À utiliser avec précaution dans les applications publiques »
https://developers.cloudflare.com/flagship/sdk/client-provid...
Je me demande pourquoi un SDK client conçu pour être déployé dans le navigateur nécessite une telle prudence. Est-ce que cela signifie que n’importe quel client peut envoyer des requêtes avec un nouveau
targetingKeyet observer les flags d’autres utilisateurs ?Les flags ne devraient évidemment pas contenir d’informations sensibles, mais cela ressemble à un choix de conception intéressant
Il paraît peu probable que Cloudflare ait sérieusement décidé il y a six mois de construire un concurrent à LaunchDarkly
C’est bien, mais ironiquement j’attends toujours la sortie de cette fonctionnalité qui sera probablement proposée via Flagship
https://blog.cloudflare.com/enterprise-grade-features-for-al...
Je crois qu’il n’y a encore eu aucun cas où une fonctionnalité réservée à l’Enterprise est redescendue vers les offres payantes inférieures
Celle qui m’intéresse particulièrement, c’est celle-ci :
https://developers.cloudflare.com/speed/optimization/content...
En ce moment, Cloudflare fait du bon travail, mais il manque une gestion fine des permissions. Il faut toujours créer un compte totalement séparé pour la production, et comme un domaine ne peut être lié qu’à un seul compte, ça complique le SSO
J’utilise encore AWS pour l’envoi d’e-mails, donc j’aimerais bien voir ça arriver chez Cloudflare
Je découvre OpenFeature, et ça a l’air cool. Quelqu’un a déjà de l’expérience avec une intégration ? https://openfeature.dev
Pour être transparent, je suis le CTO de Flagsmith. Ces dernières années, j’ai vu une courbe de croissance très nette de l’adoption d’OpenFeature. Avant, c’était nous qui recommandions à nos clients de l’essayer ; maintenant, ce sont les clients qui arrivent avec OpenFeature comme exigence
Le support côté éditeurs est désormais assez mature et couvre presque tous les langages. Si vous intégrez des feature flags dans un nouveau service ou si vous passez d’une implémentation maison à une solution tierce, je recommande OpenFeature
Il nous a fallu environ deux semaines pour créer un backend entièrement sur mesure. Les SDK pour plusieurs langages ont fonctionné sans problème. J’ai trouvé un bug, mais après l’avoir signalé, il a été corrigé le jour même
J’ai du mal à bien comprendre les feature flags. En quoi est-ce fondamentalement différent d’un booléen en base de données ?
Les équipes qui les construisent elles-mêmes voient souvent le problème grossir très vite quand le produit, le marketing ou les ventes veulent cibler avec des règles de plus en plus complexes
Dans l’ensemble, ce n’est pas un problème particulièrement difficile, mais c’est un problème d’ampleur. Il faut beaucoup de choses invisibles au départ
On peut voir les feature flags comme un système d’autorisations : permettre à certains utilisateurs seulement d’accéder à certaines fonctionnalités. Tous ceux qui ont déjà géré des systèmes de permissions savent à quel point l’appartenance à des groupes, les groupes hiérarchiques, les rôles, les ACL, etc. deviennent complexes. Ces éléments ressemblent aux différentes règles de ciblage d’un système de feature flags
Cloudflare les utilise aussi en interne pour déployer d’abord de nouvelles fonctionnalités ou de nouveaux builds aux clients gratuits, puis les étendre progressivement aux plus gros clients après une période de stabilisation
Les feature flags peuvent aussi être activés de manière aléatoire, un peu comme une forme de fuzz testing. Il ne faut pas penser seulement à quelque chose de « nouveau », ça peut aussi être un « changement de comportement »
On peut voir ça comme un booléen au-dessus de tous les clients, mais en général ce n’est pas implémenté ainsi
Le principal intérêt des feature flags, c’est qu’ils permettent de travailler sur de grosses fonctionnalités qui demanderaient des mois et de nombreux commits, tout en restant sur la branche principale. Pour moi, ça permet un processus de développement plus léger et plus itératif
Par opposition au fait de maintenir une branche séparée, voire une cible de déploiement distincte, pour une grosse fonctionnalité en cours de développement
Les feature flags sont souvent trop surconçus
Il suffit de vérifier une valeur de configuration, une valeur en base de données ou une variable d’environnement, puis d’emprunter dynamiquement un chemin ou un autre
C’est tout. Il faut soit découper les fonctionnalités plus finement, soit refactorer le code pour pouvoir les basculer facilement à un niveau élevé
Si ce n’est pas facile à faire, alors une implémentation complexe de feature flags peut aider à coordonner l’activation d’une fonctionnalité entre plusieurs microservices
Un dashboard peut aussi être utile s’il y a beaucoup de fonctionnalités
Mais je considère les deux comme des signaux forts qu’il vaudrait mieux éviter les feature flags. Ils sont plus adaptés à des changements locaux et temporaires ; sinon, la complexité s’accumule et finit par rendre la gestion et la maintenance difficiles
Bien sûr, on ne veut pas qu’un utilisateur perde une fonctionnalité parce qu’il dépasse un seuil de revenu ou traverse une frontière, donc il faut une forme de suivi. L’analytics et le suivi d’erreurs doivent aussi communiquer avec le service de feature flags
Ce n’est pas de la science des fusées, mais c’est clairement plus complexe qu’une variable d’environnement
C’est toujours enthousiasmant quand Cloudflare commence à proposer quelque chose pour lequel il fallait auparavant passer par un autre fournisseur. Il y a cette confiance que ce sera solide
Chez Function, nous utilisions Statsig. Au départ, deux personnes ont commencé à l’utiliser sur un produit, mais en moins de 12 mois, une grande partie du texte produit et des déploiements était pilotée par Statsig
Statsig propose une évaluation côté client, ce qui permet d’écrire des règles et des déploiements basés sur des concepts internes sans que les serveurs de Statsig aient à traiter les données des utilisateurs
J’espère que Cloudflare construira ici un produit sophistiqué pour qu’à l’avenir on n’ait plus besoin d’utiliser d’autres produits
Je suis un utilisateur ordinaire qui ne connaît pas bien les détails techniques, mais je trouve que Cloudflare est relativement facile à utiliser. J’espère qu’ils continueront sur cette lancée