¡Ya está aquí! Worker Threads llegó a N|Solid, una funcionalidad que muchos esperábamos con ansias 🙌

Marian Villa
8 min readApr 27, 2021

Artículo original en Inglés creado por Liz Parody para NodeSource: https://nsrc.io/3vj8uWI

Worker Threads en N|Solid, es una nueva funcionalidad que sabemos que agrega muchísimo valor a todos los usuarios que utilizan Node.js. Esta funcionalidad le permite a los desarrolladores crear aplicaciones más complejas y robustas. Worker Threads se estabilizó en Node.js v12 en abril de 2019 y los colaboradores de Node.js se centraron mucho en esta funcionalidad porque le brinda a los desarrolladores la posibilidad de mejorar el rendimiento en el trabajo intensivo de la CPU cuando hay un gran flujo de procesos.

Para obtener más información sobre la importancia y los conceptos básicos de Worker Threads , consulta este artículo (ENG).

Algo importante a tener en cuenta, es que a pesar de la importancia de Worker Threads, las organizaciones no contaban con herramientas para visibilizar lo que sucedía dentro de sus procesos continuos y esto crea un desafío extra. Pero, ahora con N|Solid, todo eso cambia. Con Worker Threads en N|Solid, las empresas ahora podrán tener métricas detalladas de cada thread al revisar el dashboard principal de trabajo en N|Solid.

Los desarrolladores ahora podrán utilizar Workers en un entorno de producción, con la confianza de que cualquier problema que surja dentro de estos, se puede resolver con la misma facilidad que si el proceso no estuviera utilizando Workers.

Nota: Los Worker Threads solo se admiten en Erbium (Node.js v12) y Fermium (Node.js v 14), que son las únicas versiones de Node.js que admiten Worker Threads como una función estable. Entonces, si se está utilizando versiones de Node.js no compatibles, esta es tu oportunidad para actualizar a versiones más recientes. También ten en cuenta que Node.js v10 ya no será compatible en abril de 2021. Así que corre a actualizarlo ya 🏃‍♀️🏃🏿.

¡Sabemos que esto es muy emocionante!

Por primera vez en el ecosistema Node.js, se puede tomar heap snapshots y el perfil de CPU de un Worker Thread individual, no solo en el proceso principal. Ya es una realidad comparar Worker Thread, depurar, solucionar problemas y encontrar soluciones para cualquier problema mientras se usa Threads en producción 😱.

Al desarrollar ya puedes utilizar Worker Threads y contar con la tranquilidad y confianza que que todas las métricas de N|Solid te ayudarán a crear mejores aplicaciones y también a resolver los problemas que surgen con mucha más rapidez.

Worker Threads en N|Solid, es transparente, integrado, sin gastos de memoria, compatible con versiones anteriores e incluye compatibilidad con CLI. Ningún otro APM comercial admite esto.

Capturar un heap snapshot de tu proceso o un perfil de CPU es muy fácil, solo tienes que elegir el thread 🙌. En otras palabras, todo el valor que los desarrolladores reciben de N|Solid para un thread principal, ahora también está disponible para Worker Threads.

¿Por qué deberías probarlo?

La mejor forma de entender su valor es probándolo, así que ingresa ya a N|Solid, algo importante para resaltar es que NO existen otras soluciones en el mercado que permitan a los desarrolladores transmitir métricas de manera fácil y transparente o tomar heap snapshots y perfiles de CPU de Worker Threads individuales. N|Solid es el único producto que existe para esto. Ningún otro APM ofrece esta capacidad. Por lo tanto, si desea aprovechar al máximo los Worker Threads y encontrar fácilmente más información sobre los Threads que están creando y utilizando, deberían probar ya mismo N|Solid.

¿En qué se diferencia esto de las soluciones actuales?

Para recopilar información sobre un Worker Thread normalmente se debe interrumpir el thread y entrar en modo de depuración, así que no se puede hacer en producción. Pero con esta versión de N|Solid un Worker Thread que se ejecuta en producción se puede interrumpir instantáneamente y puede recopilar información sobre él en forma de un perfil de CPU o un heap snapshot mientras se ejecuta el proceso, es decir, sin interrumpir el proceso en sí y sin importar el estado del thread. (otras soluciones requieren que el proyecto esté disponible para ser consultado).

N|Solid puede recopilar e informar las mismas métricas para todos los Threads y se pueden almacenar, para que pueda tener una descripción general completa de cómo se han desempeñado todos sus Threads frente al proyecto a lo largo del tiempo, incluso cuando han estado activos o inactivos, o si los estás usando actualmente, qué están haciendo, cuántos identificadores tienen y otras métricas increíbles. Con N|Solid no mentimos cuando decimos: Know your Node™

¿Cómo ver la información de Worker Thread en N|Solid?

Hay cambios en dos vistas principales, en el diagrama de dispersión y en los detalles del Worker. Dentro de N|Solid, en la parte superior derecha del gráfico del diagrama de dispersión, puede ver la identificación del worker y la cantidad de Threads de ese worker, como puede ver en la imagen a continuación:

En este caso, ese proceso específico tiene 4 Worker Threads. Si el proceso no tiene Threads , se mostrará como 0.

En la pantalla de detalles del worker, podemos ver una nueva métrica:

Utilización del bucle de eventos o ELU, que es la relación entre el tiempo que el bucle de eventos no está inactivo en el proveedor de eventos y el tiempo total que se está ejecutando el bucle de eventos.

En NodeSource presentamos ELU como la métrica principal porque ELU es similar pero más confiable que la CPU cuando indica el estado del worker. Especialmente si se utilizan Worker Threads. Para obtener más información sobre esta métrica, puede leer esta publicación del Blog de NodeSource o la documentación oficial.

En N|Solid también en el panel izquierdo dentro de la consola podrás ver la lista de Threads que se están ejecutando en el proceso, en este caso 5.

El thread principal siempre será 0 y cada thread lleva el nombre de su id (si lo prefiere, puede cambiar el id por nombres utilizando la API de JavaScript N|Solid). Para obtener información sobre cómo utilizar la API de JavaScript N|Solid, lea esta publicación.

Los Threads que se muestran como “muertos” (en este caso el Thread # 3) son Threads que ya han finalizado su ejecución mientras el proceso se está ejecutando. Aún puede ver las métricas de aquellos thread que ya no están activos.

Para ver la información y todas las métricas de un thread específico, haga clic en el ID o el nombre del thread, como se muestra en la imagen a continuación:

También puede comparar 2 Threads con solo hacer clic en ellos.

Y en los detalles del proceso podrás ver cada métrica diferenciada por los dos threads seleccionados en diferentes colores como se muestra a continuación.

Si no selecciona ningún threads, se mostrarán todas las métricas del thread principal.

Si hace clic en el icono de la lupa de “Mostrar y ocultar métricas para este proceso.

Puede ver las otras métricas que están disponibles para los procesos. Por ejemplo, si selecciona ‘Event Loop Idle Percent’, podrá ver la métrica como se muestra a continuación.

Las métricas que tienen la etiqueta “Process-Wide”, como CPU usada, significa que esta métrica es la misma para todos los Threads, no cambia si cambias las métricas por Thread o las comparas, porque se comparten entre todos los threads dentro del proceso.

Heap Snapshot y perfil de CPU por Thread

En la esquina superior derecha puede encontrar el botón “Nuevo Heap Snapshots” y “Nuevo perfil de CPU”.

Si hace clic en el botón nuevo heap snapshot, puede tomar una instantánea para el thread principal o el thread específico seleccionando el thread de la lista y haciendo clic en el botón “Obtener el heap snapshot”. Solo se puede seleccionar un thread a la vez. Si no selecciona un thread, el thread principal se seleccionará de forma predeterminada.

Esto puede ser muy útil si cree que un thread específico está consumiendo mucha CPU o cualquier otro recurso, puede seleccionar ese thread y tomar un heap snapshot, en este caso el hilo # 2.

Y ahora puede ver el heap snapshot de ese thread específico como puede ver a continuación:

Si desea tomar un perfil de CPU, será el mismo, simplemente seleccione el thread del que desea obtener el perfil de CPU y haga clic en “Iniciar perfil”. Solo puede seleccionar un thread y si no se selecciona ningún thread, el thread principal se elegirá de forma predeterminada.

CLI

También puede usar la CLI para tomar heap snapshots de un thread, pasando el indicador — id [process_id] y el identificador del thread —threadId = ”4” Si no se pasa ningún ID del thread, se tomará el thread principal como predeterminado.

¿Necesitas ayuda?, podemos ayudarte:

Si tienes alguna pregunta, no dude en contactarnos en info@nodesource.com o a través de este formulario.

Para sacar el máximo partido de Node.js, inicie una prueba gratuita de N|Solid, la mejor manera de monitorear y proteger sus aplicaciones y servicios de Node.js, creada por los expertos de Node y en la que confían organizaciones grandes y pequeñas. #KnowyourNode

--

--

Marian Villa

DevDesigner🔺GDE Web Technologies & UI/UX (18' -19')🧡 Founder @pionerasdev @Womint 👩‍💻@eversocialco 👩‍💼Teacher @EAFIT @Platzi #WomenInTech