Configuración y asignación de feature flags
Cuando se actualiza la configuración de un feature flag o se activa o desactiva, los SDKs pueden obtener la configuración actualizada de la Content Delivery Network (CDN) de Cloudflare utilizando polling o streaming. El polling es la opción predeterminada, mientras que el streaming es una opción premium. Los SDKs de Kameleoon están diseñados para cumplir con una política de latencia cero. Esto significa que el SDK no necesita realizar llamadas adicionales a servidores remotos para activar y asignar a los usuarios a un feature flag. Incluso la llamada más rápida a un servidor remoto añadiría un mínimo de 20 ms de latencia a la aplicación y, en función de varios factores, este retraso puede aumentar hasta cientos de milisegundos, o incluso bloquear por completo la carga de la aplicación web para el usuario final. Para evitar esta latencia adicional, los SDKs de Kameleoon asignan a los visitantes a los experimentos localmente.Polling (predeterminado)
En este modo, el SDK envía una solicitud al CDN a intervalos regulares (de forma predeterminada, cada 60 minutos) para recuperar la configuración más reciente. El intervalo puede personalizarse en la configuración del SDK mediante el parámetrorefresh_interval_minute (o refresh_interval).
- Carga inicial: Cuando se abre una página web, el SDK intenta primero cargar la configuración desde la caché (si está disponible).
- Actualización en segundo plano: Si ha transcurrido el
refresh_interval, el SDK realiza una solicitud en segundo plano para actualizar la configuración y refresca la caché. - Validez de la caché: La configuración almacenada en caché se considera válida durante 1,5 horas desde la última actualización satisfactoria. Si el visitante abre una página dentro de esta ventana de 1,5 horas, se utilizará la versión en caché. De lo contrario, la caché se ignora y se realiza una nueva solicitud de inmediato.
refresh_interval está establecido en 15 minutos y un usuario está expuesto a un feature flag. Si el feature flag se desactiva 10 minutos después y el mismo usuario vuelve al sitio web 20 minutos más tarde:- El SDK primero cargará la configuración desde la caché (que sigue mostrando el flag como activo).
- Simultáneamente, realizará una solicitud en segundo plano para obtener la configuración actualizada y refrescar la caché.
- Este diseño prioriza el rendimiento, garantizando cargas de página rápidas mientras se sincroniza de forma asíncrona con la configuración más reciente.
Impacto en experimentos y feature flags recién lanzados
dataFileCacheTtl y dataFileRefreshInterval determinan juntos con qué rapidez se evalúa a los visitantes según la configuración de un experimento o feature flag recién lanzado. Los visitantes cuyo archivo de datos en caché ya haya superado dataFileCacheTtl, o que aún no tengan ninguno, reciben la nueva configuración de inmediato, porque initialize() espera hasta que llega un archivo de datos actualizado. Los visitantes cuyo archivo de datos en caché todavía está dentro de dataFileCacheTtl siguen evaluándose con la configuración anterior hasta que ese caché supera dataFileCacheTtl, o hasta que una actualización en segundo plano se completa y cargan otra página.
Como resultado, con el valor predeterminado de dataFileCacheTtl de 90 minutos, el tráfico que entra en un experimento recién lanzado aumenta gradualmente en lugar de alcanzar el volumen completo de inmediato. Por ejemplo, un experimento recién lanzado podría exponer alrededor del 40% de su población objetivo final en la primera hora tras el lanzamiento, alrededor del 57% en la segunda hora, y más del 95% en la tercera hora, una vez que suficientes archivos de datos en caché de los visitantes hayan superado esa ventana de 90 minutos. Ningún visitante queda excluido de forma permanente del experimento; cada uno se incorpora en cuanto su dispositivo obtiene la configuración actualizada.
getEngineTrackingCode() y el script de tracking Engine.js puede mostrar igualmente un aumento gradual similar en los resultados registrados, causado por la caché de navegador independiente de Engine.js. Consulte el comportamiento de caché de Engine.js para más información.Streaming (opción premium)
El modo de streaming en tiempo real permite que el SDK aplique automáticamente la nueva configuración sin ningún retraso. Cuando el streaming está habilitado, el SDK de Kameleoon es notificado de cualquier cambio en la configuración en tiempo real gracias a los server-sent events (SSE). Principales ventajas:- Actualización inmediata de la configuración (sin esperar al próximo ciclo de polling).
- Menor uso de tráfico de red que el polling con intervalos cortos. El streaming no envía solicitudes periódicas. Abre la conexión una sola vez y la mantiene permanentemente abierta, lista para recibir datos.
- Esta es una opción premium que requiere suscripción. Para activar el streaming en tiempo real en una cuenta de Kameleoon, póngase en contacto con el Customer Success Manager o envíe un correo a support@kameleoon.com.
- El SDK de PHP no es compatible con el streaming debido a limitaciones técnicas. Actualmente, el SDK de PHP no puede escuchar las actualizaciones de configuración de forma no bloqueante, ya que el SDK de PHP no persiste entre solicitudes. Cada solicitud crea una nueva instancia del SDK que se destruye en cuanto recibe una respuesta.
- El modo de streaming en tiempo real actualmente no es compatible con las plataformas serverless de computación en el edge.
- Para otros lenguajes, consulte la matriz de compatibilidad de los SDKs para conocer la versión mínima compatible en el lenguaje preferido.
Almacenamiento de datos
Los SDKs de Kameleoon están diseñados para ofrecer un rendimiento y una experiencia de usuario óptimos. Para lograrlo, gestionan los datos del visitante localmente, ya sea en el servidor o directamente en el dispositivo, en lugar de obtenerlos desde una fuente remota. Todos los datos del visitante relevantes para los experimentos y feature flags de Kameleoon se almacenan localmente, lo que incluye las asignaciones de experimentos, los datos de segmentos y cualquier dato personalizado añadido mediante métodos comoaddData() o recuperado del servidor con getRemoteVisitorData(). La forma en que se almacenan estos datos y su vida útil difieren en función de si se utiliza un SDK del lado del servidor o del lado del cliente.
SDKs del lado del servidor
En los SDKs del lado del servidor, los datos del visitante se almacenan en la memoria volátil (RAM) del servidor, lo que proporciona un acceso rápido para las evaluaciones de experimentos y feature flags. Los datos se organizan como un mapa, utilizando valores únicos devisitorCode como claves.
- Almacenamiento basado en sesión: Los datos se conservan en memoria únicamente durante la sesión activa de un usuario, que finaliza, por defecto, tras 30 minutos de inactividad (sin vistas de página, clics, etc.). Todos los datos recopilados durante la sesión expiran al mismo tiempo.
- Parámetro
session_duration: La duración de la sesión puede ajustarse mediante el parámetrosession_durationen la configuración del SDK. Este parámetro permite alinear la sesión de Kameleoon con la gestión del lado del servidor de la aplicación.
- Parámetro
- Pérdida de datos al reiniciar el servidor: Dado que los datos se almacenan en RAM, se perderán si el servidor de la aplicación se reinicia. Por lo general, la pérdida de datos no supone una preocupación, ya que los datos importantes del visitante (como los IDs de usuario o atributos) se recuperan habitualmente desde una base de datos persistente y se reasignan al visitante en una nueva solicitud.
- Recuperación de datos de visitas anteriores: El método
getRemoteVisitorData()permite recuperar datos personalizados recogidos durante una visita previa del visitante. Este método asocia automáticamente la entrada de datos más reciente para un visitante, eliminando la necesidad de invocar de nuevoaddData().
SDKs del lado del cliente
A diferencia de los SDKs del lado del servidor, los SDKs del lado del cliente utilizan almacenamiento local persistente en el dispositivo del usuario. Este mecanismo asegura que los datos del visitante puedan conservarse entre sesiones del navegador, reinicios de la aplicación e incluso reinicios del dispositivo. El mecanismo de almacenamiento específico varía según la plataforma:- iOS:
UserDefaults - Android:
SharedPreferences - JavaScript/TypeScript:
LocalStorage- Nota para el SDK de JS: El
kameleoonVisitorCodetambién se comparte mediante cookies para garantizar una continuidad de datos y una comunicación fluidas con el archivo de aplicación de Kameleoon (engine.js).
- Nota para el SDK de JS: El
- React Native:
MMKV Storage
session_duration global, los SDKs del lado del cliente no operan con una expiración basada en sesión para todos los datos. En su lugar, utilizan targetingDataCleanupInterval o data_expiration_interval_minute para controlar cuánto tiempo se almacena cada dato individualmente.
targetingDataCleanupInterval/data_expiration_interval_minute: Estos parámetros determinan la vida útil individual de cada entrada de datos concreta. De forma predeterminada, los datos se almacenan de forma indefinida (hasta que se eliminen explícitamente) para garantizar experiencias de usuario coherentes entre visitas. Puede establecer este parámetro en un número específico de minutos si necesita que ciertos datos expiren transcurrido un determinado tiempo.- Persistencia de los datos: Esta diferencia fundamental implica que los datos persisten incluso si el usuario cierra la pestaña del navegador, abandona el sitio o cierra la aplicación móvil.
- Justificación de la convención de nombres: La diferencia en la terminología de los parámetros (
session_durationfrente adata_expiration_interval_minute) refleja directamente la filosofía de almacenamiento subyacente.session_durationrige la vida útil global de todos los datos dentro de una sesión del lado del servidor.data_expiration_interval_minutepermite un control granular sobre la vida útil de cada dato concreto almacenado de forma persistente en el cliente.
SDKs en el edge
Los SDKs en el edge, desplegados mediante los starter kits de serverless edge compute, no conservan los datos del visitante entre solicitudes de la misma manera que los SDKs del lado del servidor o del lado del cliente. Una plataforma edge puede destruir y recrear una instancia de worker en cualquier momento, por lo que un parámetrosession_duration no tiene memoria duradera a la que aplicarse, y un edge worker no tiene garantía de ver una solicitud posterior del mismo visitante.
Por esta razón, su integración es responsable de poner los datos del visitante a disposición del edge worker en cada solicitud, normalmente transmitiéndolos como cookie y llamando a addData() antes de evaluar un feature flag o experimento. Consulte Restricciones de targeting en el edge para obtener la explicación completa y un ejemplo de código.
Lista de dominios
Los SDKs de Kameleoon requieren acceso a un conjunto de URIs que proporcionan servicios específicos al SDK. Si está restringiendo el acceso y necesita incluir dominios explícitamente en la lista blanca, asegúrese de que nuestros SDKs puedan alcanzar los siguientes dominios:kameleoon.eu o en kameleoon.io según su fecha de creación. Asegúrese de utilizar el dominio que se muestra en su proyecto dentro de la aplicación Kameleoon.FAQ
¿Cuánto tarda en inicializarse un SDK?
¿Cuánto tarda en inicializarse un SDK?
¿Cómo se sincroniza la configuración del SDK con el servidor?
¿Cómo se sincroniza la configuración del SDK con el servidor?
¿Qué tecnología utiliza el método Streaming?
¿Qué tecnología utiliza el método Streaming?
¿Cuándo proporciona el CDN de Kameleoon una nueva configuración al SDK?
¿Cuándo proporciona el CDN de Kameleoon una nueva configuración al SDK?
¿Cómo configuro el SDK si el servidor tiene varias instancias?
¿Cómo configuro el SDK si el servidor tiene varias instancias?
addData() antes de cada solicitud de seguimiento, o cárguelos con el método getRemoteVisitorData.Si distintas instancias del servidor aplican configuraciones del SDK diferentes al mismo tiempo, utilice la opción Streaming para que cada instancia reciba los cambios de configuración en tiempo real.¿La atribución de variaciones y la asignación de tráfico se realizan de forma local o en un servidor?
¿La atribución de variaciones y la asignación de tráfico se realizan de forma local o en un servidor?
¿Cómo garantiza el SDK que los visitantes vean siempre la misma variación?
¿Cómo garantiza el SDK que los visitantes vean siempre la misma variación?
Si cambio la distribución o la exposición del tráfico, ¿los visitantes seguirán viendo la variación que se les asignó?
Si cambio la distribución o la exposición del tráfico, ¿los visitantes seguirán viendo la variación que se les asignó?
¿Dónde se almacenan los datos?
¿Dónde se almacenan los datos?