El rastreo distribuido es un método para rastrear las solicitudes de servicio en sistemas distribuidos, lo que proporciona visibilidad de la latencia, los cuellos de botella en el rendimiento, etc.
Las demandas de las empresas modernas han provocado una explosión en la tecnología de la información, con sistemas informáticos heredados centralizados que evolucionan hacia entornos de TI distribuidos potentes y complejos. Desafortunadamente, junto con las competencias mejoradas de las redes basadas en la nube de hoy en día y el procesamiento de datos de acceso remoto, esta mayor complejidad también conlleva un mayor riesgo.
Debido a sus complejas interdependencias, es más probable que los sistemas complejos experimenten problemas. Los fallos en una parte pueden producirse en cascada en todo el sistema, y la identificación y solución de problemas suele ser mucho más difícil que en los sistemas centralizados. Al mismo tiempo, cuanto más complejo sea el sistema, más difícil será predecir cómo los cambios en una parte afectarán a las otras, lo que provocará consecuencias inesperadas incluso para los ajustes más inofensivos. Y a pesar de todo, probar a fondo un sistema complejo es exponencialmente más difícil, lo que significa que los problemas son cada vez más propensos a pasar desapercibidos. El rastreo distribuido proporciona una solución.
Se puede decir que el rastreo distribuido comenzó con el documento Dapper, presentado por Google en el 2010, que sentó las bases para la infraestructura de rastreo de sistemas distribuidos a gran escala. Curiosamente, Ben Sigelman, el fundador de Lightstep (que más tarde se convirtió en Observabilidad de la nube de ServiceNow), fue fundamental en la creación de Dapper. Después de Dapper, Twitter lanzó Zipkin en el 2012, el primer proyecto de rastreo distribuido de código abierto. Luego, en el 2015, Uber lanzó Jaeger, que se inspiró en Dapper.
En el 2016, Sigelman escribió una publicación de blog (“Hacia el rastreo distribuido listo para ser usado”, que se conocería como el Manifiesto de OpenTracing). Este texto fundamental introdujo a OpenTracing como un estándar único, abordando la falta de estandarización dentro del ecosistema de rastreo y sentando las bases para que OpenTracing se convirtiera en un proyecto bajo la Cloud Native Computing Foundation (CNCF) y finalmente se fusionara con OpenTelemetry en el 2019.
La versión 1.0 de OpenTelemetry se lanzó en el 2021, y desde entonces se ha convertido en el estándar de facto para la trazabilidad, las métricas y los registros. Desde Dapper en el 2010 hasta las competencias actuales de OpenTelemetry, en poco más de una década, el rastreo distribuido ha evolucionado de un único sistema backend a una solución de un extremo a otro ampliamente utilizada, allanando el camino para prácticas modernas de observabilidad integrales.
El rastreo distribuido permite a las organizaciones perfilar y supervisar su gama completa de aplicaciones, especialmente aquellas creadas con una arquitectura de microservicios. Este enfoque proporciona visibilidad de cómo los servicios individuales dentro de un sistema distribuido interactúan entre sí, creando una imagen precisa de las solicitudes individuales a medida que fluyen por el sistema.
Al rastrear el recorrido de las solicitudes y medir el tiempo que tarda cada parte, el rastreo distribuido ayuda a identificar los cuellos de botella en el rendimiento, los problemas de latencia y los posibles fallos. Como tal, el rastreo distribuido es una herramienta crucial para los equipos de DevOps y TI, que les permite optimizar, solucionar problemas y mantener sus sistemas de manera más eficaz.
El rastreo distribuido se basa en tres componentes principales:
- Intervalo
Un intervalo es una unidad única de trabajo llevada a cabo por un servicio dentro del sistema, marcada con intervalos de tiempo de inicio y finalización, y posiblemente incluye metadatos como registros o etiquetas. Los intervalos son los componentes básicos de una trazabilidad, que representan diferentes partes del flujo de trabajo. Los intervalos raíz (también llamados intervalos principales) pueden tener sus propios intervalos (llamados intervalos secundarios), que a su vez también pueden tener intervalos. - Trazabilidad
Una trazabilidad se compone de un intervalo o varios intervalos que juntos representan la ruta de ejecución completa de la solicitud de servicio a medida que se mueve por el sistema distribuido. La trazabilidad a menudo se visualiza como árboles, donde el nodo raíz representa la interacción del usuario, y los otros nodos representan los diversos microservicios involucrados en el procesamiento de la solicitud y la preparación de la respuesta. - Etiquetas
Las etiquetas son elementos de metadatos asociados a los intervalos. Estas proporcionan contexto y clasificación.
La estructura de trazabilidad/intervalo ofrece una vista centrada en las solicitudes, que reduce las brechas entre los microservicios independientes y proporciona una perspectiva unificada del rendimiento del sistema. Con esta información, las organizaciones están mejor preparadas para comprender y mejorar la experiencia del usuario.
El rastreo, el registro y las métricas desempeñan un rol fundamental en la observabilidad, pero no son los mismos conceptos. Cada uno tiene propósitos distintos, y comprender las diferencias y la naturaleza complementaria de estos conceptos es esencial para la supervisión y la depuración integrales del sistema:
- Rastreo
El rastreo distribuido proporciona una vista detallada de las solicitudes a medida que atraviesan los componentes de un sistema distribuido, capturando el flujo de una solicitud a través de diversos servicios que desempeñan un rol en el ajuste del rendimiento y la resolución de problemas. A diferencia del registro y las métricas, el rastreo distribuido se centra en el recorrido de solicitudes específicas, lo que proporciona una imagen clara de las interacciones entre los microservicios. - Registro
El registro es la práctica de registrar eventos específicos e individuales en un sistema, como acciones del usuario, errores del sistema u otras actividades. Los registros con marca de tiempo proporcionan información granular sobre lo que sucedió en el sistema en un momento determinado, a menudo esencial para la depuración y la auditoría. Mientras que el rastreo distribuido rastrea el flujo de solicitudes, el registro ofrece una instantánea más estática de los eventos, sin mostrar necesariamente las relaciones entre las diferentes partes del sistema.
Las métricas son valores numéricos que representan el estado de un sistema en un momento determinado o a lo largo de un intervalo de tiempo, y pueden incluir tiempos de respuesta, tasas de error y utilización de recursos del sistema. Las métricas desempeñan un rol vital en el rastreo distribuido, ya que ofrecen una forma cuantificable de supervisar y analizar el rendimiento de varios servicios dentro de un sistema distribuido. Estos valores numéricos se extrapolan a partir de la trazabilidad y los registros, lo que proporciona información “de un vistazo” o incluso informes detallados sobre aspectos específicos, como los tiempos de respuesta, las tasas de error y el rendimiento del sistema.
Cuando se consideran los datos de trazabilidad y registro a través de la lente de las métricas que resumen los indicadores clave de rendimiento, las organizaciones pueden obtener una comprensión integral de su arquitectura distribuida, lo que permite diagnósticos rápidos y conocimientos procesables, y facilita la optimización efectiva del sistema.
Los microservicios son un diseño arquitectónico de software en el que una aplicación se estructura como una colección de servicios de implementación independiente y poco acoplados. Cada microservicio se centra en un área funcional específica y funciona como un componente individual dentro del sistema más amplio. Este enfoque modular promueve la flexibilidad y la escalabilidad, y puede mejorar la velocidad de desarrollo. En el contexto del rastreo distribuido, los microservicios desempeñan un rol importante como los nodos individuales por los que pasa una solicitud.
A medida que una solicitud viaja de un microservicio a otro, el rastreo distribuido captura los detalles de estas interacciones, incluido el tiempo que se tarda en cada paso. Esta información detalla cómo fluye la solicitud a través de los numerosos servicios, identificando cuellos de botella, latencias y posibles fallos.
Comprender cómo interactúan los microservicios dentro de un sistema distribuido puede ser complejo; el rastreo distribuido proporciona información valiosa sobre estas interacciones, lo que permite a las organizaciones visualizar las rutas, supervisar el rendimiento del sistema y solucionar cualquier problema que pueda surgir para fomentar una arquitectura del sistema más sólida y eficiente.
El rastreo distribuido se ha convertido en una herramienta indispensable para las organizaciones que trabajan con sistemas distribuidos, particularmente en el contexto de microservicios y arquitecturas dinámicas. Al rastrear y registrar de forma integral cada interacción que tiene una solicitud con cada servicio, el rastreo distribuido proporciona información esencial sobre la supervisión, la depuración y la optimización del rendimiento. Los atributos se pueden agregar a la trazabilidad para una mayor aclaración, y cada intervalo se registra con metadatos detallados, incluidas las relaciones entre intervalos principales-secundarios, lo que permite comprender completamente cómo se mueven las solicitudes a través de los servicios y entre ellos.
Como tal, cada vez más organizaciones recurren al rastreo distribuido para gestionar la complejidad de sus entornos de aplicaciones modernos. Con numerosos puntos de fallo potenciales en las complejas pilas de aplicaciones de hoy, identificar las causas raíz de los problemas puede ser difícil, llevar mucho tiempo y potencialmente presentar muchos errores. El rastreo distribuido optimiza este proceso, lo que facilita una identificación más rápida y precisa de los problemas y mejora directamente la capacidad de una empresa para proporcionar una excelente experiencia de usuario.
Al mismo tiempo, el rastreo distribuido es una respuesta eficaz al problema de la cardinalidad, donde los volúmenes de datos aumentan hasta el punto en que el almacenamiento de datos y la potencia informática se vuelven difíciles de gestionar.
Los beneficios del rastreo distribuido se extienden para mejorar la comprensión del rendimiento de los microservicios, fomentar la resolución rápida de problemas e impulsar la satisfacción del cliente. Al proporcionar una vista detallada del rendimiento de cada microservicio, las organizaciones pueden garantizar flujos de ingresos estables y dedicar más tiempo a la estrategia y la innovación.
Los datos proporcionados a través del rastreo distribuido son cruciales, pero al final del día siguen siendo solo datos. Sin una comprensión clara de lo que representan los datos, no puede tener un impacto positivo en el proceso de toma de decisiones. El verdadero valor de los datos es el conocimiento procesable que se puede derivar de los números, siempre que sean recientes, relevantes y confiables.
Es en el análisis inteligente y la comprensión contextual de estos datos donde las organizaciones pueden ubicar problemas, identificar causas e implementar soluciones eficaces. ¿Cómo se mueve el rastreo distribuido más allá de la mera recopilación de datos para proporcionar conocimientos profundos sobre varios entornos? Considera lo siguiente:
El rastreo distribuido desempeña un rol fundamental en el reconocimiento de los síntomas de un mal estado del software, como la latencia o el bajo rendimiento. Actúa como una herramienta de diagnóstico, conectando los efectos observables con sus causas subyacentes, permitiendo la validación de hipótesis sobre lo que puede haber desencadenado el cambio observado.
Cuando un servicio deja de estar disponible, eso requiere una explicación. El rastreo ayuda a las organizaciones a determinar qué cambios, internos o externos, se han realizado antes de una interrupción. Ya sea que la variación sea el resultado de errores en el software, cambios impulsados por los usuarios o alteraciones en la infraestructura que derivan en problemas de rendimiento, el rastreo distribuido permite determinar el estado del sistema antes y después de la interrupción, e identificar claramente qué puede haber causado la interrupción.
Comprender los cambios dentro de los servicios individuales es vital. Ya sea que se trate de implementaciones o actualizaciones de versiones, el rastreo distribuido desglosa el rendimiento en distintas etapas, etiquetando cada intervalo con la información de la versión. Esta vista detallada ayuda a diagnosticar los cambios que afectan el rendimiento de un servicio.
Los sistemas no son estáticos, y tampoco lo son los usuarios que operan dentro de los sistemas. Los factores externos, como los cambios en el comportamiento del usuario, pueden impulsar cambios en el rendimiento del servicio. El rastreo detallado utiliza etiquetas para capturar partes esenciales de las solicitudes y las características de los usuarios, lo que ofrece una comprensión más profunda de cómo los usuarios interactúan con la aplicación y cómo estas interacciones pueden crear demandas inesperadas.
Los recursos son finitos y, a veces, simplemente no hay suficientes. La competencia de recursos en redes distribuidas puede afectar significativamente el rendimiento. El rastreo distribuido ofrece información sobre cómo se utilizan los recursos compartidos, como CPU, contenedores o bases de datos. La trazabilidad etiquetada correctamente permite el análisis agregado, descubriendo cuándo y dónde el rendimiento más lento se correlaciona con el uso de recursos específicos, lo que ayuda en la planificación de recursos y la resolución de conflictos.
La naturaleza dinámica de las dependencias significa que los cambios contracorriente pueden afectar el rendimiento de tu servicio. El rastreo distribuido detallado, que incluye el etiquetado de las operaciones de salida y los números de versión, permite ver cómo los servicios contracorriente afectan el rendimiento. Comprender estas relaciones ayuda a adaptarse o mitigar los impactos de estos cambios.
Los estándares de rastreo distribuido de código abierto son marcos de trabajo esenciales que guían la recopilación, la gestión y el análisis de los datos de rastreo en diferentes servicios de una manera estandarizada. Estos estándares promueven la interoperabilidad y reducen la dependencia de un solo proveedor, lo que permite a los desarrolladores cambiar entre diferentes backends y herramientas de rastreo con ajustes mínimos. También proporcionan un terreno común para integrar varias plataformas, idiomas y aplicaciones en sistemas distribuidos complejos.
Entre los estándares de rastreo distribuido de código abierto más utilizados se encuentran los siguientes:
OpenTracing, que forma parte de la Cloud Native Computing Foundation (CNCF), se encuentra entre los primeros estándares de rastreo distribuido de código abierto. Este marco de trabajo incluye API que admiten la propagación de contexto distribuido y permite a los desarrolladores agregar instrumentación al código de su aplicación (sin depender de ningún proveedor específico). OpenTracing ofrecía una semántica de rastreo coherente en diferentes plataformas, pero desde entonces se ha archivado; la CNCF ya no proporciona soporte para el proyecto.
OpenCensus está diseñado para admitir varios exportadores, lo que permite a los usuarios enviar datos de rastreo a diferentes backends para su análisis. Este marco de trabajo (que se originó en Google) proporciona un conjunto claro de API y bibliotecas que permiten la recopilación automática y manual de trazas y métricas distribuidas. Al ofrecer una solución unificada para la observabilidad, OpenCensus optimiza el proceso de recopilación y gestión de datos estadísticos esenciales. OpenCensus también ha sido suspendido.
OpenTelemetry es un proyecto fusionado entre OpenTracing y OpenCensus, que combina las mejores características de ambos estándares. Cofundado por Lightstep, OpenTelemetry ofrece un conjunto unificado y más amplio de API, bibliotecas, agentes e instrumentación para proporcionar un marco de trabajo de observabilidad completo para el software nativo de la nube. OpenTelemetry simplifica la instrumentación de las aplicaciones y ofrece soporte integrado para varios marcos de trabajo y bibliotecas populares. Su objetivo es convertirse en el estándar de observabilidad para la trazabilidad distribuida, los registros y las métricas, respaldado por una comunidad en crecimiento y un amplio apoyo de la industria.
Varias características son parte integral de la funcionalidad y el éxito del rastreo distribuido. Así es como cada característica juega un rol:
Los mecanismos de alerta en el backend de observabilidad permiten a los equipos establecer umbrales para métricas o comportamientos específicos que podrían indicar un problema. Cuando se alcanzan estos umbrales, se pueden enviar alertas al personal relevante, lo que permite una rápida identificación y resolución de posibles problemas. De este modo, se mejora la confiabilidad del sistema.
El rastreo distribuido proporciona una visibilidad completa de todo el recorrido de una solicitud a través de diferentes servicios y componentes. Este conocimiento de un extremo a otro ayuda a identificar cuellos de botella, ineficiencias y anomalías dentro del sistema, lo que proporciona un contexto detallado para el ajuste del rendimiento y el análisis de errores.
Al ofrecer información precisa sobre el comportamiento del sistema, el rastreo distribuido reduce significativamente el tiempo dedicado a depurar e identificar problemas. Esta eficiencia se traduce en ahorros de costos, ya que los equipos pueden dedicar más tiempo al desarrollo y la innovación de características en lugar de enfocarse en la resolución de problemas.
Con el aumento de la informática distribuida en múltiples ubicaciones geográficas y proveedores de nube, el rastreo distribuido facilita la integración en estos entornos complejos. Permite una visión coherente del rendimiento del sistema en diferentes regiones y plataformas en la nube, lo que garantiza una supervisión y un análisis coherentes.
El rastreo distribuido permite la supervisión y el rastreo en tiempo real del rendimiento de cada servicio, entendiendo cómo interactúan y señalando áreas que podrían necesitar optimización.
El recopilador actúa como un componente crítico en la recopilación, el procesamiento y la exportación de datos de telemetría (es decir, trazabilidad, métricas y registros). Proporciona una opción unificada e independiente del proveedor para recopilar y transmitir datos, lo que permite una integración perfecta con varios backends de observabilidad. La flexibilidad del recopilador garantiza que el rastreo se pueda adaptar a diferentes entornos sin alterar el código de instrumentación.
El muestreo es una característica que permite la recopilación de un subconjunto de solicitudes (en lugar de cada solicitud) para reducir el volumen total de datos enviados al backend de rastreo. Esto permite que los sistemas de rastreo distribuidos funcionen a escala sin recursos abrumadores, al tiempo que proporcionan información valiosa.
A medida que los sistemas crecen, el rastreo distribuido debe adaptarse a la mayor complejidad y al volumen más grande de datos. Las características de escalabilidad garantizan que el rastreo pueda manejar entornos a gran escala, lo que proporciona conocimientos de rendimiento coherentes independientemente del tamaño del sistema. Por supuesto, capturar los datos es solo el primer paso; para garantizar que las organizaciones puedan dar sentido a los datos, necesitan acceso a una plataforma que pueda escalar junto con el rastreo distribuido a medida que los sistemas crecen y evolucionan.
Las aplicaciones modernas se componen de varios lenguajes, marcos de trabajo, tecnologías y clientes (basados en la Web y móviles). La capacidad del rastreo distribuido de operar en entornos heterogéneos de pila completa garantiza que los desarrolladores tengan los conocimientos que necesitan de toda la pila de tecnología, sin importar cuán diversa sea.
Como se mencionó anteriormente, los beneficios del rastreo distribuido están vinculados a la visibilidad mejorada que proporciona a los sistemas distribuidos de una organización. Pero la visibilidad en sí misma solo es valiosa cuando hace posible otros beneficios. Los beneficios clave del rastreo distribuido incluyen lo siguiente:
Uno de los beneficios clave del rastreo distribuido es su capacidad para medir la duración necesaria para realizar acciones esenciales del usuario, como efectuar una compra. Rastrear la ruta de solicitud ayuda a ubicar y corregir los impedimentos del backend que de otro modo podrían afectar negativamente la experiencia del usuario.
La mayoría de las organizaciones opera dentro de los límites de los acuerdos de nivel de servicio (SLA), formalizando los compromisos de rendimiento con los clientes u otras divisiones internas. Las herramientas de rastreo distribuido compilan datos de rendimiento de servicios individuales, lo que hace conveniente para los equipos evaluar si cumplen con sus SLA.
Los objetivos de nivel de servicio (SLO) son objetivos específicos y medibles que definen el rendimiento y la disponibilidad esperados de un servicio, y están respaldados por indicadores de nivel de servicio que ayudan a las organizaciones a medir sus niveles de servicio. El rastreo distribuido y correctamente implementado brinda la oportunidad de rastrear y cumplir con los SLO al elegir qué señales específicas supervisar y configurar alertas para cualquier error o datos que se encuentren fuera de un rango predeterminado. Esto hace posible abordar cualquier incidente relacionado de forma rápida y eficaz.
El rastreo distribuido proporciona información sobre las relaciones complejas de causa y efecto entre los servicios variados. Esta comprensión ayuda a las empresas a optimizar el rendimiento general del sistema.
En entornos en los que diferentes equipos supervisan diversos servicios involucrados en el cumplimiento de una solicitud, el rastreo distribuido ofrece claridad sobre dónde se ha producido un error y qué equipo debe abordarlo. Esta claridad mejora la colaboración entre los equipos, reduce significativamente el tiempo dedicado a “acusar” y contribuye a la productividad general dentro de la organización.
Cuando surgen problemas en el rendimiento de las aplicaciones, los equipos de soporte pueden utilizar rastreos distribuidos para identificar si el problema se encuentra en el backend. Al analizar la trazabilidad del servicio afectado, los ingenieros pueden identificar y resolver el problema. El uso de herramientas de rastreo distribuido de un extremo a otro incluso permite la investigación de problemas de rendimiento de frontend dentro de la misma plataforma, lo que reduce tanto el tiempo medio de detección (MTTD) como el tiempo medio de resolución (MTTR) para errores potencialmente problemáticos.
Si bien el rastreo distribuido trae numerosos beneficios, también viene con obstáculos inherentes que podrían obstaculizar todo su potencial. Comprender estos desafíos es clave para las organizaciones que tienen como objetivo implementar el rastreo distribuido de manera efectiva. A continuación, se presentan algunos de los desafíos más destacados:
Uno de los obstáculos que presentan algunas plataformas de rastreo distribuido es la necesidad de instrumentación manual. Esto significa que la organización puede tener que alterar o modificar su código existente para iniciar el rastreo de solicitudes. Dicha intervención manual no solo requiere valiosos recursos de ingeniería, sino que también puede provocar la introducción de errores en las aplicaciones a medida que se revisa el código.
El rastreo distribuido tradicional a menudo se restringe a los servicios de backend, lo que genera un ID de rastreo solo cuando la solicitud llega al primer servicio de backend. Sin utilizar una plataforma de rastreo distribuido de un extremo a otro, la visibilidad de la sesión de usuario correspondiente en la interfaz permanece oculta. Esta limitación hace que sea más difícil descubrir la causa raíz de algunas solicitudes problemáticas y determinar si el problema debe ser resuelto por el equipo de front end o back end.
Afortunadamente, la adopción de marcos de trabajo como OpenTelemetry alivia o elimina los desafíos de la visibilidad limitada de las transacciones de frontend, así como los problemas asociados con la instrumentación. Estos desafíos y otros son inherentes a muchas tecnologías de la industria (como Kubernetes) que incorporan OpenTelemetry en sus bases de códigos principales.
A medida que el panorama de TI empresarial moderno continúa expandiéndose en términos de tamaño y complejidad, los beneficios del rastreo distribuido son cada vez más obvios. Observabilidad de la nube de ServiceNow, que aprovecha la galardonada Now Platform®, establece un nuevo estándar para el rastreo y ofrece una visibilidad completa de las solicitudes en sistemas distribuidos.
Integración con herramientas existentes. Conecta las métricas y el rastreo para crear una telemetría unificada. Reduce significativamente el MTTR de tu organización. Y, sobre todo, alinea los precios con los resultados empresariales para mejorar el valor sin escalar los costos para aumentar el uso.
Observabilidad de la nube está revolucionando el rastreo distribuido para beneficiar a tu empresa. ¡Comunícate con ServiceNow para obtener más información!