Serie de Mejora de la Observabilidad de APIs (Parte 3): Tracing
March 19, 2024
Introducción
¿Qué es el rastreo distribuido?
En el panorama actual de la arquitectura de microservicios y sistemas distribuidos, una sola solicitud a menudo atraviesa múltiples servicios, cada uno con varios pasos de procesamiento interno. Para garantizar el funcionamiento eficiente y estable de los sistemas, es fundamental comprender la ruta completa y el procesamiento de estas solicitudes. Esta necesidad dio origen a la tecnología de rastreo distribuido. Esta tecnología nos permite entender claramente el recorrido completo de una solicitud desde su inicio hasta su finalización, incluyendo cada servicio por el que pasa, el tiempo de procesamiento en cada servicio y la ocurrencia de cualquier anomalía.
Proceso de utilización del rastreo en APIs
Inicialmente, es esencial desplegar un agente de rastreo o un SDK para el rastreo en el punto de entrada de cada servicio, con el fin de capturar todas las solicitudes. A través de los datos de rastreo, podemos observar claramente el tiempo de procesamiento de las solicitudes en cada servicio, identificando así posibles cuellos de botella en el rendimiento. El rastreo distribuido no solo registra el procesamiento normal de las solicitudes, sino que también captura cualquier excepción o error que ocurra durante el proceso. Al visualizar los datos de rastreo distribuido, podemos comprender intuitivamente el flujo de solicitudes entre diferentes servicios y componentes.
Mejorando la Observabilidad - Rastreo Distribuido
En cuanto al rastreo distribuido, aquí hay algunos métodos para mejorar la observabilidad de las APIs, junto con ejemplos específicos:
1. Selección de herramientas y tecnologías de rastreo distribuido adecuadas
Al elegir herramientas de rastreo distribuido, se deben considerar aspectos como la pila tecnológica, los requisitos del negocio y la complejidad del monitoreo. Zipkin, SkyWalking y OpenTelemetry son soluciones populares de rastreo distribuido, cada una con sus características únicas.
2. Integración del rastreo distribuido en el desarrollo de APIs
Para Zipkin y SkyWalking, la integración en el desarrollo de APIs se puede lograr agregando las dependencias y configuraciones respectivas. Sin embargo, para OpenTelemetry, es necesario crear y gestionar manualmente el contexto de rastreo utilizando su API.
3. Configuración y optimización de sistemas de rastreo distribuido
Zipkin, SkyWalking y OpenTelemetry pueden personalizarse mediante archivos de configuración. Se pueden establecer parámetros como la tasa de muestreo, la configuración del almacenamiento backend y la optimización de la transmisión de datos. Además, es crucial definir reglas de alerta para responder rápidamente a eventos excepcionales.
4. Análisis y visualización de datos
Zipkin, SkyWalking y OpenTelemetry proporcionan interfaces de visualización para mostrar datos de rastreo distribuido y métricas de rendimiento. Por ejemplo, en la interfaz de usuario de Zipkin, se pueden buscar y ver datos de rastreo específicos para comprender el flujo de solicitudes entre diferentes servicios. El panel de control de SkyWalking ofrece una visión general del rendimiento global y un gráfico de relaciones de llamadas entre servicios. Los datos de OpenTelemetry pueden importarse en varias herramientas de visualización como Grafana para crear paneles y gráficos personalizados.
5. API7 Enterprise se integra con plugins de rastreo distribuido
API7 Enterprise admite múltiples plugins de rastreo, incluyendo Zipkin, OpenTracing y SkyWalking. Estos plugins de rastreo deben vincularse a reglas de enrutamiento o reglas globales. Si no hay requisitos de tasa de muestreo, es recomendable vincularlos a reglas globales para evitar omisiones.
Análisis de caso práctico: Mejora de la observabilidad de APIs de comercio electrónico
Durante el proceso de navegación y compra de productos en una plataforma de comercio electrónico, se realizan múltiples llamadas a APIs. Por ejemplo, los usuarios primero llaman a la API del servicio de productos para obtener una lista de productos, luego seleccionan un producto específico y llaman a la API del servicio de pedidos para crear un pedido, y finalmente llaman a la API del servicio de pago para completar la transacción.
En este escenario, se observó que la API del servicio de pedidos a menudo experimentaba retrasos y tiempos de espera durante los períodos pico, lo que resultaba en retrasos y fallos notorios durante el proceso de pago. Para abordar este problema, el equipo decidió introducir tecnología de rastreo distribuido para diagnosticar cuellos de botella en el rendimiento y optimizar el sistema.
-
Selección de herramientas de rastreo distribuido: El equipo eligió SkyWalking como la herramienta de rastreo distribuido debido a su soporte para múltiples lenguajes, facilidad de integración y capacidades de visualización avanzadas.
-
Integración de SkyWalking: El servicio de pedidos está desarrollado en Java, y el equipo integró el agente Java de SkyWalking en el código del servicio de pedidos. Esto permite que SkyWalking recolecte automáticamente datos de rastreo cuando se llama a la API del servicio de pedidos.
-
Configuración de SkyWalking: El equipo configuró el almacenamiento backend de SkyWalking en Elasticsearch y estableció tasas de muestreo adecuadas para equilibrar el nivel de detalle en los datos de rastreo y los costos de almacenamiento.
-
Recolección y análisis de datos de rastreo: Durante los períodos pico, el equipo observó la cadena de llamadas y las métricas de rendimiento de la API del servicio de pedidos a través de la interfaz de usuario de SkyWalking. Descubrieron que una llamada específica a la API del servicio de inventario de productos tomaba significativamente más tiempo durante el proceso de creación de pedidos, convirtiéndose en un cuello de botella en el rendimiento.
-
Investigación en profundidad: El equipo examinó en detalle los datos de rastreo de la API del servicio de inventario de productos, incluyendo parámetros de llamada, resultados devueltos e información de excepciones. Descubrieron que la API ejecutaba una operación compleja de consulta a la base de datos al procesar productos específicos, lo que aumentaba el tiempo de procesamiento.
-
Medidas de optimización: Para abordar este problema, el equipo implementó dos medidas de optimización. En primer lugar, optimizaron las consultas a la base de datos para mejorar la eficiencia. En segundo lugar, implementaron un sistema de caché para la API del servicio de inventario de productos, recuperando resultados directamente de la caché para productos consultados con frecuencia y que cambian poco, evitando así consultas innecesarias a la base de datos.
Conclusión
La tecnología de rastreo distribuido juega un papel crucial en la arquitectura de microservicios y sistemas distribuidos. Al registrar y visualizar el flujo de solicitudes entre múltiples servicios, podemos identificar y abordar rápidamente cuellos de botella en el rendimiento, mejorando la estabilidad y observabilidad del sistema. Al seleccionar herramientas de rastreo distribuido adecuadas e integrarlas en el desarrollo de APIs, podemos obtener una comprensión más profunda del funcionamiento del sistema, mejorando así la experiencia del usuario y la eficiencia del sistema.