Configuration et bucketing des feature flags
Lorsqu’une configuration de feature flag est mise à jour ou activée/désactivée, les SDK peuvent obtenir la configuration mise à jour depuis le Content Delivery Network (CDN) Cloudflare en utilisant le polling ou le streaming. Le polling est l’option par défaut tandis que le streaming est une option premium. Les SDK Kameleoon sont conçus pour se conformer à une politique zéro latence. Cela signifie que le SDK ne nécessite pas d’appels supplémentaires à un serveur distant pour activer et affecter les utilisateurs à un feature flag. Même l’appel à un serveur distant le plus rapide ajouterait au minimum 20 ms de latence à l’application et, selon plusieurs facteurs, ce délai peut atteindre des centaines de millisecondes, voire bloquer complètement le chargement de l’application web pour l’utilisateur final. Pour éviter cette latence supplémentaire, les SDK Kameleoon affectent les visiteurs aux expériences localement.Polling (par défaut)
Dans ce mode, le SDK envoie une requête au CDN à intervalles réguliers (par défaut, toutes les 60 minutes) pour récupérer la configuration la plus récente. L’intervalle peut être personnalisé dans la configuration du SDK en utilisant le paramètrerefresh_interval_minute (ou refresh_interval).
- Chargement initial : Lorsqu’une page web est ouverte, le SDK tente d’abord de charger la configuration depuis le cache (si disponible).
- Mise à jour en arrière-plan : Si le
refresh_intervals’est écoulé, le SDK effectue une requête en arrière-plan pour mettre à jour la configuration et rafraîchir le cache. - Validité du cache : La configuration mise en cache est considérée comme valide pendant 1,5 heure après la dernière mise à jour réussie. Si le visiteur ouvre une page dans cette fenêtre de 1,5 heure, la version en cache sera utilisée. Sinon, le cache est ignoré et une nouvelle requête est effectuée immédiatement.
refresh_interval soit défini sur 15 minutes et qu’un utilisateur soit exposé à un feature flag. Si le feature flag est désactivé 10 minutes plus tard et que le même utilisateur revient sur le site web 20 minutes plus tard :- Le SDK chargera d’abord la configuration depuis le cache (montrant toujours le flag comme actif).
- Simultanément, il effectuera une requête en arrière-plan pour récupérer la configuration mise à jour et rafraîchir le cache.
- Cette conception privilégie la performance, garantissant des chargements de page rapides tout en se synchronisant de manière asynchrone avec la dernière configuration.
Impact sur les expériences et feature flags nouvellement lancés
dataFileCacheTtl et dataFileRefreshInterval déterminent ensemble la rapidité avec laquelle les visiteurs sont évalués selon la configuration d’une expérience ou d’un feature flag nouvellement lancé. Les visiteurs dont le fichier de données en cache a déjà dépassé dataFileCacheTtl, ou qui n’en ont pas encore, reçoivent immédiatement la nouvelle configuration, car initialize() attend l’arrivée d’un fichier de données à jour. Les visiteurs dont le fichier de données en cache est encore dans la fenêtre dataFileCacheTtl continuent d’être évalués selon la configuration précédente jusqu’à ce que ce cache dépasse dataFileCacheTtl, ou jusqu’à ce qu’une actualisation en arrière-plan se termine et qu’ils chargent une autre page.
Par conséquent, avec la valeur par défaut de dataFileCacheTtl de 90 minutes, le trafic entrant dans une expérience nouvellement lancée augmente progressivement au lieu d’atteindre immédiatement son volume complet. Par exemple, une expérience nouvellement lancée peut exposer environ 40% de sa population ciblée finale au cours de la première heure suivant le lancement, environ 57% à la deuxième heure, et plus de 95% à la troisième heure, une fois qu’un nombre suffisant de fichiers de données en cache des visiteurs ont dépassé cette fenêtre de 90 minutes. Aucun visiteur n’est exclu définitivement de l’expérience ; chacun la rejoint dès que son appareil récupère la configuration mise à jour.
getEngineTrackingCode() et le script de tracking Engine.js peut tout de même présenter une montée en charge similaire dans les résultats trackés, causée par le cache navigateur distinct d’Engine.js lui-même. Consultez le comportement de mise en cache d’Engine.js pour plus de détails.Streaming (option premium)
Le mode streaming en temps réel permet au SDK d’appliquer automatiquement la nouvelle configuration sans délai. Lorsque le streaming est activé, le SDK Kameleoon est notifié de toute modification de la configuration en temps réel, grâce aux server-sent events (SSE). Principaux avantages :- Mettre à jour la configuration immédiatement (sans attendre le prochain cycle de polling).
- Utiliser moins de trafic réseau que le polling à courts intervalles. Le streaming n’envoie pas de requêtes périodiques. Il ouvre la connexion une fois et la maintient ouverte en permanence, prête à recevoir des données.
- Il s’agit d’une option premium qui nécessite un abonnement. Pour activer le streaming en temps réel sur un compte Kameleoon, contactez le Customer Success Manager ou envoyez un e-mail à support@kameleoon.com.
- Le SDK PHP ne prend pas en charge le streaming en raison de contraintes techniques. Le SDK PHP ne peut actuellement pas écouter les mises à jour de configuration de manière non bloquante car le SDK PHP ne persiste pas entre les requêtes. Chaque requête crée une nouvelle instance du SDK qui se détruit dès qu’elle reçoit une réponse.
- Le mode streaming en temps réel n’est actuellement pas compatible avec les plateformes serverless edge compute.
- Pour les autres langages, consultez la matrice de compatibilité des SDK pour la version minimale prise en charge dans le langage préféré.
Stockage des données
Les SDK de Kameleoon sont conçus pour des performances et une expérience utilisateur optimales. Pour y parvenir, ils gèrent les données visiteur localement, soit sur le serveur, soit directement sur l’appareil, au lieu de les récupérer depuis une source distante. Toutes les données visiteur pertinentes pour les expériences et feature flags Kameleoon sont stockées localement, ce qui inclut les affectations d’expérience, les données de segment, et toute custom data ajoutée à l’aide de méthodes commeaddData() ou récupérée depuis le serveur avec getRemoteVisitorData(). La manière dont ces données sont stockées et leur durée de vie diffère selon que vous utilisez un SDK côté serveur ou côté client.
SDK côté serveur
Pour les SDK côté serveur, les données visiteur sont stockées dans la mémoire volatile du serveur (RAM), ce qui permet un accès rapide pour les évaluations d’expérience et de feature flag. Les données sont organisées sous forme de map, en utilisant des valeursvisitorCode uniques comme clés.
- Stockage basé sur la session : Les données ne sont conservées en mémoire que pendant la durée de la session active d’un utilisateur, qui se termine, par défaut, après 30 minutes d’inactivité (pas de vues de page, clics, etc.). Toutes les données collectées pendant la session expirent en même temps.
- Paramètre
session_duration: La durée de la session peut être ajustée en utilisant le paramètresession_durationdans la configuration du SDK. Ce paramètre permet à la session Kameleoon de s’aligner avec la gestion côté serveur de l’application.
- Paramètre
- Perte de données au redémarrage du serveur : Comme les données sont stockées en RAM, elles seront perdues si le serveur d’application redémarre. Généralement, la perte de données n’est pas un problème, car les données visiteur importantes (comme les ID utilisateur ou les attributs) sont généralement récupérées depuis une base de données persistante et réaffectées au visiteur lors d’une nouvelle requête.
- Récupérer les données des visites précédentes : La méthode
getRemoteVisitorData()vous permet de récupérer les custom data collectées lors de la visite précédente d’un visiteur. Cette méthode associe automatiquement la dernière entrée de données pour un visiteur, éliminant le besoin d’appeleraddData()à nouveau.
SDK côté client
Contrairement aux SDK côté serveur, les SDK côté client utilisent un stockage local persistant sur l’appareil de l’utilisateur. Ce mécanisme garantit que les données visiteur peuvent être conservées entre les sessions de navigateur, les redémarrages d’application et même les redémarrages d’appareil. Le mécanisme de stockage spécifique varie selon la plateforme :- iOS :
UserDefaults - Android :
SharedPreferences - JavaScript/TypeScript :
LocalStorage- Note pour le SDK JS : Le
kameleoonVisitorCodeest également partagé via des cookies pour assurer une continuité transparente des données et la communication avec le fichier d’application Kameleoon (engine.js).
- Note pour le SDK JS : Le
- React Native :
MMKV Storage
session_duration global, les SDK côté client n’opèrent pas sur une expiration basée sur la session pour toutes les données. À la place, ils utilisent soit targetingDataCleanupInterval soit data_expiration_interval_minute pour contrôler la durée de stockage des éléments de données individuels.
targetingDataCleanupInterval/data_expiration_interval_minute: Ces paramètres déterminent la durée de vie individuelle de chaque entrée de données spécifique. Par défaut, les données sont stockées indéfiniment (jusqu’à ce qu’elles soient explicitement effacées) pour assurer des expériences utilisateur cohérentes entre les visites. Vous pouvez définir ce paramètre sur un nombre spécifique de minutes si vous voulez que des points de données individuels expirent après un certain temps.- Persistance des données : Cette différence fondamentale signifie que les données persistent même si l’utilisateur ferme l’onglet du navigateur, navigue hors du site ou ferme l’application mobile.
- Justification de la convention de nommage : La différence de terminologie des paramètres (
session_durationvsdata_expiration_interval_minute) reflète directement la philosophie de stockage sous-jacente.session_durationrégit la durée de vie globale de toutes les données au sein d’une session côté serveur.data_expiration_interval_minutepermet un contrôle granulaire sur la durée de vie de chaque élément de données spécifique stocké de manière persistante sur le client.
SDK en edge
Les SDK en edge, déployés via les starter kits pour serverless edge compute, ne conservent pas les données visiteur entre les requêtes de la même manière que les SDK côté serveur ou côté client. Une plateforme edge peut détruire et recréer une instance de worker à tout moment, donc un paramètresession_duration n’a aucune mémoire durable à laquelle s’appliquer, et un edge worker n’a aucune garantie de voir une requête ultérieure du même visiteur.
Pour cette raison, votre intégration est responsable de rendre les données visiteur disponibles pour l’edge worker à chaque requête, généralement en les transmettant sous forme de cookie et en appelant addData() avant d’évaluer un feature flag ou une expérience. Consultez Contraintes de ciblage en edge pour l’explication complète et un exemple de code.
Liste des domaines
Les SDK Kameleoon nécessitent l’accès à un ensemble d’URI qui fournissent des services spécifiques au SDK. Si vous restreignez l’accès et devez explicitement mettre des domaines sur liste blanche, assurez-vous que nos SDK peuvent atteindre les domaines suivants :kameleoon.eu, soit sur kameleoon.io selon leur date de création. Assurez-vous d’utiliser le domaine affiché dans votre projet dans l’application Kameleoon.FAQ
Combien de temps dure l'initialisation d'un SDK ?
Combien de temps dure l'initialisation d'un SDK ?
Comment la configuration du SDK est-elle synchronisée avec le serveur ?
Comment la configuration du SDK est-elle synchronisée avec le serveur ?
Quelle technologie la méthode Streaming utilise-t-elle ?
Quelle technologie la méthode Streaming utilise-t-elle ?
Quand le CDN Kameleoon fournit-il une nouvelle configuration au SDK ?
Quand le CDN Kameleoon fournit-il une nouvelle configuration au SDK ?
Comment configurer le SDK si le serveur dispose de plusieurs instances ?
Comment configurer le SDK si le serveur dispose de plusieurs instances ?
addData() avant chaque requête de suivi, ou chargez-les avec la méthode getRemoteVisitorData.Si des instances de serveur appliquent des configurations SDK différentes en même temps, utilisez l’option Streaming pour que chaque instance reçoive les modifications de configuration en temps réel.L'attribution des variations et l'allocation du trafic se font-elles en local ou sur un serveur ?
L'attribution des variations et l'allocation du trafic se font-elles en local ou sur un serveur ?
Comment le SDK garantit-il que les visiteurs sont exposés à la même variation ?
Comment le SDK garantit-il que les visiteurs sont exposés à la même variation ?
Si je modifie la répartition du trafic ou l'exposition, les visiteurs verront-ils toujours leur variation attribuée ?
Si je modifie la répartition du trafic ou l'exposition, les visiteurs verront-ils toujours leur variation attribuée ?
Où les données sont-elles stockées ?
Où les données sont-elles stockées ?