Observabilidad Integral a través del Rastreo Distribuido en Node.js

Rate this content
Bookmark

Los beneficios de Node.js para desarrollar aplicaciones en tiempo real a gran escala son muy conocidos. A medida que las arquitecturas de Node.js se vuelven más complejas, la visualización de su arquitectura basada en microservicios es crucial. Sin embargo, la visualización de los microservicios es increíblemente compleja dada la escala y las transacciones entre ellos. No solo necesitas visualizar tus aplicaciones de Node.js, sino también analizar la salud, el flujo y el rendimiento de las aplicaciones para tener una solución de observabilidad completa. En esta charla, repasaremos los desafíos de escalar tus aplicaciones de Node.js y las herramientas (como el rastreo distribuido) disponibles para escalar con confianza.

8 min
24 Jun, 2021

Video Summary and Transcription

Bienvenido a la sesión sobre observabilidad integral a través del rastreo distribuido en Node.js. Exploraremos los desafíos de los microservicios y solucionaremos problemas en aplicaciones distribuidas utilizando un ejemplo. La correlación es la pieza que falta en la solución de problemas de aplicaciones distribuidas. El rastreo distribuido ayuda a identificar problemas que los registros o las métricas pueden pasar por alto, reduciendo el tiempo medio de resolución. Proporciona visualización de la arquitectura de microservicios, datos accionables y permite la optimización del código.

Available in English

1. Introducción a la Observabilidad

Short description:

Bienvenidos a la sesión sobre observabilidad integral a través del rastreo distribuido en Node.js. En esta sesión, analizaremos los nuevos desafíos en microservicios, solucionaremos problemas en aplicaciones distribuidas utilizando un ejemplo y construiremos una estrategia sostenible de observabilidad para su empresa. Los microservicios tienen grandes beneficios, pero también plantean nuevos desafíos como la observabilidad. Los sistemas de monitoreo tradicionales dificultan saber qué está sucediendo bajo el capó.

Hola a todos. Bienvenidos a la sesión sobre observabilidad integral a través del rastreo distribuido en Node.js. Soy el anfitrión de la sesión. Soy Chinmay Gaikwad, evangelista técnico en Epsigon. Comencemos con la sesión. En esta sesión, analizaremos los nuevos desafíos en microservicios, centrándonos específicamente en la observabilidad. También veremos cómo solucionar problemas en aplicaciones distribuidas utilizando un ejemplo, y finalmente veremos cómo construir una estrategia sostenible de observabilidad para su empresa. Comencemos con los desafíos en microservicios. Sabemos que los microservicios tienen grandes beneficios, incluyendo escalabilidad, velocidad de desarrollo y reducción del tiempo de administración del sistema, pero también han traído nuevos desafíos como la observabilidad en microservicios. Utilizando sistemas de monitoreo tradicionales, puede ser casi imposible saber qué está sucediendo bajo el capó. Exploraremos esto en detalle.

2. Troubleshooting Distributed Applications

Short description:

Comencemos con las métricas, que son una excelente manera de identificar problemas. Los registros nos dicen por qué algo salió mal, pero no son suficientes en un entorno basado en microservicios. La forma tradicional de depurar implica mirar las métricas y luego los registros, pero carece de contexto. La correlación es la pieza que falta en la solución de problemas de aplicaciones distribuidas.

Habrá muchos detalles en las próximas diapositivas. Primero, veamos cómo solucionar problemas en aplicaciones distribuidas. Sabemos que los tres pilares de la observabilidad son los registros y los rastros. Nos sumergiremos en el rastreo más adelante. Comencemos con las métricas. Las métricas son una excelente manera para que los equipos de operaciones descubran si algo ha salido mal. Algunos ejemplos de métricas incluyen el uso de la CPU, el uso de la memoria. También tenemos métricas a nivel empresarial como tasas de rebote, ingresos, tasa de clics, etc. Por otro lado, los registros nos dicen por qué algo salió mal. Entonces, para esta sesión, consideremos un ejemplo de una tienda virtual. Como pueden ver, el servidor SAP autentica las solicitudes utilizando Auth0 y luego las envía al flujo de Kafka. Un contenedor Java extrae el flujo y actualiza una tabla DynamoDB. Digamos que hubo una situación en la que los usuarios se quejaron de que se envió OAuth pero no se manejó. ¿Por dónde empezarías?

Las soluciones de monitoreo tradicionales tienen el inconveniente de un mayor uso de recursos porque tienen múltiples agentes pesados. Y también tienen la capacidad de solo recopilar métricas del host o están impulsadas puramente por métricas. Las métricas, como hemos visto, realmente solo nos indican que algo está roto, pero no cuándo ni por qué. El contexto es absolutamente crítico en los entornos actuales. Usando el método tradicional, primero miras las métricas de Kafka. No ves nada anormal aquí, así que tal vez mires las métricas de DynamoDB a continuación. Vemos algunas fluctuaciones aquí, así que eso es bastante interesante. Entonces, para depurar esto, necesitas más datos. Y más datos significa registros. Pero, ¿son realmente suficientes los registros en un entorno basado en microservicios? Vamos a investigarlo. Todos sabemos cómo se ven los registros. Personalmente, tengo una relación de amor-odio con los registros. Me encanta el hecho de que estén disponibles, pero odio tener que buscar en ellos. Me he pasado horas buscando entre cientos o incluso miles de líneas de registros esperando encontrar ese valor atípico. ¿Y si supiera la ruta exacta que sigue la solicitud a través de los servicios y componentes individuales? Los registros son buenos para depurar en la lista, pero no funcionan realmente como punto de partida en un sistema altamente distribuido. Entonces, en un ejemplo de taller, si tienes mucha suerte, podrás detectar el problema, pero podría llevar mucho tiempo. Así que hagamos un resumen de las cosas que faltan aquí. Básicamente, se reduce a la correlación.

3. Correlación y Beneficios del Rastreo Distribuido

Short description:

La correlación entre métricas y registros y entre diferentes servicios es crucial para encontrar el problema exacto. El rastreo distribuido ayuda a encontrar la aguja en el pajar, revelando problemas que los registros o las métricas pueden pasar por alto. Al utilizar el rastreo distribuido en el ejemplo de trabajo virtual, podemos identificar el problema, como la falta de un ID de clave. Al enfocarnos en servicios específicos como el flujo de Kafka y el microservicio Auth0, podemos identificar la causa raíz, como un token expirado. Este enfoque reduce significativamente el tiempo medio de resolución y detección en comparación con las soluciones de monitoreo tradicionales.

La correlación entre métricas y registros y entre diferentes servicios es crucial para encontrar el problema exacto. ¿Entonces, cómo correlacionamos estas piezas? Ahí es donde entra en juego el rastreo distribuido. Estoy seguro de que muchos de ustedes han escuchado hablar del rastreo últimamente. Muchos proveedores ofrecen alguna forma de rastreo distribuido. Incluso las mallas de servicios ahora están construyendo soporte para ello. Este rastreo ayuda a encontrar la aguja en el pajar que los registros o las métricas pueden pasar por alto. Solo porque tu aplicación tenga 15 o 20,000 servicios no significa que una solicitud pase por todos y cada uno de ellos. Como máximo, pasará por una fracción de ellos. Entonces, utilizando el rastreo distribuido en nuestro ejemplo de trabajo virtual, ahora puedes ver dónde está el problema. El problema es la falta de un ID de clave. Con el ID de clave, cuando te enfocas en el flujo de Kafka, ves que falta el nombre de usuario. Y luego, cuando te enfocas en el microservicio Auth0, puedes ver por qué exactamente falta. Es debido a un token expirado. Entonces, específicamente para Auth0, ahora sabes que deberías usar tokens de actualización en lugar de tokens de acceso. En resumen, esto ha reducido significativamente tu tiempo medio de resolución y detección en comparación con las soluciones de monitoreo tradicionales.

4. Beneficios del Rastreo Distribuido

Short description:

El rastreo distribuido proporciona varios beneficios, incluyendo la visualización de la arquitectura de microservicios, datos accionables y la reducción del alcance de los servicios. También ayuda a identificar dónde se está invirtiendo tiempo en el código, permitiendo la optimización. En Epsilon, hemos diseñado nuestro producto con agentes ligeros que admiten diferentes entornos y proporcionan un contexto completo en métricas, eventos, registros y trazas. Construir una estrategia de observabilidad requiere planificación y claridad sobre los objetivos comerciales y la arquitectura, elegir entre enfoques de bricolaje y gestionados, implementar la solución y garantizar la escalabilidad. Elija una estrategia proactiva. ¡Gracias por asistir!

Las soluciones de monitoreo tradicionales tienen una serie de limitaciones. El rastreo distribuido tiene varios beneficios. Veamos algunos de ellos. Una arquitectura típica involucra varios microservicios, y una de las características más importantes de una solución de observabilidad es la visualización. Los usuarios también deben esperar datos accionables dentro de estas visualizaciones complejas y mapas de servicios. Por ejemplo, en estas visualizaciones, deberías poder ver la latencia entre los componentes, así como las áreas donde se han cruzado los umbrales. Como has visto en el ejemplo anterior de una tienda virtual, una solución basada en el rastreo distribuido también puede ayudar a reducir el alcance de los servicios. Esto elimina la incertidumbre al determinar qué salió mal. Sin estas capacidades de filtrado inteligente, el mapa de arquitectura se convierte en nada más que un ejercicio de teoría del caos. Otro gran beneficio de una solución de rastreo distribuido es identificar dónde se está invirtiendo tiempo en el código. Aquí tienes un ejemplo de trazas que componen un rastreo. Estas esencialmente te pueden decir si una parte significativa del tiempo se gasta esperando una llamada a una API externa o si tienen una llamada ineficiente a la base de datos que necesita refactorización. En Epsilon, hemos diseñado nuestro producto siguiendo las mejores prácticas para la observabilidad al hablar con expertos de la industria y nuestros clientes. Por ejemplo, deberíamos tener un enfoque automatizado que consista en agentes ligeros que no consuman muchos recursos. Además, estos agentes deben admitir diferentes entornos, como máquinas virtuales, contenedores o sin servidor. Deberíamos poder hacer esto con un contexto completo en métricas, eventos, registros y trazas que te permita buscar la carga completa o etiquetas personalizadas. La observabilidad no solo debe decirte si algo salió mal, sino también señalar dónde y por qué exactamente para ayudar a reducir tu tiempo medio de detección y resolución.

Y finalmente, si tienes que construir una estrategia de observabilidad, debes planificar con anticipación. En primer lugar, ten claridad sobre tus objetivos comerciales y modelo de arquitectura y determina tu enfoque, ya sea de bricolaje o gestionado. Ambos tienen sus pros y contras. Por ejemplo, utilizando el enfoque de bricolaje, puedes utilizar una de las soluciones de código abierto, pero requerirá un esfuerzo de desarrollo significativo para hacerlo correctamente, si lo haces correctamente. Luego implementa la solución de observabilidad y finalmente asegura la escalabilidad, porque los microservicios pueden escalar muy rápido. La escalabilidad de la solución de observabilidad es sumamente crítica. Por último, me gustaría terminar esta sesión diciendo que debes elegir una estrategia que te permita ser proactivo y no reactivo. Gracias por asistir a la sesión. Visita la URL en la diapositiva para obtener una oferta especial. Gracias de nuevo.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Node Congress 2022Node Congress 2022
26 min
It's a Jungle Out There: What's Really Going on Inside Your Node_Modules Folder
Top Content
Do you know what’s really going on in your node_modules folder? Software supply chain attacks have exploded over the past 12 months and they’re only accelerating in 2022 and beyond. We’ll dive into examples of recent supply chain attacks and what concrete steps you can take to protect your team from this emerging threat.
You can check the slides for Feross' talk here.
Node Congress 2022Node Congress 2022
34 min
Out of the Box Node.js Diagnostics
In the early years of Node.js, diagnostics and debugging were considerable pain points. Modern versions of Node have improved considerably in these areas. Features like async stack traces, heap snapshots, and CPU profiling no longer require third party modules or modifications to application source code. This talk explores the various diagnostic features that have recently been built into Node.
You can check the slides for Colin's talk here. 
JSNation 2023JSNation 2023
22 min
ESM Loaders: Enhancing Module Loading in Node.js
Native ESM support for Node.js was a chance for the Node.js project to release official support for enhancing the module loading experience, to enable use cases such as on the fly transpilation, module stubbing, support for loading modules from HTTP, and monitoring.
While CommonJS has support for all this, it was never officially supported and was done by hacking into the Node.js runtime code. ESM has fixed all this. We will look at the architecture of ESM loading in Node.js, and discuss the loader API that supports enhancing it. We will also look into advanced features such as loader chaining and off thread execution.
JSNation Live 2021JSNation Live 2021
19 min
Multithreaded Logging with Pino
Top Content
Almost every developer thinks that adding one more log line would not decrease the performance of their server... until logging becomes the biggest bottleneck for their systems! We created one of the fastest JSON loggers for Node.js: pino. One of our key decisions was to remove all "transport" to another process (or infrastructure): it reduced both CPU and memory consumption, removing any bottleneck from logging. However, this created friction and lowered the developer experience of using Pino and in-process transports is the most asked feature our user.In the upcoming version 7, we will solve this problem and increase throughput at the same time: we are introducing pino.transport() to start a worker thread that you can use to transfer your logs safely to other destinations, without sacrificing neither performance nor the developer experience.

Workshops on related topic

Node Congress 2023Node Congress 2023
109 min
Node.js Masterclass
Workshop
Have you ever struggled with designing and structuring your Node.js applications? Building applications that are well organised, testable and extendable is not always easy. It can often turn out to be a lot more complicated than you expect it to be. In this live event Matteo will show you how he builds Node.js applications from scratch. You’ll learn how he approaches application design, and the philosophies that he applies to create modular, maintainable and effective applications.

Level: intermediate
JSNation 2023JSNation 2023
104 min
Build and Deploy a Backend With Fastify & Platformatic
WorkshopFree
Platformatic allows you to rapidly develop GraphQL and REST APIs with minimal effort. The best part is that it also allows you to unleash the full potential of Node.js and Fastify whenever you need to. You can fully customise a Platformatic application by writing your own additional features and plugins. In the workshop, we’ll cover both our Open Source modules and our Cloud offering:- Platformatic OSS (open-source software) — Tools and libraries for rapidly building robust applications with Node.js (https://oss.platformatic.dev/).- Platformatic Cloud (currently in beta) — Our hosting platform that includes features such as preview apps, built-in metrics and integration with your Git flow (https://platformatic.dev/). 
In this workshop you'll learn how to develop APIs with Fastify and deploy them to the Platformatic Cloud.
Node Congress 2023Node Congress 2023
63 min
0 to Auth in an Hour Using NodeJS SDK
WorkshopFree
Passwordless authentication may seem complex, but it is simple to add it to any app using the right tool.
We will enhance a full-stack JS application (Node.JS backend + React frontend) to authenticate users with OAuth (social login) and One Time Passwords (email), including:- User authentication - Managing user interactions, returning session / refresh JWTs- Session management and validation - Storing the session for subsequent client requests, validating / refreshing sessions
At the end of the workshop, we will also touch on another approach to code authentication using frontend Descope Flows (drag-and-drop workflows), while keeping only session validation in the backend. With this, we will also show how easy it is to enable biometrics and other passwordless authentication methods.
Table of contents- A quick intro to core authentication concepts- Coding- Why passwordless matters
Prerequisites- IDE for your choice- Node 18 or higher
JSNation Live 2021JSNation Live 2021
156 min
Building a Hyper Fast Web Server with Deno
WorkshopFree
Deno 1.9 introduced a new web server API that takes advantage of Hyper, a fast and correct HTTP implementation for Rust. Using this API instead of the std/http implementation increases performance and provides support for HTTP2. In this workshop, learn how to create a web server utilizing Hyper under the hood and boost the performance for your web apps.
React Summit 2022React Summit 2022
164 min
GraphQL - From Zero to Hero in 3 hours
Workshop
How to build a fullstack GraphQL application (Postgres + NestJs + React) in the shortest time possible.
All beginnings are hard. Even harder than choosing the technology is often developing a suitable architecture. Especially when it comes to GraphQL.
In this workshop, you will get a variety of best practices that you would normally have to work through over a number of projects - all in just three hours.
If you've always wanted to participate in a hackathon to get something up and running in the shortest amount of time - then take an active part in this workshop, and participate in the thought processes of the trainer.
TestJS Summit 2023TestJS Summit 2023
78 min
Mastering Node.js Test Runner
Workshop
Node.js test runner is modern, fast, and doesn't require additional libraries, but understanding and using it well can be tricky. You will learn how to use Node.js test runner to its full potential. We'll show you how it compares to other tools, how to set it up, and how to run your tests effectively. During the workshop, we'll do exercises to help you get comfortable with filtering, using native assertions, running tests in parallel, using CLI, and more. We'll also talk about working with TypeScript, making custom reports, and code coverage.