Notificaciones Push: No se puede vivir con ellas, no se puede vivir sin ellas

Rate this content
Bookmark

Considera cuántas notificaciones recibes al día... y ahora considera los millones de personas que también reciben notificaciones. 16 millones de notificaciones al día que tienen lugares a los que ir y personas que ver, en una carrera contra el tiempo, la carga y la latencia.

Entonces, ¿qué sucede detrás de escena para asegurarse de que todas esas notificaciones lleguen a donde deben ir y rápidamente? Una combinación de autoescalado, rabbitMQ, monitoreo minucioso y un equipo de desarrollo incansable. En esta charla, discutiré la funcionalidad del bus de mensajes en el núcleo de la plataforma de comunicaciones de Vonage, los poderosos scripts de Node que impulsan toda la operación y cómo puedes utilizar soluciones similares para diversos desafíos.

This talk has been presented at Node Congress 2021, check out the latest edition of this JavaScript Conference.

FAQ

El libro favorito del narrador se llamaba 'Hakina Nekhama, Nekhama el Piojo'. Esta historia trata sobre un piojo que no quería quedarse en una sola cabeza y decide viajar por el mundo explorando diferentes cabezas y ciudades.

El narrador compara la historia del piojo que viaja y encuentra su lugar ideal con las notificaciones en la plataforma de Vonage, que viajan rápidamente y encuentran su destino exacto de manera eficiente.

La plataforma de Comunicaciones Empresariales de Vonage ofrece servicios de voz, mensajería, video y correo de voz, disponibles tanto en dispositivos de escritorio como móviles.

Los dispositivos se conectan a la infraestructura de mensajería de Vonage, se registran proporcionando detalles como la ID del usuario y del dispositivo, y reciben un token de notificación si se permite. Esta información se maneja y almacena a través de la API de Vonage.

Vonage utiliza IDs de rastreo en los registros para asegurarse que cada notificación se monitoree y se dirija correctamente a través de los diferentes servicios y pasos en su infraestructura.

Vonage utiliza un paquete de NPM conocido como CLSHooked que permite el uso de ganchos asíncronos para mantener un almacenamiento local por sesión, ayudando a rastrear las notificaciones y otras informaciones a lo largo de su flujo de servicio.

Avital Tzubeli
Avital Tzubeli
9 min
24 Jun, 2021

Comments

Sign in or register to post your comment.

Video Summary and Transcription

La charla explora el recorrido de una notificación en una plataforma de comunicaciones, destacando los desafíos de la ingeniería de infraestructura. Los IDs de trazabilidad y el almacenamiento local desempeñan un papel crucial en garantizar la llegada de las notificaciones, lo que permite una fácil depuración si no llegan al dispositivo. Los registros demuestran el recorrido de una notificación, llegando a la tienda de aplicaciones en solo 4 milisegundos.

1. The Journey of a Notification

Short description:

Cuando era niño, me encantaba un libro infantil sobre un piojo que viaja por el mundo y encuentra su pareja perfecta. Esta historia me recordó el viaje de una notificación en nuestra plataforma de comunicaciones, que debe llegar en milisegundos. Vamos a explorar los desafíos de la ingeniería de infraestructura y los pasos involucrados en la entrega de notificaciones a diferentes dispositivos, incluyendo aplicaciones de escritorio y móviles.

Cuando era niño en Estados Unidos, de padres israelíes, la mayoría de mis libros y películas desde muy temprana edad eran en hebreo, por supuesto, para enseñarme el idioma antes de que el inglés se apoderara de mi cerebro.

Una cinta que me encantaba se llamaba Hakina Nekhama, Nekhama el Piojo, que si no estás familiarizado con esta palabra, es la versión singular de piojos. Asqueroso, lo sé.

La historia contaba de este piojo que decidió que no quería quedarse en una cabeza para siempre. Quería salir y viajar por el mundo, ver diferentes cabezas y diferentes ciudades. Pero obviamente todos la odiaban y querían que se fuera, y ella viajaba incansablemente de una cabeza a otra hasta que accidentalmente aterriza en la cabeza de un hombre calvo, quien en realidad está muy emocionado de tenerla porque ahora tiene el mismo problema que las personas con cabello. Se hacen amigos y viven felices para siempre.

Ahora, obviamente esta es una historia ridícula, pero cuando me uní a Vonage el año pasado y aprendí sobre nuestra plataforma de comunicaciones y la cantidad de mensajes que maneja al día, consideré la notificación única entre un millón que se abre camino en un viaje rápido de 5, 10, solo milisegundos llegando a donde necesita estar, de repente me hizo pensar en ese pequeño piojo rosa que amaba de niño, uno entre un millón, que con propósito y ambición finalmente llegó a la cabeza del hombre calvo que la quería, su pareja perfecta, precisamente donde necesitaba estar. ¿Milagroso, no?

Pero aquí está la cosa, en el mundo de los libros infantiles, todo termina felizmente, pero en la vida real, las cosas no salen como se planean, los objetos se pierden, las notificaciones nunca llegan a su destino, así que hablemos de esta vida real de la ingeniería de infraestructura, de rastrear nuestros pasos y asegurarnos de saber qué está sucediendo en cada punto del peligroso viaje.

La plataforma de Comunicaciones Empresariales de Vonage, el sistema del que hablaré hoy, ofrece capacidades de voz, mensajería, video y correo de voz tanto en escritorio como en dispositivos móviles. La plataforma cuenta con 150,000 usuarios que a través de todas estas funcionalidades producen 800 notificaciones por segundo. ¿Y lo mejor? Todas esas notificaciones llegan a donde necesitan estar en 15 milisegundos, porque ese es el tipo de estándares a los que estamos acostumbrados hoy en día. Entonces, ¿cómo es este viaje de 15 milisegundos de una linda notificación? Comencemos desde el principio.

Digamos que estás en tu computadora usando la aplicación de escritorio. Tu computadora, a través del cliente, se conecta a la infraestructura de mensajería que llamamos la estación de autobuses y se presenta, `Hola, pertenezco a la computadora de Juan. Me gustaría registrarme para recibir notificaciones`. La estación de autobuses envía una solicitud a su API, que hemos llamado Frizzle porque las referencias a los libros infantiles nunca terminan, para informarle sobre la nueva conexión. Toda la información de identificación se almacena. Frizzle se comunica con el intermediario de mensajes, que crea una nueva cola para tu usuario en particular y, con la ayuda del protocolo de mensajes, determina en qué cola colocar tus mensajes. El protocolo devuelve una URL y así se forma una conexión WebSocket entre tu cliente y esta cosa que llamamos el autobús. Ahora, en el otro extremo, se envía un mensaje hacia ti. Llega a la API de Frizzle perteneciente al autobús, y Frizzle envía la notificación a RabbitMQ, y el Protocolo de Mensajes la envía a tu dispositivo. Genial.

Pero te preguntas ahora, ¿qué pasa con los teléfonos móviles? ¿La aplicación móvil? No puedo mantener una conexión WebSocket con el teléfono todo el tiempo, ¿verdad? Entonces, ¿qué pasa con esas famosas notificaciones push del título de mi charla? Y lo que es más importante, ¿cómo sigo el progreso de esas notificaciones? Porque con 800 notificaciones por segundo, puede ser muy fácil perder rápidamente el rastro. Bueno, cuando abres la aplicación móvil, ocurre un flujo similar. Tu teléfono se conecta a la estación de autobuses y se presenta con tu ID e información sobre tu dispositivo y algo llamado un token de notificación, asumiendo que hiciste clic en Permitir Notificaciones en la aplicación. La API maneja y almacena esta información, y ahora estás registrado para recibir notificaciones. Ahora, cuando Frizzle envía la notificación a tu cola, esa notificación también se envía en paralelo a lo que llamamos el servicio HTTP del autobús. Escrito en Node, el servicio sabe si te has registrado para recibir notificaciones push.

2. The Role of Trace IDs and Local Storage

Short description:

Si tienes una notificación y quieres garantizar su llegada, los IDs de rastreo en los registros juegan un papel crucial. Al utilizar un paquete de almacenamiento local de continuación o un gancho CLS, puedes guardar el ID de rastreo en el almacenamiento local, lo que lo hace accesible para cualquier registro o solicitud en cualquier punto del flujo. En el servicio HTTP, el middleware obtiene el ID de rastreo de las cabeceras y lo agrega al almacenamiento local de la sesión. Luego, el ID de rastreo se incluye en los registros y las solicitudes, asegurando que el registrador no necesite conocerlo. Finalmente, cuando la notificación se envía a PushMe, el ID de rastreo se rastrea en las cabeceras, lo que permite una fácil depuración si la notificación no llega al dispositivo. Estos registros demuestran el viaje de una notificación, llegando a la tienda de aplicaciones en solo 4 milisegundos.

Si tienes, la notificación y tu información se envía a PushMe, otro servicio de Node para notificaciones push. Este servicio tiene una base de datos de esos tokens de push mapeados a cada usuario, que le indican a qué sistema operativo y a qué dispositivo enviar esa notificación push. Ahora, con una infraestructura en su lugar, ¿cómo podemos garantizar la llegada de 16 millones de notificaciones diarias? La respuesta obvia son los IDs de rastreo en los registros, asegurando que el mismo ID siempre se use para la notificación específica en cada servicio, ¿verdad? Pero, ¿cómo lo hacemos mientras separamos la lógica empresarial de la infraestructura? No queremos que un ID de rastreo aparezca por todo nuestro código, ¿verdad? Aquí es donde entra en juego un práctico paquete de NPM.

Y esta parte es importante incluso si no estás tratando de construir una plataforma de comunicaciones masiva. Estoy hablando de un paquete de almacenamiento local de continuación o gancho CLS que utiliza ganchos asíncronos para mantener algo como un almacenamiento local para cada sesión de solicitud. Si ya estás utilizando Node 14, sin embargo, esta funcionalidad está incorporada con una API nativa experimental. Permite que el ID de rastreo se guarde en el almacenamiento local para que se pueda recuperar para cualquier registro y cualquier solicitud en cualquier punto del flujo.

Entonces, consideremos esta parte del diagrama. Imagina una notificación push dirigida a tu teléfono que te dice que recibiste un mensaje de Jonathan. Como sabemos, Frizzle envía esta notificación como una solicitud al servicio HTTP del autobús. Al llegar al servicio HTTP, el middleware obtiene el ID de rastreo de las cabeceras y lo coloca en el almacenamiento local de la sesión. Se escriben varios registros a medida que ocurren diferentes cosas, como verificar un rifle, por ejemplo, y encontrar información sobre el dispositivo del usuario. Y luego, cada vez, ese ID de rastreo se agrega a esos registros antes de que se escriban. Suponiendo que aceptes notificaciones push, el intérprete captura la notificación justo antes de que se dirija a PushMe y rastrea el ID de rastreo en las cabeceras de la solicitud. Lo genial es que CLSHooked se puede usar para otras cosas, no solo registros, como en una situación en la que necesitas los detalles del usuario en cada paso a lo largo del flujo de tu servicio. Pero veamos cómo se ve en nuestro código, que se ha tomado del servicio HTTP. Primero creamos una instancia del middleware de esta manera, y luego la recuperamos de esta manera. Entonces, cuando una solicitud llega al servicio y es interceptada por el middleware de rastreo, que verifica si tiene un ID de rastreo, asumiendo que llegó de Frizzle, debería, luego guarda ese ID en la instancia de almacenamiento local. Y en este punto estamos manejando la lógica empresarial, ¿verdad? Estamos verificando si debemos enviarle a este tipo una notificación push. En cada punto del camino donde se debe escribir un registro y antes de que se envíe, será capturado por el middleware aquí, que agregará el ID de rastreo tomando del almacenamiento local y luego escribirá el registro. Ahora el mismo intérprete se encuentra en Axios, el cliente HTTP, para que cada vez que una solicitud esté a punto de ir a otro servicio, capturemos esa solicitud HTTP justo antes y agreguemos el ID de rastreo a su cabecera. Y todo esto asegura que el registrador no necesite saber nada sobre el ID de rastreo. Genial, ¿verdad? Cuando PushMe finalmente envía esa notificación a tu dispositivo, tendremos ese registro final con el ID de rastreo en cuestión y sabremos que enviamos esa notificación a la tienda de aplicaciones. De esta manera, si se envió una notificación a tu teléfono y no la recibiste, podemos culpar a Apple, ¿porque no nos encanta culpar a Apple? Y esto es cómo se ven una serie de registros para una notificación de una llamada entrante. Si observas las marcas de tiempo, notarás que va desde Frizzle hasta el servicio HTTP hasta PushMe en cuestión de 4 milisegundos. Entonces, este puede no ser el viaje heroico de un lindo parásito alrededor del mundo, pero, hey, quién sabe, estos podrían ser los registros de una pequeña notificación que llegó alrededor del mundo en menos de 15 milisegundos. Gracias.

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

Es una jungla ahí fuera: ¿Qué está pasando realmente dentro de tu carpeta Node_Modules?
Node Congress 2022Node Congress 2022
26 min
Es una jungla ahí fuera: ¿Qué está pasando realmente dentro de tu carpeta Node_Modules?
Top Content
The talk discusses the importance of supply chain security in the open source ecosystem, highlighting the risks of relying on open source code without proper code review. It explores the trend of supply chain attacks and the need for a new approach to detect and block malicious dependencies. The talk also introduces Socket, a tool that assesses the security of packages and provides automation and analysis to protect against malware and supply chain attacks. It emphasizes the need to prioritize security in software development and offers insights into potential solutions such as realms and Deno's command line flags.
Hacia una Biblioteca Estándar para Runtimes de JavaScript
Node Congress 2022Node Congress 2022
34 min
Hacia una Biblioteca Estándar para Runtimes de JavaScript
Top Content
There is a need for a standard library of APIs for JavaScript runtimes, as there are currently multiple ways to perform fundamental tasks like base64 encoding. JavaScript runtimes have historically lacked a standard library, causing friction and difficulty for developers. The idea of a small core has both benefits and drawbacks, with some runtimes abusing it to limit innovation. There is a misalignment between Node and web browsers in terms of functionality and API standards. The proposal is to involve browser developers in conversations about API standardization and to create a common standard library for JavaScript runtimes.
ESM Loaders: Mejorando la carga de módulos en Node.js
JSNation 2023JSNation 2023
22 min
ESM Loaders: Mejorando la carga de módulos en Node.js
ESM Loaders enhance module loading in Node.js by resolving URLs and reading files from the disk. Module loaders can override modules and change how they are found. Enhancing the loading phase involves loading directly from HTTP and loading TypeScript code without building it. The loader in the module URL handles URL resolution and uses fetch to fetch the source code. Loaders can be chained together to load from different sources, transform source code, and resolve URLs differently. The future of module loading enhancements is promising and simple to use.
Diagnostics de Node.js listos para usar
Node Congress 2022Node Congress 2022
34 min
Diagnostics de Node.js listos para usar
This talk covers various techniques for getting diagnostics information out of Node.js, including debugging with environment variables, handling warnings and deprecations, tracing uncaught exceptions and process exit, using the v8 inspector and dev tools, and generating diagnostic reports. The speaker also mentions areas for improvement in Node.js diagnostics and provides resources for learning and contributing. Additionally, the responsibilities of the Technical Steering Committee in the TS community are discussed.
Compatibilidad con Node.js en Deno
Node Congress 2022Node Congress 2022
34 min
Compatibilidad con Node.js en Deno
Deno aims to provide Node.js compatibility to make migration smoother and easier. While Deno can run apps and libraries offered for Node.js, not all are supported yet. There are trade-offs to consider, such as incompatible APIs and a less ideal developer experience. Deno is working on improving compatibility and the transition process. Efforts include porting Node.js modules, exploring a superset approach, and transparent package installation from npm.
Registro Multihilo con Pino
JSNation Live 2021JSNation Live 2021
19 min
Registro Multihilo con Pino
Top Content
Today's Talk is about logging with Pino, one of the fastest loggers for Node.js. Pino's speed and performance are achieved by avoiding expensive logging and optimizing event loop processing. It offers advanced features like async mode and distributed logging. The use of Worker Threads and Threadstream allows for efficient data processing. Pino.Transport enables log processing in a worker thread with various options for log destinations. The Talk concludes with a demonstration of logging output and an invitation to reach out for job opportunities.

Workshops on related topic

Masterclass de Node.js
Node Congress 2023Node Congress 2023
109 min
Masterclass de Node.js
Top Content
Workshop
Matteo Collina
Matteo Collina
¿Alguna vez has tenido dificultades para diseñar y estructurar tus aplicaciones Node.js? Construir aplicaciones que estén bien organizadas, sean probables y extensibles no siempre es fácil. A menudo puede resultar ser mucho más complicado de lo que esperas. En este evento en vivo, Matteo te mostrará cómo construye aplicaciones Node.js desde cero. Aprenderás cómo aborda el diseño de aplicaciones y las filosofías que aplica para crear aplicaciones modulares, mantenibles y efectivas.

Nivel: intermedio
Construye y Despliega un Backend con Fastify y Platformatic
JSNation 2023JSNation 2023
104 min
Construye y Despliega un Backend con Fastify y Platformatic
WorkshopFree
Matteo Collina
Matteo Collina
Platformatic te permite desarrollar rápidamente APIs GraphQL y REST con un esfuerzo mínimo. La mejor parte es que también te permite aprovechar todo el potencial de Node.js y Fastify cuando lo necesites. Puedes personalizar completamente una aplicación de Platformatic escribiendo tus propias características y complementos adicionales. En el masterclass, cubriremos tanto nuestros módulos de código abierto como nuestra oferta en la nube:- Platformatic OSS (open-source software) — Herramientas y bibliotecas para construir rápidamente aplicaciones robustas con Node.js (https://oss.platformatic.dev/).- Platformatic Cloud (actualmente en beta) — Nuestra plataforma de alojamiento que incluye características como aplicaciones de vista previa, métricas integradas e integración con tu flujo de Git (https://platformatic.dev/).
En este masterclass aprenderás cómo desarrollar APIs con Fastify y desplegarlas en la nube de Platformatic.
Construyendo un Servidor Web Hiper Rápido con Deno
JSNation Live 2021JSNation Live 2021
156 min
Construyendo un Servidor Web Hiper Rápido con Deno
WorkshopFree
Matt Landers
Will Johnston
2 authors
Deno 1.9 introdujo una nueva API de servidor web que aprovecha Hyper, una implementación rápida y correcta de HTTP para Rust. El uso de esta API en lugar de la implementación std/http aumenta el rendimiento y proporciona soporte para HTTP2. En este masterclass, aprende cómo crear un servidor web utilizando Hyper en el fondo y mejorar el rendimiento de tus aplicaciones web.
0 a Auth en una Hora Usando NodeJS SDK
Node Congress 2023Node Congress 2023
63 min
0 a Auth en una Hora Usando NodeJS SDK
WorkshopFree
Asaf Shen
Asaf Shen
La autenticación sin contraseña puede parecer compleja, pero es fácil de agregar a cualquier aplicación utilizando la herramienta adecuada.
Mejoraremos una aplicación JS de pila completa (backend de Node.JS + frontend de React) para autenticar usuarios con OAuth (inicio de sesión social) y contraseñas de un solo uso (correo electrónico), incluyendo:- Autenticación de usuario - Administrar interacciones de usuario, devolver JWT de sesión / actualización- Gestión y validación de sesiones - Almacenar la sesión para solicitudes de cliente posteriores, validar / actualizar sesiones
Al final del masterclass, también tocaremos otro enfoque para la autenticación de código utilizando Flujos Descope en el frontend (flujos de arrastrar y soltar), manteniendo solo la validación de sesión en el backend. Con esto, también mostraremos lo fácil que es habilitar la biometría y otros métodos de autenticación sin contraseña.
Tabla de contenidos- Una breve introducción a los conceptos básicos de autenticación- Codificación- Por qué importa la autenticación sin contraseña
Requisitos previos- IDE de tu elección- Node 18 o superior
GraphQL: De Cero a Héroe en 3 horas
React Summit 2022React Summit 2022
164 min
GraphQL: De Cero a Héroe en 3 horas
Workshop
Pawel Sawicki
Pawel Sawicki
Cómo construir una aplicación GraphQL fullstack (Postgres + NestJs + React) en el menor tiempo posible.
Todos los comienzos son difíciles. Incluso más difícil que elegir la tecnología es desarrollar una arquitectura adecuada. Especialmente cuando se trata de GraphQL.
En este masterclass, obtendrás una variedad de mejores prácticas que normalmente tendrías que trabajar en varios proyectos, todo en solo tres horas.
Siempre has querido participar en un hackathon para poner algo en funcionamiento en el menor tiempo posible, entonces participa activamente en este masterclass y únete a los procesos de pensamiento del instructor.
Dominando Node.js Test Runner
TestJS Summit 2023TestJS Summit 2023
78 min
Dominando Node.js Test Runner
Workshop
Marco Ippolito
Marco Ippolito
Node.js test runner es moderno, rápido y no requiere bibliotecas adicionales, pero entenderlo y usarlo bien puede ser complicado. Aprenderás a utilizar Node.js test runner a su máximo potencial. Te mostraremos cómo se compara con otras herramientas, cómo configurarlo y cómo ejecutar tus pruebas de manera efectiva. Durante la masterclass, haremos ejercicios para ayudarte a sentirte cómodo con el filtrado, el uso de afirmaciones nativas, la ejecución de pruebas en paralelo, el uso de CLI y más. También hablaremos sobre trabajar con TypeScript, hacer informes personalizados y la cobertura de código.