Konfiguration und Bucketing von Feature Flags
Wenn eine Feature-Flag-Konfiguration aktualisiert oder ein-/ausgeschaltet wird, können SDKs die aktualisierte Konfiguration über das Cloudflare Content Delivery Network (CDN) entweder per Polling oder Streaming abrufen. Polling ist die Standardoption, während Streaming eine Premium-Option ist. Kameleoon-SDKs sind so konzipiert, dass sie einer Zero-Latency-Richtlinie entsprechen. Das bedeutet, dass das SDK keine zusätzlichen Remote-Server-Aufrufe benötigt, um Benutzer für ein Feature Flag zu aktivieren und einzubuchen. Selbst der schnellste Remote-Server-Aufruf würde der Anwendung mindestens 20 ms Latenz hinzufügen, und je nach mehreren Faktoren kann diese Verzögerung auf Hunderte von Millisekunden ansteigen oder das Laden der Webanwendung für den Endbenutzer sogar vollständig blockieren. Um diese zusätzliche Latenz zu vermeiden, weisen Kameleoon-SDKs Besucher lokal zu Experimenten zu.Polling (Standard)
In diesem Modus sendet das SDK in regelmäßigen Abständen (standardmäßig alle 60 Minuten) eine Anfrage an das CDN, um die aktuellste Konfiguration abzurufen. Das Intervall kann in der SDK-Konfiguration mit dem Parameterrefresh_interval_minute (oder refresh_interval) angepasst werden.
- Initiales Laden: Wenn eine Webseite geöffnet wird, versucht das SDK zunächst, die Konfiguration aus dem Cache zu laden (sofern verfügbar).
- Hintergrundaktualisierung: Wenn das
refresh_intervalabgelaufen ist, führt das SDK eine Hintergrundanfrage aus, um die Konfiguration zu aktualisieren und den Cache zu erneuern. - Cache-Gültigkeit: Die gecachte Konfiguration gilt für 1,5 Stunden ab der letzten erfolgreichen Aktualisierung als gültig. Wenn der Besucher innerhalb dieses 1,5-Stunden-Fensters eine Seite öffnet, wird die gecachte Version verwendet. Andernfalls wird der Cache ignoriert und sofort eine neue Anfrage gestellt.
refresh_interval ist auf 15 Minuten eingestellt und ein Benutzer wird einem Feature Flag ausgesetzt. Wenn das Feature Flag 10 Minuten später deaktiviert wird und derselbe Benutzer 20 Minuten später zur Website zurückkehrt:- Das SDK lädt zuerst die Konfiguration aus dem Cache (das Flag wird weiterhin als aktiv angezeigt).
- Gleichzeitig führt es eine Hintergrundanfrage aus, um die aktualisierte Konfiguration abzurufen und den Cache zu erneuern.
- Dieses Design priorisiert die Leistung und gewährleistet schnelle Seitenladezeiten, während es asynchron mit der neuesten Konfiguration synchronisiert wird.
Auswirkung auf neu gestartete Experimente und Feature Flags
dataFileCacheTtl und dataFileRefreshInterval bestimmen gemeinsam, wie schnell Besucher anhand der Konfiguration eines neu gestarteten Experiments oder Feature Flags ausgewertet werden. Besucher, deren zwischengespeicherte Datendatei bereits älter als dataFileCacheTtl ist, oder die noch keine haben, erhalten die neue Konfiguration sofort, weil initialize() wartet, bis eine aktuelle Datendatei eintrifft. Besucher, deren zwischengespeicherte Datendatei noch innerhalb von dataFileCacheTtl liegt, werden weiterhin anhand der vorherigen Konfiguration ausgewertet, bis dieser Cache älter als dataFileCacheTtl wird oder bis eine Hintergrundaktualisierung abgeschlossen ist und sie eine weitere Seite laden.
Dadurch steigt mit dem Standardwert von dataFileCacheTtl von 90 Minuten der Traffic in ein neu gestartetes Experiment schrittweise an, statt sofort das volle Volumen zu erreichen. Ein neu gestartetes Experiment könnte beispielsweise in der ersten Stunde nach dem Start etwa 40% seiner endgültigen Zielgruppe erreichen, in der zweiten Stunde etwa 57% und in der dritten Stunde mehr als 95%, sobald genügend zwischengespeicherte Datendateien der Besucher dieses 90-Minuten-Fenster durchlaufen haben. Kein Besucher wird dauerhaft vom Experiment ausgeschlossen; jeder tritt bei, sobald sein Gerät die aktualisierte Konfiguration abruft.
getEngineTrackingCode() und dem Tracking-Skript Engine.js kombiniert, kann in den getrackten Ergebnissen dennoch einen ähnlichen Hochlauf zeigen, verursacht durch den separaten Browser-Cache von Engine.js selbst. Weitere Details finden Sie unter Caching-Verhalten von Engine.js.Streaming (Premium-Option)
Der Echtzeit-Streaming-Modus ermöglicht es dem SDK, die neue Konfiguration automatisch ohne Verzögerung anzuwenden. Wenn Streaming aktiviert ist, wird das Kameleoon-SDK dank Server-Sent Events (SSE) in Echtzeit über alle Konfigurationsänderungen benachrichtigt. Hauptvorteile:- Die Konfiguration sofort aktualisieren (kein Warten auf den nächsten Polling-Zyklus).
- Verbraucht weniger Netzwerkverkehr als Polling in kurzen Intervallen. Streaming sendet keine periodischen Anfragen. Es öffnet die Verbindung einmal und hält sie dauerhaft offen, um bereit zu sein, Daten zu empfangen.
- Dies ist eine Premium-Option, die ein Abonnement erfordert. Um Echtzeit-Streaming für ein Kameleoon-Konto zu aktivieren, wenden Sie sich an den Customer Success Manager oder senden Sie eine E-Mail an support@kameleoon.com.
- Das PHP-SDK unterstützt aufgrund technischer Einschränkungen kein Streaming. Das PHP-SDK kann derzeit nicht nicht-blockierend auf Konfigurationsaktualisierungen warten, da das PHP-SDK nicht zwischen Anfragen bestehen bleibt. Jede Anfrage erstellt eine neue SDK-Instanz, die sich selbst zerstört, sobald sie eine Antwort erhält.
- Der Echtzeit-Streaming-Modus ist derzeit nicht mit serverlosen Edge-Compute-Plattformen kompatibel.
- Für andere Sprachen siehe die SDK-Kompatibilitätsmatrix für die mindestens unterstützte Version in der bevorzugten Sprache.
Datenspeicherung
Die SDKs von Kameleoon sind für optimale Leistung und Benutzererfahrung konzipiert. Um dies zu erreichen, verwalten sie Besucherdaten lokal, entweder auf dem Server oder direkt auf dem Gerät, anstatt sie aus einer Remote-Quelle abzurufen. Alle für Kameleoon-Experimente und Feature Flags relevanten Besucherdaten werden lokal gespeichert, einschließlich Experimentzuweisungen, Segmentdaten und aller Custom Data, die mit Methoden wieaddData() hinzugefügt oder mit getRemoteVisitorData() vom Server abgerufen wurden. Die Art und Weise, wie diese Daten gespeichert werden, und ihre Lebensdauer unterscheiden sich je nachdem, ob ein serverseitiges oder clientseitiges SDK verwendet wird.
Serverseitige SDKs
Bei serverseitigen SDKs werden Besucherdaten im flüchtigen Speicher des Servers (RAM) gespeichert, was schnellen Zugriff für Experiment- und Feature-Flag-Auswertungen ermöglicht. Die Daten sind als Map organisiert und verwenden eindeutigevisitorCode-Werte als Schlüssel.
- Sitzungsbasierte Speicherung: Daten werden nur für die Dauer der aktiven Sitzung eines Benutzers im Speicher gehalten, die standardmäßig nach 30 Minuten Inaktivität endet (keine Seitenaufrufe, Klicks usw.). Alle während der Sitzung gesammelten Daten laufen gleichzeitig ab.
- Parameter
session_duration: Die Sitzungsdauer kann mit dem Parametersession_durationin der SDK-Konfiguration angepasst werden. Mit diesem Parameter kann die Kameleoon-Sitzung an die serverseitige Verwaltung der Anwendung angepasst werden.
- Parameter
- Datenverlust bei Server-Neustart: Da die Daten im RAM gespeichert werden, gehen sie verloren, wenn der Anwendungsserver neu gestartet wird. In der Regel ist Datenverlust kein Problem, da wichtige Besucherdaten (wie Benutzer-IDs oder Attribute) normalerweise aus einer persistenten Datenbank abgerufen und dem Besucher bei einer neuen Anfrage erneut zugewiesen werden.
- Daten früherer Besuche abrufen: Die Methode
getRemoteVisitorData()ermöglicht es Ihnen, Custom Data abzurufen, die während eines früheren Besuchs eines Besuchers gesammelt wurden. Diese Methode ordnet automatisch den neuesten Dateneintrag für einen Besucher zu, sodassaddData()nicht erneut aufgerufen werden muss.
Clientseitige SDKs
Im Gegensatz zu serverseitigen SDKs nutzen clientseitige SDKs persistenten lokalen Speicher auf dem Gerät des Benutzers. Dieser Mechanismus stellt sicher, dass Besucherdaten über Browsersitzungen, App-Neustarts und sogar Geräte-Neustarts hinweg erhalten bleiben. Der spezifische Speichermechanismus variiert je nach Plattform:- iOS:
UserDefaults - Android:
SharedPreferences - JavaScript/TypeScript:
LocalStorage- Hinweis für JS-SDK: Der
kameleoonVisitorCodewird auch über Cookies geteilt, um nahtlose Datenkontinuität und Kommunikation mit der Kameleoon-Anwendungsdatei (engine.js) sicherzustellen.
- Hinweis für JS-SDK: Der
- React Native:
MMKV Storage
session_duration verwenden, arbeiten clientseitige SDKs nicht mit einem sitzungsbasierten Ablauf für alle Daten. Stattdessen verwenden sie entweder targetingDataCleanupInterval oder data_expiration_interval_minute, um zu steuern, wie lange einzelne Datenelemente gespeichert werden.
targetingDataCleanupInterval/data_expiration_interval_minute: Diese Parameter bestimmen die individuelle Lebensdauer jedes spezifischen Dateneintrags. Standardmäßig werden Daten unbegrenzt gespeichert (bis sie explizit gelöscht werden), um konsistente Benutzererfahrungen über Besuche hinweg zu gewährleisten. Sie können diesen Parameter auf eine bestimmte Anzahl von Minuten setzen, wenn einzelne Datenpunkte nach einer bestimmten Zeit ablaufen sollen.- Datenpersistenz: Dieser grundlegende Unterschied bedeutet, dass die Daten auch dann erhalten bleiben, wenn der Benutzer den Browser-Tab schließt, von der Site weg navigiert oder die mobile Anwendung schließt.
- Begründung der Namenskonvention: Der Unterschied in der Parameter-Terminologie (
session_durationvs.data_expiration_interval_minute) spiegelt direkt die zugrunde liegende Speicherphilosophie wider.session_durationregelt die Gesamtlebensdauer aller Daten innerhalb einer serverseitigen Sitzung.data_expiration_interval_minuteermöglicht eine granulare Kontrolle über die Lebensdauer jedes spezifischen Datenelements, das persistent auf dem Client gespeichert wird.
Edge-SDKs
Edge-SDKs, die über Serverless Edge Compute Starter Kits bereitgestellt werden, behalten Besucherdaten nicht auf die gleiche Weise zwischen Anfragen bei wie serverseitige oder clientseitige SDKs. Eine Edge-Plattform kann eine Worker-Instanz jederzeit zerstören und neu erstellen, sodass einesession_duration-Einstellung keinen dauerhaften Speicher hat, auf den sie angewendet werden könnte, und ein Edge Worker keine Garantie hat, eine spätere Anfrage desselben Besuchers zu sehen.
Aus diesem Grund ist Ihre Integration dafür verantwortlich, Besucherdaten bei jeder Anfrage für den Edge Worker verfügbar zu machen, typischerweise durch Übergabe als Cookie und den Aufruf von addData(), bevor ein Feature Flag oder Experiment ausgewertet wird. Siehe Targeting-Einschränkungen am Edge für die vollständige Erklärung und ein Codebeispiel.
Domainliste
Die Kameleoon-SDKs benötigen Zugriff auf eine Reihe von URIs, die spezifische Dienste für das SDK bereitstellen. Wenn Sie den Zugriff einschränken und Domains explizit auf die Whitelist setzen müssen, stellen Sie sicher, dass unsere SDKs die folgenden Domains erreichen können:kameleoon.eu oder kameleoon.io gehostet sein. Stellen Sie sicher, dass Sie die in Ihrem Projekt in der Kameleoon-App angezeigte Domain verwenden.FAQ
Wie lange dauert eine SDK-Initialisierung?
Wie lange dauert eine SDK-Initialisierung?
Wie wird die SDK-Konfiguration mit dem Server synchronisiert?
Wie wird die SDK-Konfiguration mit dem Server synchronisiert?
Welche Technologie verwendet die Streaming-Methode?
Welche Technologie verwendet die Streaming-Methode?
Wann stellt das Kameleoon-CDN dem SDK eine neue Konfiguration bereit?
Wann stellt das Kameleoon-CDN dem SDK eine neue Konfiguration bereit?
Wie richte ich das SDK ein, wenn der Server mehrere Instanzen hat?
Wie richte ich das SDK ein, wenn der Server mehrere Instanzen hat?
addData() hinzu oder laden Sie sie mit der Methode getRemoteVisitorData.Wenn unterschiedliche Serverinstanzen gleichzeitig unterschiedliche SDK-Konfigurationen anwenden, verwenden Sie die Option Streaming, damit jede Instanz Konfigurationsänderungen in Echtzeit erhält.Erfolgt die Variationszuweisung/Traffic-Allokation lokal oder auf einem Server?
Erfolgt die Variationszuweisung/Traffic-Allokation lokal oder auf einem Server?
Wie stellt das SDK sicher, dass Besucher derselben Variation ausgesetzt werden?
Wie stellt das SDK sicher, dass Besucher derselben Variation ausgesetzt werden?
Wenn ich die Traffic-Verteilung/-Exposition ändere, sehen Besucher dann immer noch ihre zugewiesene Variation?
Wenn ich die Traffic-Verteilung/-Exposition ändere, sehen Besucher dann immer noch ihre zugewiesene Variation?
Wo werden Daten gespeichert?
Wo werden Daten gespeichert?