Tarantool: mirada de analista

¡Hola a todos! Me llamo Andrey Kapustin. Trabajo como analista de sistemas en Mail.ru Group. Nuestros productos forman un ecosistema único para el usuario, en el que los datos generan muchas infraestructuras independientes: servicios de pedido de taxis y alimentos, servicios postales, redes sociales. Hoy, cuanto más rápido y con mayor precisión podemos predecir las necesidades del cliente, más rápido y con mayor precisión podemos ofrecerle nuestros productos.

Muchos analistas e ingenieros de sistemas ahora hacen preguntas:

  1. ¿Cómo diseñar una arquitectura de plataforma de activación para marketing en tiempo real?
  2. ¿Cómo organizar una estructura de datos que cumpla con los requisitos de una estrategia de marketing para interactuar con los clientes?
  3. ¿Cómo garantizar un funcionamiento estable de dicho sistema bajo cargas muy altas?

Estos sistemas se basan en el procesamiento de alta carga y el análisis de big data. Hemos adquirido una experiencia considerable en estas áreas. Y en el ejemplo de una historia real, le contaré acerca de nuestro enfoque de análisis y desarrollo de soluciones en el campo del marketing en tiempo real utilizando Tarantool.

Una vez, un gran operador de telecomunicaciones nos pidió ayuda.

La tarea era esta:

Tenemos más de 100 millones de suscriptores. Sabemos mucho sobre ellos: saldo actual, volumen de tráfico, servicios conectados, viajes, lugares favoritos. Usamos la información como podemos: recolectamos datos durante el día, colocamos grandes cantidades de información en el repositorio (DataLake). Iniciamos manejadores en la noche, en la mañana creamos campañas publicitarias y enviamos ofertas.

¡Y queremos hacer lo mismo en tiempo real!

¿Por qué? Debido a que cuanto más rápido procesa la información el operador de telecomunicaciones, más dinero puede ganar. Por ejemplo, en compras impulsivas: un usuario pasa por un café a la hora del almuerzo, y luego recibe un descuento en su teléfono para que elija este café en particular. Es decir, debe "simplemente" ofrecer el producto correcto en el momento correcto y ayudar a responder de inmediato a la oferta de manera conveniente.



Lo que necesita para resolver un problema comercial:

  • Puede determinar la necesidad a través del perfil del cliente.
  • Determine el momento, de acuerdo con los eventos de la vida humana.
  • Estimule la retroalimentación: elija el canal de comunicación óptimo.

Esto se llama marketing en tiempo real. Con respecto al sector de las telecomunicaciones, el envío de mensajes personalizados relevantes a los suscriptores en el momento adecuado con la capacidad de responder INMEDIATAMENTE a una oferta. Las propuestas pueden formarse tanto para el grupo objetivo como para un usuario específico, mientras que la solicitud debe procesarse en tiempo real en cualquier caso.

Desde un punto de vista técnico, debemos resolver los siguientes problemas:

  • Mantener datos actualizados de más de 100 millones de suscriptores;
  • Procesamiento de flujo de eventos en tiempo real a una carga de 30,000 RPS;
  • Formación y enrutamiento de ofertas dirigidas a suscriptores con el cumplimiento de requisitos no funcionales (tiempo de respuesta, disponibilidad, etc.);
  • Conexión perfecta de nuevas fuentes de datos heterogéneos por suscriptores.

"Tiempo real" en este caso significa procesar información en 30 segundos. Ya no tiene sentido, se pierde el momento, el cliente se ha ido. Y lo más triste es que en tal situación no quedará claro por qué (?) - ¿Propusimos algo incorrecto o no lo logramos a tiempo?

Obtener la respuesta a esta pregunta es muy importante para el desarrollo de productos:

  1. Promoción de marketing de sus productos: pruebe hipótesis, aumente los ingresos.
  2. Atraemos clientes potenciales: invertimos en publicidad, capturamos el mercado.
  3. Conectamos servicios o servicios adicionales: ampliamos la línea de productos.

Es fácil cometer errores en cada etapa. Y el precio del error es excelente. ¡Debemos vencer con rapidez y precisión! Y para esto, la información del cliente debe ser completa y actual. ¡En este caso, la información realmente vale la pena!

Después de todo, cuanto más sepamos acerca de nuestros clientes, más ganaremos. Esto significa que agregar cada nuevo parámetro al perfil del cliente aumenta la precisión de la orientación. Pero este es un proceso continuo porque:

  1. La base de clientes está en constante crecimiento.
  2. La gama de servicios se está expandiendo.

En tales condiciones, es muy efectivo segmentar la base de clientes. En este caso, se decidió utilizar el mecanismo de estratificación: clasificación multivariante de suscriptores.

En pocas palabras, distinguimos grupos específicos de suscriptores (estratos) por rangos de valores de un número ilimitado de atributos. En este caso, el suscriptor debe cambiar automáticamente el estrato inmediatamente después de la transición del valor del atributo al rango correspondiente.

La siguiente figura es un ejemplo de un modelo tridimensional de estratificación desde la infancia. Una pelota es un suscriptor.



Para cada cliente, podemos calcular cuánto gastaron en atraerlo, cuánto ganaron y cómo. Es decir, sabemos cuánto cuesta la información y cuánto perdemos si no la actualizamos.

Ellos contaron y decidieron: ¡es necesario actualizar! Y de inmediato surgen problemas: siempre falta algo. En cada proyecto, los nuevos requisitos provienen del cliente que contradicen los conocimientos tradicionales, la arquitectura, entre sí y ... el sentido común. Mantener la integridad y relevancia de los datos es cada vez más difícil cada día. Aparecen nuevas fuentes de información con nuevos atributos que no están claros dónde almacenar y cómo procesar.

Hay que tener en cuenta que cuanto más se normalizadatos, más restricciones, directorios, cheques en ellos. Cualquiera que haya intentado agregar un par de campos a la tabla "sobre la marcha" sabe qué tipo de "pintor" es: ¡no encaja en el modelo de datos actual! ¿Y cómo puede explicar el cliente que si agrega un nuevo campo, tendrá que volver a escribir la mitad del código del proyecto? Nosotros "colapsamos" o "descartamos" los análisis "extra" en la entrada, y como resultado no podemos formar ofertas relevantes.

Los colegas occidentales llaman a este efecto "Mierda adentro - Mierda afuera".

Como resultado, los datos ocupan más espacio y son más difíciles de procesar. Con el aumento en la cantidad de información, esto se vuelve crítico, porque la velocidad de procesamiento de transacciones disminuye. Y nuestro objetivo es procesar cada solicitud por no más de un minuto con una carga de 30,000 solicitudes por segundo.

Conclusión: para marketing en tiempo real, normalizaciónno apto para más de 100 millones de suscriptores.

Llegamos a una solución en forma de perfil universal de cliente. Se encuentra en el almacenamiento de valores clave, por lo que no podemos arreglar la estructura de datos. Cada columna es una clave y un valor, que pueden ser cualquier cosa.

Tenemos una combinación de:

  • Atributos estáticos que rara vez se actualizan (nombre, pasaporte, dirección). Bloqueo obligatorio con identificación.
  • Y una cola dinámica de longitud arbitraria, a menudo datos actualizados que dependen de la fuente. Varios bloques independientes para cada fuente.

Este enfoque se llama desnormalización. ¿Qué tan conveniente es?

  1. La "cola" puede no ser validada.
  2. Guardamos los datos "en bruto" tal como están sin procesarlos.
  3. Guardamos toda la información entrante, no perdemos nada.
  4. ID , .
  5. ( 2-3 ), .
  6. : .


Ahora debe seleccionar una herramienta para la implementación. Por lo general, esto lo hace el arquitecto de acuerdo con los requisitos que el analista reunió. Es muy importante averiguar el NFT: la cantidad de datos esperada y el nivel de carga. Depende de qué métodos de almacenamiento y procesamiento de datos usaremos.

El encabezado de este capítulo sugiere que nuestro servicio procesará muchos datos. Y mucho, ¿cuánto? Vamos a resolverlo.

Los datos pueden considerarse grandes si la relación no es visible a simple vista.

Procesamos más de 100 millones de perfiles de clientes diferentes que contienen información no estructurada, a menudo se actualizan y usan, esto es un gran dato real.

Necesita almacenar en caché los perfiles actuales de los clientes. Sin almacenar datos calientes en RAM, no se puede lograr el procesamiento en tiempo real.

Alta carga


Ahora trataremos con la intensidad de carga, es decir, con el número de solicitudes. El término "alta carga" se utiliza para describir situaciones en las que el equipo deja de soportar la carga.

Procesamos diferentes tipos de eventos que ocurren continuamente con una intensidad de 10 a 30 mil solicitudes por segundo. En este caso, se utiliza una lógica empresarial compleja y la velocidad de reacción es crítica. Obviamente, estamos diseñando un servicio altamente cargado, que debería escalar dinámicamente dependiendo de la carga instantánea.

Tarantool como acelerador


Nosotros en Mail.ru Group usamos Tarantool para resolver tales problemas. En Habré se ha dicho mucho sobre cómo está construido "bajo el capó", no me repetiré, solo recordaré los puntos principales:

Tarantool es un DBMS en memoria y un servidor de aplicaciones en una botella.

Cuando se trabaja con una gran cantidad de datos, es recomendable usarlo de dos maneras:

  1. Como un escaparate de datos para almacenar en caché la información en la RAM en aras de acelerar el acceso.
  2. Como servidor de aplicaciones para procesar datos de acuerdo con las reglas especificadas.

Es decir, la lógica de negocios se almacena junto a los datos, lo cual es vital para servicios altamente cargados. En nuestro proyecto, utilizamos Tarantool como un escaparate de datos "inteligente" con lógica de negocios incorporada, de acuerdo con la cual se lleva a cabo el procesamiento sobre la marcha del flujo entrante de eventos e información.

Por qué Tarantool es efectivo para RTM:

  1. Almacenamiento en caché de datos en caliente. El perfil del cliente se almacena en la memoria caché, por lo que siempre está actualizado.
  2. Computación compleja en tiempo real. Las ofertas personales a los clientes se forman en tiempo real para cada evento.
  3. Solución escalable y tolerante a fallas:

Hay dos riesgos obvios en nuestro proyecto:

  1. , . — Tarantool c , .
  2. , . , . , . , . es decir distribuya 100 millones de registros de la tabla de perfil del cliente entre varios fragmentos para paralelizar el procesamiento de consultas y así reducir la carga en el registro. El ejemplo más simple es dividir la tabla de perfil del cliente por el rango de valores de ID. Para resolver este problema, Tarantool proporciona herramientas de escala horizontal, sobre las cuales se puede encontrar, por ejemplo, en el artículo " Cartucho de Tarantool: fragmentación del backend de Lua en tres líneas ".

Conclusión


Tarantool no reemplaza Oracle u otros repositorios analíticos. Al mismo tiempo, es efectivo para procesar una gran cantidad de datos en tiempo real. Resolvimos con éxito la tarea del cliente dentro de los términos acordados y el presupuesto del proyecto, por lo que recomiendo experimentar con esta herramienta al crear servicios altamente cargados.

All Articles