Sistemas de análisis de servidores

Esta es la segunda parte de una serie de artículos sobre sistemas analíticos (enlace a la parte 1).

Sistemas de análisis de servidores

Hoy en día, no hay duda de que el procesamiento preciso de los datos y la interpretación de los resultados pueden ayudar a casi cualquier tipo de negocio. En este sentido, los sistemas analíticos se cargan cada vez más de parámetros y crece el número de activadores y eventos de usuario en las aplicaciones.
Debido a esto, las empresas están dando a sus analistas cada vez más información "en bruto" para que la analicen y la conviertan en las decisiones correctas. No se debe subestimar la importancia de un sistema de análisis para una empresa, y el sistema en sí debe ser confiable y sostenible.

Analistas de clientes

El análisis de clientes es un servicio que una empresa conecta para su sitio web o aplicación a través del SDK oficial, lo integra en su propia base de código y selecciona los activadores de eventos. Este enfoque tiene un inconveniente obvio: todos los datos recopilados no pueden procesarse completamente como usted quisiera, debido a las limitaciones del servicio elegido. Por ejemplo, en un sistema no será fácil ejecutar tareas de MapReduce, en otro no podrá ejecutar su modelo. Otra desventaja será una factura regular (impresionante) por los servicios.
Hay muchas soluciones de análisis de clientes en el mercado, pero tarde o temprano los analistas se enfrentan al hecho de que no existe un servicio universal adecuado para cualquier tarea (mientras que los precios de todos estos servicios aumentan constantemente). En tal situación, las empresas suelen decidir crear su propio sistema de análisis con todas las configuraciones y funciones personalizadas necesarias.

Analistas de servidores

El análisis del lado del servidor es un servicio que se puede implementar internamente en los propios servidores de una empresa y (normalmente) internamente. En este modelo, todos los eventos de los usuarios se almacenan en servidores internos, lo que permite a los desarrolladores probar diferentes bases de datos para el almacenamiento y elegir la arquitectura más conveniente. E incluso si aún desea utilizar análisis del lado del cliente de terceros para algunas tareas, aún será posible.
El análisis del lado del servidor se puede implementar de dos maneras. Primero: elija algunas utilidades de código abierto, impleméntelas en sus máquinas y desarrolle una lógica empresarial.

Pros
Contras

Puedes personalizar cualquier cosa.
A menudo es muy difícil y se necesitan desarrolladores independientes.

Segundo: opte por servicios SaaS (Amazon, Google, Azure) en lugar de implementarlos usted mismo. Hablaremos de SaaS con más detalle en la tercera parte.

Pros
Contras

Puede ser más barato en volúmenes medianos, pero con un gran aumento seguirá siendo demasiado caro.
No se pueden controlar todos los parámetros

La administración pasa enteramente a los hombros del proveedor de servicios.
No siempre se sabe qué hay dentro del servicio (puede que no sea necesario)

Cómo recopilar análisis del servidor

Si queremos dejar de utilizar análisis de clientes y crear el nuestro propio, primero debemos pensar en la arquitectura del nuevo sistema. A continuación te contaré paso a paso qué debes considerar, por qué es necesario cada uno de los pasos y qué herramientas puedes utilizar.

1. Adquisición de datos

Al igual que en el caso del análisis de clientes, en primer lugar, los analistas de la empresa seleccionan los tipos de eventos que quieren estudiar más a fondo y los recopilan en una lista. Por lo general, estos eventos ocurren en un orden determinado, que se denomina "esquema de eventos".
Además, imaginemos que una aplicación móvil (sitio web) tiene usuarios (dispositivos) habituales y muchos servidores. Para transferir eventos de forma segura desde dispositivos a servidores, se necesita una capa intermedia. Dependiendo de la arquitectura, pueden ocurrir varias colas de eventos diferentes.
Apache Kafka - es pub/subcola, que se utiliza como cola para recopilar eventos.

según publicar en Quora En 2014, el creador de Apache Kafka decidió ponerle al software el nombre de Franz Kafka porque “es un sistema optimizado para escritura” y porque le encantaban los escritos de Kafka. — Wikipedia

En nuestro ejemplo, hay muchos productores de datos y sus consumidores (dispositivos y servidores), y Kafka ayuda a conectarlos entre sí. Los consumidores serán descritos con más detalle en los próximos pasos, donde serán los actores principales. Ahora consideraremos sólo los productores de datos (eventos).
Kafka resume los conceptos de cola y partición; más específicamente sobre esto, es mejor leerlo en otro lugar (por ejemplo, en documentación). Sin entrar en detalles, imaginemos que se lanza una aplicación móvil para dos sistemas operativos diferentes. Luego, cada versión crea su propio flujo de eventos independiente. Los productores envían eventos a Kafka, que se registran en una cola adecuada.
Sistemas de análisis de servidores
(imagen por lo tanto)

Al mismo tiempo, Kafka le permite leer en fragmentos y procesar el flujo de eventos en minilotes. Kafka es una herramienta muy conveniente que se adapta bien a las necesidades crecientes (por ejemplo, mediante geolocalización de eventos).
Por lo general, un fragmento es suficiente, pero las cosas se complican con la comunicación al escalar (como siempre). Probablemente nadie quiera utilizar un solo fragmento físico en producción, ya que la arquitectura debe ser tolerante a fallos. Además de Kafka, existe otra solución conocida: RabbitMQ. No lo usamos en producción como cola para análisis de eventos (si tiene esa experiencia, ¡cuéntenoslo en los comentarios!). Sin embargo, se utilizó AWS Kinesis.

Antes de pasar al siguiente paso, es necesario mencionar una capa adicional del sistema: el almacenamiento de registros sin procesar. Esta no es una capa obligatoria, pero será útil en caso de que algo salga mal y las colas de eventos en Kafka se restablezcan a cero. Almacenar registros sin procesar no requiere una solución compleja y costosa; simplemente puede escribirlos en algún lugar en el orden correcto (incluso en un disco duro).
Sistemas de análisis de servidores

2. Manejo de transmisiones de eventos

Una vez que hayamos preparado todos los eventos y los hayamos colocado en las colas adecuadas, pasamos al paso de procesamiento. Aquí hablaré de las dos opciones de procesamiento más comunes.
La primera opción es habilitar Spark Streaming en un sistema Apache. Todos los productos Apache viven en HDFS, un sistema de archivos de réplica seguro. Spark Streaming es una herramienta fácil de usar que procesa datos de transmisión y se escala bien. Sin embargo, puede resultar difícil de mantener.
Otra opción es crear su propio controlador de eventos. Para hacer esto, por ejemplo, necesita escribir una aplicación Python, compilarla en Docker y suscribirse a las colas de Kafka. Cuando los desencadenantes lleguen a los controladores en la ventana acoplable, comenzará el procesamiento. Con este método, necesita mantener aplicaciones en ejecución constantemente.
Supongamos que hemos elegido una de las opciones descritas anteriormente y pasemos al procesamiento en sí. Los procesadores deberían comenzar comprobando la validez de los datos, filtrando basura y eventos "rotos". Para la validación solemos utilizar Cerberus. Después de eso, se puede realizar el mapeo de datos: los datos de diferentes fuentes se normalizan y estandarizan para agregarlos a una tabla común.
Sistemas de análisis de servidores

3. Base de datos

El tercer paso es guardar eventos normalizados. Cuando trabajamos con un sistema analítico ya preparado, a menudo tendremos que acceder a ellos, por lo que es importante elegir una base de datos conveniente.
Si los datos encajan bien en un esquema fijo, puede elegir casa de clic o alguna otra base de datos de columnas. Entonces las agregaciones funcionarán muy rápidamente. La desventaja es que el esquema está rígidamente fijo y, por lo tanto, no funcionará agregar objetos arbitrarios sin refinarlo (por ejemplo, cuando ocurre un evento no estándar). Pero se puede hacer muy rápido.
Para datos no estructurados, puede tomar NoSQL, por ejemplo, Apache Cassandra. Se ejecuta en HDFS, se replica bien, puede generar muchas instancias y es tolerante a fallas.
Puedes plantear algo más simple, por ejemplo, MongoDB. Es bastante lento incluso para volúmenes pequeños. Pero la ventaja es que es muy sencillo y, por tanto, adecuado para empezar.
Sistemas de análisis de servidores

4. Agregaciones

Habiendo guardado cuidadosamente todos los eventos, queremos recopilar toda la información importante del lote que llegó y actualizar la base de datos. A nivel mundial, queremos paneles y métricas relevantes. Por ejemplo, desde eventos para recopilar un perfil de usuario y de alguna manera medir el comportamiento. Los eventos se agregan, recopilan y guardan nuevamente (ya en tablas de usuario). Al mismo tiempo, es posible construir un sistema de tal manera que también se conecte un filtro al agregador coordinador: para recopilar usuarios solo de un determinado tipo de eventos.
Después de eso, si alguien del equipo solo necesita análisis de alto nivel, puede conectar sistemas de análisis externos. Puedes volver a tomar Mixpanel. pero como es bastante caro, no se envían allí todos los eventos de usuario, sino sólo los necesarios. Para hacer esto, necesitamos crear un coordinador que transfiera algunos eventos sin procesar o algo que nosotros mismos hayamos agregado anteriormente a sistemas externos, API o plataformas publicitarias.
Sistemas de análisis de servidores

5. Interfaz

Debe conectar la interfaz al sistema creado. Un buen ejemplo es el servicio. redash, es una GUI de base de datos que ayuda a construir paneles. Cómo funciona la interacción:

  1. El usuario realiza una consulta SQL.
  2. En respuesta, recibe una señal.
  3. Crea una 'nueva visualización' y obtiene un hermoso gráfico que ya puedes guardar tú mismo.

Las visualizaciones en el servicio se actualizan automáticamente, puede configurar y realizar un seguimiento de su seguimiento. Redash es gratuito, en el caso del alojamiento propio, pero como SaaS costará 50 dólares al mes.
Sistemas de análisis de servidores

Conclusión

Después de completar todos los pasos anteriores, creará su análisis del lado del servidor. Tenga en cuenta que esto no es tan fácil como simplemente conectar el análisis del cliente, porque todo debe configurarse usted mismo. Por lo tanto, antes de crear su propio sistema, vale la pena comparar la necesidad de un sistema de análisis serio con los recursos que está dispuesto a asignarle.
Si hizo todos los cálculos y descubrió que los costos son demasiado altos, en la siguiente parte hablaré sobre cómo hacer una versión más económica de análisis de back-end.

¡Gracias por leer! Estaré encantado de responder preguntas en los comentarios.

Fuente: habr.com

Añadir un comentario