Beclever blog

Nuestras últimas novedades

Dentro de la monitorización IT, hay distintos tipos de soluciones que nos permiten conocer el estado de nuestra infraestructura y aplicaciones. Dos de estos tipos son NPM (Network Performance Monitoring) y APM (Application Performance Management). Ambos tipos de soluciones permiten resolver distintas necesidades de monitorización, que intentaremos exponer a continuación.

 

APM es un término que se asocia con la monitorización de las aplicaciones, teniendo en cuenta el rendimiento de las mismas, la experiencia del usuario final y las posibles dependencias entre los distintos componentes de una aplicación.

 

NPM se encarga de monitorizar y analizar el tráfico de red enviado por la red. Permite conocer distintas métricas como tiempo de respuesta, protocolos utilizados, análisis de enrutado, errores, etc…

 

Leyendo las definiciones anteriores, podríamos decir que son soluciones con un cometido muy distinto, y, por lo tanto, totalmente complementarios. En este artículo me gustaría analizar si efectivamente es así.

 

Uno de los casos prácticos de una solución APM, es analizar el rendimiento de una aplicación, incluyendo la experiencia del usuario final. Esto implica el cálculo de los tiempos de respuesta de la propia aplicación. ¿Puede una solución NPM dar la misma información?

 

Antes de entrar en mayor detalle, analicemos cómo funciona la solución APM. Una solución APM consta de dos partes fundamentales:

  • Rendimiento de la aplicación: se monitoriza el rendimiento de la aplicación, calculando los tiempos de ejecución de la propia aplicación en el servidor de aplicación. Esto implica que la solución APM, calculará el tiempo de ejecución de cada método, clase o sentencia sql ejecutada en el procesamiento de una petición generada por el usuario. De esta manera, para aquellos casos donde se detecte un tiempo inadecuado, la solución APM nos informará del método, clase, sentencia sql responsable de ese rendimiento inadecuado.
  • Experiencia del usuario final: se monitoriza el tiempo de respuesta de las peticiones reales que los usuarios generan sobre una aplicación, desde que hacen la petición, hasta que se entrega y se muestra toda la información necesaria en la aplicación. Este tiempo incluye el tiempo de ejecución de la petición por parte del servidor de aplicaciones, el tiempo transcurrido en la comunicación de las peticiones y envío de la información, y por último, el tiempo de renderización en el equipo cliente.

 

Una vez leído lo que hace una solución APM, vemos como punto en común, el término “tiempo de respuesta”. Intentemos entrar en mayor detalle en NPM.

 

Una solución NPM, consiste en un sniffado del tráfico de red, que me permitirá analizar el tráfico de red, teniendo en cuenta la correspondencia de los paquetes enviados/recibidos para una comunicación y la aplicación que los genera, el tipo de tráfico existente en la red y los tiempos en transportar los paquetes de red asociados a una comunicación concreta. Las soluciones NPM entienden los protocolos de comunicación utilizados, pudiendo extraer información a nivel de aplicación de dichos paquetes. Esto significa que una solución NPM puede monitorizar también una aplicación multicapa y dar información de tiempo de respuesta de dicha aplicación, incluyendo el tiempo de ejecución de una consulta ejecutada en un servidor de bbdd.

 

Tras leer esto, parece que pueden llegar a dar la misma información, aunque de distintas maneras. Veamos más a fondo si la información ofrecida por ambos tipos de soluciones es similar, y para ello, pongamos una aplicación Aplic1, como ejemplo, que podría tener una arquitectura a 3 niveles (aunque podríamos complicarla todo lo que quisiéramos):

  1. Los usuarios haciendo uso de una aplicación (web o c/s) en sus equipos
  2. Servidor de aplicaciones que recibe las peticiones generadas por los usuarios
  3. BBDD desde el que el servidor de aplicaciones extrae la información almacenada, y que necesita para procesar las peticiones del usuario

Analizaremos primero las soluciones desde un punto de vista de la información requerida por un equipo de DevOps, donde necesitan información sobre el rendimiento de una aplicación.

 

Empecemos por las similitudes:

  • Tiempo de respuesta general:
    • La solución APM, me dará información general sobre el rendimiento de la aplicación, haciendo una media de los tiempos involucrados en la experiencia del usuario real
    • La solución NPM, también me dará información de tiempos de respuesta sobre el rendimiento general, haciendo el cálculo necesario sobre las conversaciones a nivel de red generados por las aplicaciones
  • Tiempo de respuesta en las peticiones a la bbdd:
    • La solución APM, me dará el tiempo transcurrido en la ejecución de la sentencia de bbdd, a pesar de que esta bbdd esté en otro servidor
    • La solución NPM, a través de los paquetes enviados y recibidos desde el servidor de aplicaciones al servidor de bbdd, me dará el tiempo de respuesta de ejecución de una sentencia de bbdd
  • Tiempo de respuesta end-to-end de cada petición generada por el usuario:
    • APM: La solución APM tiene capacidades de trazabilidad completa, conociendo cada petición del cliente, con qué petición a nivel de servidor de aplicaciones se corresponde, e internamente todos los métodos, clases o sentencias sql que se ejecutan, y por supuesto, los tiempos de respuesta/ejecución a todos los niveles. Es decir, una solución APM me dará, para una petición de usuario, el tiempo de respuesta End-to-End completo, y también el tiempo de respuesta unitario a nivel de red entre el equipo de usuario y el servidor de aplicaciones, el tiempo de ejecución interno, incluyendo el tiempo de ejecución en cada uno de los métodos, clases y sentencias sql, y el tiempo de renderización en el equipo cliente.
    • NPM: Una solución NPM, monitoriza a nivel de red, e interpreta los protocolos incluidos en la compartición de paquetes. Una solución NPM no tiene la trazabilidad completa que dicha petición genera, ya que los paquetes generados entre el equipo del usuario y el servidor de aplicaciones, no tienen trazabilidad respecto a los paquetes generados entre el servidor de aplicaciones y el servidor de bbdd. Dispondremos la información de los tiempos de respuesta entre el equipo del usuario y las respuestas del servidor de aplicaciones, para dar una información end-to-end, pero no la trazabilidad completa entre equipo de usuario-serv de aplicaciones y serv de aplicaciones-servidor de bbdd. Es decir, una solución NPM me dará, para una petición de usuario, el tiempo de respuesta End-to-End contando el tiempo de respuesta entre el equipo de usuario y la respuesta, pero no me informará de detalles adicionales de dicho tiempo de respuesta, ni se basará en el tiempo de respuesta del servidor de bbdd al servidor de aplicaciones para dar dicha información (este detalle estará embebido en el tiempo general).

 

A continuación, veamos las diferencias:

  • Trazabilidad completa (end-to-end) de cada petición generada por el usuario:
    • APM: La solución APM tiene capacidades de trazabilidad completa, conociendo cada petición del cliente, con qué petición a nivel de servidor de aplicaciones se corresponde, e internamente todos los métodos, clases o sentencias sql que se ejecutan, y por supuesto, los tiempos de respuesta/ejecución a todos los niveles
    • NPM: Una solución NPM, monitoriza a nivel de red, e interpreta los protocolos incluidos en la compartición de paquetes. Una solución NPM no tiene la trazabilidad completa que dicha petición genera, ya que los paquetes generados entre el equipo del usuario y el servidor de aplicaciones, no tienen trazabilidad respecto a los paquetes generados entre el servidor de aplicaciones y el servidor de bbdd. Dispondremos la información por separado entre equipo de usuario y servidor de aplicaciones, y servidor de aplicaciones y bbdd, pero no la correspondencia completa de los primeros con los segundos.
  • Análisis de código fuente:
    • APM: una solución APM, se basa en la instalación de un agente en los servidores de aplicación, quien se encarga de calcular el tiempo de ejecución de cada uno de los métodos y clases ejecutados para una petición, los cuales son ejecutados dentro del propio servidor de aplicaciones, así como de calcular el tiempo de ejecución de una sentencia sql basándose en el tiempo que transcurre entre la petición y la respuesta por parte de la bbdd. De esta manera, dispone de la visibilidad necesaria para detectar un problema y remitir al código fuente de la propia aplicación.
    • NPM: Una solución NPM, no tiene visibilidad interna sobre lo que ocurre en un servidor de aplicaciones, por lo que no puede informar sobre nada relacionado con el código fuente de una aplicación. Una solución NPM, sí puede dar información en el tiempo transcurrido a nivel de bbdd, obteniendo la información a través de los paquetes de red compartidos entre los appservers y dbservers.

 

Analizaremos ahora las soluciones desde un punto de vista de la información requerida por un equipo de Comunicaciones, donde necesitan información específica del comportamiento de la infraestructura de comunicaciones, y como esta afecta en el servicio de las aplicaciones de la compañía.

 

Empecemos por las similitudes:

  • ¿Cómo afecta la red al tiempo de respuesta general de una aplicación?
    • La solución APM nos dará los tiempos de respuesta para una aplicación, incluyendo las latencias de red existentes para una petición de un usuario.
    • La solución NPM nos dará los tiempos de respuesta de la aplicación, teniendo en cuenta los tiempos de respuesta que la red ofrece.

 

Veamos a continuación las diferencias:

  • ¿Cómo afecta el tráfico generado por una aplicación al resto de aplicaciones?
    • La solución APM ofrece una visibilidad centrada en una aplicación, por lo tanto, no dispone de este tipo de información.
    • La solución NPM, nos dará información sobre el tráfico de red existente, generado por una aplicación determinada. Puede llegar a detectar el tráfico generado por un único usuario, utilizando una aplicación, y como este uso, afecta al rendimiento del resto de aplicaciones.
  • ¿Puedo analizar los paquetes de red de aquellas conversaciones con problemas de rendimiento para intentar resolver cualquier problema?
    • Con la solución APM, podrás ver que una petición va lenta debido a la red, pero no disponer de mayor visibilidad al respecto. Deberás confiar en el equipo de comunicaciones para que identifique y resuelva el problema
    • Con la solución de NPM en cambio, se capturan e interpretan todos los paquetes, pudiendo leer la información compartida en los mismos, posibles errores que se generan, etc…

 

 

Veamos ejemplos concretos:

  • Con una solución APM, sabré el tiempo de respuesta end-to-end de las peticiones generadas por los usuarios, con el detalle de: latencia de red, tiempo de ejecución para cada método, clase, sentencia sql y tiempo de renderización en equipo cliente
  • Con una solución APM, en caso de existir problemas de rendimiento, conoceré si se debe a un problema de red, un problema de renderización, o un problema de ejecución de las peticiones, en cuyo caso, conoceré el método, clase o sentencia sql exacta que está provocando a ese tiempo de respuesta inadecuado
  • Con una solución APM, puede buscar las peticiones generadas por un usuario, y realizar una trazabilidad de las mismas
  • Con una solución APM dispondré de información del estado de los servidores de aplicación a nivel de heaps de memoria, procesos, etc…
  • Con una solución APM, si el problema es de red, sólo sabré que tengo un problema de red, y no tendré ningún dato para analizar dicho problema
  • Con una solución APM, no dispondré de ninguna información respecto del camino físico (switch a, b, d) por donde viajan los datos por la red
  • Con una solución NPM, monitorizaré mi aplicación como un servicio, y dispondré de los tiempos de respuesta para ese servicio, incluyendo tiempos de respuesta generales
  • Con una solución NPM, analizaré los paquetes de red, disponiendo de los tiempos de respuesta para cada paquete, así como los mensajes compartidos en dichos paquetes (siempre y cuando pueda interpretar el protocolo utilizado)
  • Con una solución NPM podré detectar los mensajes de error de las aplicaciones, que estarán incluidos en los paquetes de red
  • Con una solución NPM, podré analizar todo el tráfico existente en la red, detectando tráficos que puedan afectar al rendimiento de diversas aplicaciones
  • Con una solución NPM, podré monitorizar servicios adyacentes, como puede ser un AD u openldap, detectando el rendimiento, errores, etc… de estos servicios
  • Con una solución NPM, no tendré la trazabilidad completa equipo-appserver-bbdd, ya que los protocolos entre equipo-appserver son distintos respecto al appserver-bbdd, y por lo tanto, perdemos la trazabilidad entre ellos
  • Con una solución NPM, no dispondré de la visibilidad interna de lo que sucede en el propio servidor de aplicaciones.
  • Con una solución NPM, no dispondré de los saltos a nivel físico de los paquetes, es decir, no tengo trazabilidad de que un paquete viaja por el switch a, luego el c y luego el e.

 

Como conclusión, las soluciones APM y NPM no son equivalentes. Dependiendo del tipo de información que necesitemos, necesitaremos una solución u otra. Así, como responsables de aplicaciones, preferiremos el nivel de detalle a nivel de código fuente que una solución APM me ofrece sobre una aplicación, mientras que como responsables de las comunicaciones, preferiremos el nivel de detalle que a nivel de red completa me ofrece una solución NPM, y como esta, puede afectar a las distintas aplicaciones de mi compañía.

Deja un comentario