Así que hablemos de la observabilidad con Diagnostics Channel y el almacenamiento local asíncrono. Hola a todos. Soy Steven. He estado involucrado en el núcleo de Node.js en un grupo de trabajo de diagnóstico durante muchos años. Trabajo en Datadog construyendo herramientas de diagnóstico y mis pronombres son él.
Entonces, en primer lugar, ¿qué es Diagnostics Channel? Diagnostics Channel es un canal de eventos global de alto rendimiento para transmitir pasivamente datos sobre la ejecución actual. Es muy parecido a un emisor de eventos, pero específicamente diseñado para ser lo más económico posible cuando no hay nada escuchando activamente. La idea es que los usuarios se sientan cómodos transmitiendo muchas cosas sin preocuparse por el costo, si no va a ser observado la mayor parte del tiempo.
Así que los canales se crean en el nivel superior de tu archivo JavaScript llamando a la función channel y proporcionando un nombre para tu canal. comparten un espacio de nombres global para permitir adquirir el mismo canal en cualquier lugar de la aplicación sin necesidad de compartir explícitamente el objeto del canal, y el nombre de tu módulo generalmente debería incluirse en el nombre para evitar colisiones con canales de otras cosas. Una vez que tienes el objeto del canal, puedes comenzar a publicar en él. Esto es como la función emit en un emisor de eventos, pero al crear objetos de canal con anticipación, permite varias optimizaciones, como evitar buscar el controlador cada vez por nombre cada vez que ocurre un evento, y hacer una llamada de publicación lo más cercana posible a cero costo cuando no hay oyentes.
Así que cada canal de diagnóstico debe seguir una convención de tener una estructura de objeto única por canal, y si tienes conjuntos de datos con formas diferentes para comunicar, es probable que esos deban ser canales separados. Así que al menos documenta los nombres y formas de tus canales. En cualquier lugar de la aplicación puedes llamar al canal nuevamente con el mismo nombre para adquirir el mismo canal y luego suscribirte a él. El orden de las llamadas al canal no importa. Cualquier lugar que lo llame primero creará el canal, y cada llamada subsiguiente lo recuperará. Incluso puedes suscribirte a canales para módulos que nunca se cargan y, por lo tanto, nunca tienen eventos publicados. Esto permite una completa desvinculación del código, permitiendo cosas como productos de trazado para observar pasivamente el comportamiento de tu módulo sin necesidad de ninguna conexión explícita entre módulos.
Así que veamos un ejemplo. Comenzamos definiendo nuestro canal nombrado en la parte superior del archivo. Luego escribimos nuestra función, sobre la cual queremos transmitir algunos datos. Típicamente cuando se llama, como cuando completa su set immediate interno, y llama a su callback, transmitirá los datos al canal con la función publish. Esto podría ser útil para todo tipo de cosas. Por ejemplo, podrías querer capturar métricas de cuántas veces hizo una cosa lo que se suponía que debía hacer. Incluso podría capturarse con el tiempo de finalización para graficar la actividad a lo largo del tiempo. Nada de esto necesita ser específicamente soportado por DoA Thing ya que el suscriptor puede decidir por sí mismo qué hacer con el mensaje o si quiere capturar alguna información de tiempo. Publish no tiene efecto a menos que haya suscriptores. No tiene costo a menos que haya suscriptores. A veces, construir el mensaje en sí puede ser costoso si la cosa se ejecutaría muy frecuentemente, por lo que se puede usar el has subscribers para omitir la construcción del mensaje por completo en situaciones críticas de rendimiento.
Comments