Tracing distribuido en Onesait Platform
Con el auge de la computación en la nube, las arquitecturas de microservicios y los requisitos comerciales cada vez más complejos, la necesidad de Observabilidad nunca ha sido tan grande. La observabilidad es la capacidad de comprender el estado interno de un sistema mediante el examen de sus salidas. En el contexto del software, esto significa poder comprender el estado interno de un sistema mediante el examen de sus datos de telemetría, que incluyen seguimientos, métricas y registros.
Esta nueva funcionalidad de la release 5.1.0-Survivor, permite trazar una petición desde que se genera hasta el final, lo cual es importante en una arquitectura de este tipo en el que una petición puede pasar por varios microservicios y módulos.
Para que un sistema sea observable, debe estar instrumentado, es decir, el código debe emitir trazas, métricas y registros. Para esto utilizamos OpenTelemetry. Luego, los datos instrumentados deben enviarse a un backend de Observabilidad; en nuestro caso a Jaeger.
¿Qué nos resuelve esta funcionalidad?
- Monitorización de transacciones distribuidas.
- Optimización del rendimiento y la latencia.
- Análisis de las causas raíz de los problemas.
- Análisis de dependencias de servicios.
- Propagación del contexto en entornos distribuidos.
Ejemplo de aplicación
Para aclarar el funcionamiento del Tracing distribuido se muestra como funcionaría el Tracing distribuido entre dos microservicios y el API Manager y Semantic Information Broker de la Plataforma.
Se realiza una solicitud al microservicio A. Éste a su vez realiza una solicitud al microservicio B.
Para confeccionar una respuesta, el microservicio B tiene que realizar dos llamadas al API Manager de la Plataforma, y ésta también realiza solicitudes al Semantic Information Broker.
Se puede apreciar que la traza es el conjunto de spans involucrados en todo el proceso a través del tiempo, y cómo se pueden identificar cada span con el servicio al que pertenece, y en el orden que se han ejecutado.
Cómo acceder a la funcionalidad
Estas trazas pueden verse desde el Control Panel en la opción TRACING:
Consulta de trazas
Para esto tienes un buscador de trazas a partir del servicio de origen. Puedes filtrar por operación, tags, duración, cuanto tiempo atrás quieres remontarte, y limite de resultados.
En esta captura se muestran las trazas del caso anterior en el cual habíamos partido de la invocación de un microservicio a otro, y desde éste al API REST de la Plataforma. En las trazas se ve cuánto tiempo se ha empleado en cada span, y más información detallada en formato clave valor, lo cual es útil para detectar cuellos de botella, interrupciones entre componentes, etc.
Además, en caso de producirse algún error, las propias trazas lo señalan, como en esta captura: