Volcano Engine ByteHouse: un conjunto de soluciones para hacer que los motores OLAP sean más eficientes en escenarios de entrega precisos

A medida que el dividendo del tráfico se desvanece gradualmente, cada vez más empresas y profesionales de la publicidad han comenzado a explorar nuevos caminos de marketing refinado, reemplazando el anterior bombardeo publicitario extenso y de tráfico completo. El marketing refinado significa seleccionar el público objetivo más potencial entre cientos de millones de personas, lo que sin duda plantea un gran desafío técnico para las capacidades del almacén de datos que brindan soporte básico al motor.

Este artículo se centrará en la tecnología del motor OLAP de ByteDance y la experiencia de implementación. Tomando la escena interna de ByteDance como ejemplo, analizará específicamente la lógica de implementación y los efectos comerciales del negocio publicitario.

Escenarios publicitarios precisos

El proceso de publicidad generalmente incluye procesos clave como la recopilación de datos -> integración de datos -> selección de grupo -> entrega de publicidad -> análisis de retroalimentación. La selección de grupo es un paso clave para una publicidad precisa. Ayuda a determinar el público objetivo del anuncio y ayuda la plataforma de entrega de acuerdo con Optimizar estrategias de entrega para diferentes audiencias y objetivos publicitarios para aumentar los ingresos publicitarios;

Estimación de multitudes

La estimación de la multitud se basa principalmente en ciertas condiciones de selección de círculos para confirmar la cantidad de usuarios afectados. En el proceso de entrega de publicidad precisa, los anunciantes necesitan conocer el número aproximado de personas en el grupo de personas seleccionado actualmente, que se utiliza para ayudar a juzgar la situación de entrega y luego determinar el presupuesto de entrega. Por lo general, el tiempo de cálculo no debe exceder 5 segundos.

d5a948bdf43c7422a40a25fae9be3773.png

Publicidad

53012791fc8ca678a81171a832a20444.png

Problemas y puntos débiles encontrados en el proceso de colocación precisa de anuncios:

1. Estimación de datos: los anunciantes deben estimar el grupo de personas seleccionado para poder juzgar la situación de entrega y determinar el presupuesto de entrega. Sin embargo, el paquete multitudinario tiene una gran cantidad de datos y una gran base. El número de usuarios en la plataforma es de cientos de millones, y el DAU de Douyin solo es de cientos de millones. Las multitudes correspondientes a Douyin y Toutiao están en el nivel de mil millones. La primera versión estimada usa ElasticSearch, pero debido a que los datos son demasiado grandes , solo se puede utilizar el almacenamiento de muestras 1/10, lo que genera un error del 10%, el negocio es inaceptable.

2. Rendimiento de la consulta: los anunciantes pueden establecer una condición de selección de círculo muy compleja, lo que resulta en cálculos complejos (un solo cálculo puede contener cientos o incluso miles de paquetes masivos), y los programas Hive y ES pueden reducir la velocidad de la consulta al procesar grandes cantidades de datos. Se volverá muy lento. Si necesita consultar a todos los usuarios de un anunciante, debe escanear toda la base de usuarios, y este proceso puede tardar varios minutos o incluso horas, lo que no puede cumplir con los requisitos en tiempo real.

3. Gran espacio de almacenamiento: soluciones como Hive y ES requieren estructuras de índice adicionales, lo que genera un mayor espacio de almacenamiento y mayores costos de almacenamiento. Por ejemplo, si es necesario indexar los atributos del usuario, se requiere espacio de almacenamiento adicional para almacenar los datos del índice.

4. No admite alta concurrencia: soluciones como Hive y ES son propensas a tener problemas de rendimiento al procesar solicitudes de alta concurrencia y no pueden admitir la entrega eficiente de publicidad. Por ejemplo, si varios anunciantes necesitan consultar información del usuario al mismo tiempo, pueden ocurrir problemas como el bloqueo de consultas o retrasos en la respuesta.

5. Eficiencia de la consulta de datos: ClickHouse se utiliza para respaldar la estimación, pero con el crecimiento del volumen de datos, a ClickHouse le resulta difícil garantizar el tiempo de consulta con el soporte del motor de almacenamiento actual. Esto conduce al problema de la eficiencia de la consulta de datos y afecta la experiencia del usuario.

Solución ByteHouse BitEngine

Introducción al programa

nuevo motor de consultas

  • Basado en características distribuidas y de alto rendimiento, ClickHouse puede cumplir con los requisitos de análisis y consulta de datos a gran escala. Por lo tanto, el equipo de I + D desarrolló el almacén de datos nativo de la nube del motor volcán ByteHouse basado en ClickHouse de código abierto y personalizó un conjunto de modelos de procesamiento en él: BitEngine, que se utiliza para resolver el problema de mejora del rendimiento de la intersección y el cálculo complementario de conjuntos en escenarios de análisis en tiempo real.

  • El nuevo motor de consulta desarrollado para el negocio de estimación de público publicitario se basa en los motores de la serie MergeTree Family proporcionados por ByteHouse, agregando un nuevo tipo de mapa de bits64 y una serie de funciones de agregación relacionadas. El tipo bitmap64 proporcionado por BitEngine es adecuado para almacenar y calcular la relación entre una gran cantidad de ID de usuario; en el negocio de estimación de multitudes publicitarias, el tipo bitmap64 se utiliza para almacenar datos de paquetes de multitudes y luego convertir la intersección y el cálculo del complemento entre multitudes. paquetes en mapa de bits Intersección y complementación entre ellos, de modo que se logre un índice de rendimiento muy superior al de las consultas ordinarias.

Pasos de implementación

Cree un tipo bitmap64, que puede almacenar directamente la ID del usuario en el mapa de bits, proporcionar una serie de intersecciones y cálculos de agregación complementaria, y también esperamos aprovechar al máximo las capacidades de computación paralela de las CPU de múltiples núcleos, por eso diseñamos BitEngine. El ejemplo es el siguiente

CREATE TABLE cdp.tag_uids_map (
tags String,
uids BitMap64 BitEngineEncode
)ENGINE = HaMergeTree('/clickhouse/xxxx/{shard}', '{replica}')
ORDER BY tag

El formato de almacenamiento de tag_uids_map es el siguiente

etiqueta fluidos
A {10001,20001,30001,40001,50001,60001,70001,80001,90001}
B {10001,20001,20002,20003,20004,20005,20006,20007,20008}

El resultado SQL para consultar A&B es

SELECCIONE bitmapCount('A&B') DE tag_uids_map

BitEngine implementa lógica

Idea principal
  1. Particione y codifique los datos para garantizar que no haya intersección entre los datos en cada intervalo, y luego use el mapa de bits rugiente para guardar los datos;

  2. Durante el cálculo, los datos de cada partición se pueden agregar de forma independiente para aprovechar al máximo la capacidad paralela de la máquina. El cálculo de agregación dentro de cada partición es la intersección y complementación de múltiples mapas de bits. El cálculo eficiente de intersección y complementación de mapas de bits rugientes reduce el uso de CPU y memoria;

  3. El resultado codificado se invierte a través del diccionario. La codificación de datos es para hacer que la distribución de datos sea lo más densa posible y el mapa de bits rugiente puede obtener un mejor rendimiento al almacenar y calcular.

Aplicaciones de negocios
elementos críticos del negocio
  1. Paquete de multitud: los datos de la multitud calculados según las reglas personalizadas del anunciante, y la etiqueta son los datos de la multitud definidos por el equipo de dmp de acuerdo con la demanda del mercado.

  2. ID de etiqueta: se actualiza una vez al día de acuerdo con las reglas de salida, el ID de multitud aumenta automáticamente y se calcula nuevamente todos los días de acuerdo con las necesidades de los anunciantes.

Unicódigo
  1. Para codificar uniformemente los uids de los datos de la etiqueta y los datos de la multitud, el servicio de codificación primero extrae los uids de los datos de la etiqueta y los uids de los datos de la multitud para una codificación unificada, y distribuye uniformemente la cantidad total de uids en 10 000 depósitos, y el número de depósito es i[ 0<=i<=9999], el uid se codifica secuencialmente comenzando desde 1 en cada depósito y el rango de cada depósito es i*2^40 - (i+1)*2^40.

  2. Los datos de uid aumentan cada día, por lo que es necesario admitir la codificación incremental. El servicio de codificación primero obtendrá uids incrementales todos los días, los codificará y los colocará en cada depósito de forma secuencial.

almacenamiento de datos
  1. Una vez completada la codificación, los datos del diccionario se escribirán primero de manera uniforme en la tabla de la colmena, lo cual es conveniente para varios escenarios de uso del diccionario.

  2. Después de particionar y codificar los datos, ClickHouse puede almacenar los datos en una variedad de formatos de importación de datos como bitmap64 en el disco.

cálculo de datos

¿Cómo aprovecha BitEngine la capacidad paralela de la computadora para completar el cálculo de intersección y complemento entre múltiples mapas de bits en cada partición?

Hay un problema:

Supongamos que hay cuatro mapas de bits, a saber, a, b, c, d; entonces (a | c) & (b | d) no es necesariamente igual a (a & b) | (c & d).

paquete de multitud

Paquete de multitud A = [10001, 20001, 30001, 40001, 50001], Paquete de multitud B = [10001, 20001, 20002, 20003, 20004]

Resultado deseado

Calcule A&B a través de BitEngine = [10001, 20001]

Diseño

  • El paquete de multitud se divide en varios intervalos de acuerdo con ciertas reglas, y los paquetes de multitud entre dos intervalos cualesquiera no tienen intersección.

  • Un hilo de cálculo solo lee los paquetes masivos del mismo intervalo para el cálculo y obtiene un resultado intermedio.

  • El resultado intermedio final solo necesita realizar un mapa de bits o un cálculo.

Para este diseño, BitEngine debe garantizar que la lectura y el cálculo de datos se realicen estrictamente en intervalos. BitEngine construirá una tarea de lectura para cada archivo al leer datos, y un módulo de programación de subprocesos completará la programación y lectura de toda la tarea. El principio de programación de este módulo de programación de subprocesos es:

  • Los archivos en diferentes particiones no serán de lectura cruzada (la granularidad de lectura de archivos de ClickHouse es menor que la granularidad del archivo, habrá varios subprocesos leyendo un archivo sucesivamente y una partición también puede constar de varios archivos), es decir, un subproceso solo puede leer A_1, B_1, no leerá A_2 o B_2 en el medio.

  • Después de leer una partición, los cálculos agregados se pueden activar inmediatamente para ejecutar la lógica de cálculo entre mapas de bits para obtener resultados intermedios. Es decir, después de leer A_1 y B_1, A_1 y B_1 se pueden calcular inmediatamente.

  • Una vez que el hilo calcula los resultados intermedios, puede continuar leyendo otros archivos.

Después de que BitEngine complete el cálculo de todos los resultados intermedios, fusionará los datos de acuerdo con los requisitos de salida de los resultados:

  • Si el resultado a calcular es la cardinalidad del mapa de bits, BitEngine suma directamente la cardinalidad de cada resultado intermedio

  • Si el resultado del cálculo requiere un mapa de bits, BitEngine fusiona directamente todos los mapas de bits, donde la fusión se refiere a mapa de bits o cálculo.

efecto empresarial

Efecto comercial publicitario.
  1. Espacio de almacenamiento de datos 3 veces más pequeño +

  2. Tiempo de importación reducido en 3x+

  3. La consulta avg/pct99/max disminuyó significativamente, pct99 se redujo de 5 s a 2 s

  4. El uso de CPU cae significativamente, PageCache ahorra más de 100 G

  5. El error de consulta se redujo del 10% al 0%

Consulta el monitoreo que requiere mucho tiempo antes y después de que BitEngine se conecte
33617116a2b2dbcdd656190d9c6840b1.png
Comparación de carga de CPU después de que BitEngine se conecte
75fdaf9542fd4a73624f7b2325b1475a.png
Uso de PageCache (cuanto más bajo, mejor)
537289b26e05e112485fe63f9a4a12f6.png

Resumen

Después de que BitEngine entró en línea, después de muchos ajustes, logró buenos rendimientos en el negocio de estimación de público publicitario. Actualmente, BitEngine se ha integrado en ByteHouse, el almacén de datos nativo de la nube del motor volcánico, para salida externa. El motor volcánico ByteHouse proporciona principalmente a los usuarios una experiencia de análisis extremadamente rápida. Puede admitir análisis de datos en tiempo real y análisis de datos masivos fuera de línea. Tiene capacidades convenientes de expansión y contracción elástica, rendimiento de análisis extremo y características ricas a nivel empresarial. cooperó con China Earthquake Network Center, Neptunus Group, Lilith Games, Geekbang Technology y muchas otras empresas de la industria han llegado a cooperar para ayudar profundamente a la transformación digital de diversas industrias. En el futuro, BitEngine continuará mejorando sus funciones para admitir escenarios comerciales publicitarios, que incluyen: el motor integra codificación de datos para que la codificación sea transparente para los usuarios; proporciona almacenamiento en caché detallado para almacenar en caché los resultados del cálculo de algunas expresiones repetidas; optimiza el análisis de expresiones , etc.

Supongo que te gusta

Origin blog.csdn.net/ByteDanceTech/article/details/132373404
Recomendado
Clasificación