Kill Switch, Feature flag... mitigez vos risques en production
Une ceinture de sécurité pour vos logiciels et applications
Intro
San Francisco, le 18 février 2017, Cloudflare, l'entreprise qui est derrière l'un des plus grands réseau de distribution de contenu au monde, découvre une faille de sécurité. Elle est liée à une nouvelle fonctionnalité d'obfuscation d'emails sur les sites web récemment developpée. Quelques heures plus tard, ils utilisent le “kill swith” pour désactiver la fonctionnalité. Ils pourront plus tard identifier le code responsable et le corriger.
Retrouvez plus d'infos sur leur blog Incident report on memory leak caused by Cloudflare parser bug . Personnellement j'ai découvert l'affaire par cette vidéo How One Line of Code Almost Blew Up the Internet - YouTube que je trouve plus intéressante à regarder.
New-york, le 12 Août 2012, Knight Capital Group, une entreprise financière mondialement connue, suite à une erreur de developpement contracte des ordres de façon incontrôlable sur les marchés financiers et estime sa perte monétaire à des millions de dollars par minute (oui).
Il est rapporté que CEO a contacté le CIO pour demander d'appuyer sur le "kill switch", sollicitation à laquelle celui-ci a répondu qu'il n'y en avait pas. L'entreprise souffrira de pertes sérieuses qui mènera à son rachat par un concurrent.
Retrouvez l'histoire narrée ici : Dev Loses $440 Million in 28 minutes, Chaos Ensues - YouTube
Ces deux situations, relativement majeures par leur ampleur ont eu des issues différentes et mentionnent un fameux "kill switch". Mais qu'est-ce que c'est ?
C'est quoi un kill switch ?
Le “kill switch” ici est un terme un peu enjolivé pour le concept de "feature flag". Un feature flag (encore appelés « feature toggle », « feature switch » ou « feature flagging ») permet l'exécution conditionnelle du code d'un site ou d'une application pour activer ou désactiver une fonctionnalité.
Ça consiste techniquement à ajouter des branches dans l’exécution du code qui sont conditionnées par un flag (drapeau). Les flags peuvent ainsi être levés/baissés avec un logiciel pour activer/désactiver une fonctionnalité juste avec un bouton sans changement de code.
Source : GitHub - growthbook/growthbook: Open Source Feature Flagging and A/B Testing Platform
{% if client.is_enabled('delete_survey_flag') %}
<td class="text-end">
<a href="{{ url_for('surveys.delete_survey', survey_id=survey.id) }}"class="btn btn-sm btn-danger">
Delete
</a>
</td>
{% endif %}Source : How to Implement Feature Flags in Python | Unleash
A Quoi ça sert ?
Les features tags ajoutent une fonctionnalité simpliste mais très puissante lorsqu’on élabore le concept notamment en rajoutant des informations d’utilisateurs pour la création de conditions de flags. Vous pouvez alors faire des choses intéressantes comme :
Déploiement progressif : une nouvelle fonctionnalité est activée uniquement auprès d’un faible pourcentage d’utilisateurs pour tester et de comprendre ses effets/limitations avant d’être déployée à l’ensemble des utilisateurs.
Déploiement ciblé : les fonctionnalités sont déployées uniquement aux utilisateurs qui partagent des caractéristiques communes : utilisateurs premium, utilisateurs bêta, utilisateurs d'une région.
Empêcher des groupes de voir une fonctionnalité : Pareillement, il est possible d'empêcher le déploiement pour des utilisateurs ayant certaines caractérstiques notamment lois et restrictions ( LinkedIn suspends AI training using UK and EU data )
Un kill switch: la possibilité de retirer/stopper une fonctionnalité en cas de problème.
Les tests A/B : lancement de différentes versions d’une fonctionnalité pour déterminer celle qui donne les meilleurs résultats ! Je pense ici notamment aux tests d’interface que ChatGPT semble constamment faire.
etc
Les feature flags vous permettent de donc gérer les fonctionnalités, de compartimenter les risques et faire des expérimentations. Avec autant d’avantages, on serait tenté de les utiliser partout mais ils peuvent réserver des surprises aux utilisateurs non aguérris.
Quand les utiliser ?
Malgré les avantages présentés ici, il est important de noter qu'ils ajoutent une complexité significative au code. Ce qui peut impacte la charge de travail au niveau de la production de code, la validation de celui-ci et sa compréhension sur le long terme.
En fait, j'ai fait un petit raccourci avec Knight Capital Group, vous vous souvenez du bug qui leur a fait perdre des centaines de millions ? En fait, il provenait d’un feature flag : un flag pour une ancienne fonctionnalité de test (incompatible avec la production) avait été réutilisé pour une nouvelle fonctionnalité, ce qui a malencontreusement conduit à un bug spectaculaire en production. La suite appartient à l'histoire.
Ce sont des outils puissants mais adaptés à des procédures de développement et déploiement solides sinon on peut rapidement se retrouver submergé et/ou introduire des comportements inattendus. Il est donc important d’évaluer de façon attentionnée si la complexité induite compense les risques mitigés.
Hands-on
Je comptais faire un cas pratique personnel sur mais nul ne sert de réinventer la roue. Ce superbe tutoriel, qui présente comment intégrer cette fonctionnalité sur application existante simpliste en Python, est disponible :
How to Implement Feature Flags in Python | Unleash
N’hésitez pas à tester, j’ai fini le tutoriel en 15 minutes.
Conclusion
La possiblité de gérer de façon centralisée ses logiciels comme étant des collections de fonctionnalités, la capacité de comprendre les usages et faire des expérimentations sont des perspectives qui m’enchantent et je voulais les faire connaître. Comme mentionné cependant, l’usage des feature flags demande une plannification adéquate mais les bénéfices, dans les bons contextes sont inestimables.
Merci de m'avoir lu.
EDIT: J’ai découvert après avoir fini cet article qui considère son utilisation pour des transformations de données : https://www.red-gate.com/simple-talk/blogs/feature-flags-in-data-projects/ .
A propos de moi et ce blog
Je suis N'nane, camerounais et consultant Cloud spécialisé en data science et intelligence artificielle. Je réside en France où je travaille à accompagner des entreprises, petites et grandes, dans leur stratégie IA sur le Cloud. Sur ce blog, je partage mes expériences et avis sur l'IA, la data et le cloud, avec des contenus pratiques pour les passionnés et professionnels.
N'hésitez pas à mettre des commentaires si vous avez des questions ou des remarques, j'y répondrai avec plaisir.



