Desbloquee el poder de los microservicios de Node JS y lleve sus habilidades tecnológicas al siguiente nivel. Descubra cómo crear aplicaciones escalables.
En el panorama digital actual, acelerado y en constante cambio, la demanda de soluciones de software altamente escalables y eficientes ha aumentado diariamente. Aquí es donde entran los microservicios, un estilo arquitectónico moderno que promueve el desarrollo de servicios pequeños, autónomos e independientes que trabajan juntos para formar una aplicación más grande.
Node.js es ideal para crear microservicios debido a su modelo de E/S sin bloqueo, arquitectura basada en eventos y diseño liviano. Como resultado, permite a los desarrolladores crear aplicaciones de alto rendimiento en tiempo real que pueden escalarse fácilmente y permanecer resistentes ante fallas.
Este artículo explorará las ventajas y desventajas de Node.js para crear arquitecturas de microservicios y las mejores prácticas para diseñar estas arquitecturas, junto con un tutorial para ver cómo se implementa un microservicio básico. Si planea utilizar microservicios con Node.js para crear aplicaciones eficientes que puedan escalarse rápidamente, este artículo es perfecto para usted, ¡así que vayamos directo al grano!
¿Qué es Node.js?
Node.js es un entorno de ejecución de JavaScript multiplataforma y de código abierto para desarrollar aplicaciones de red y del lado del servidor. El bucle de eventos en el núcleo de Node.js le permite administrar múltiples conexiones simultáneas rápidamente sin dejar de ser liviano y eficiente en el uso de recursos.
El bucle de eventos funciona escuchando los eventos que deben procesarse, como solicitudes HTTP o datos recibidos de otros servicios, y luego ejecuta el código relevante para procesarlos. Esto hace que Node.js sea una excelente opción cuando necesita que una aplicación responda rápidamente sin consumir una cantidad sustancial de recursos del servidor o del sistema.
Node también proporciona potentes API que permiten a los desarrolladores crear fácilmente servidores web y aplicaciones en red con solo unas pocas líneas de código. Esto hace que el nodo sea especialmente atractivo para aplicaciones en tiempo real como chats, juegos online, actualizaciones en vivo, etc.
Además, Node.js utiliza prácticas de programación asincrónicas, lo que ayuda a mantener toda la aplicación sin bloqueos. Si una parte de la aplicación tarda más de lo esperado, otras partes no se verán afectadas.
¿Qué es un microservicio?
Un microservicio es un tipo de arquitectura de software que basa una aplicación en una colección de servicios débilmente acoplados. Estos servicios individuales se basan en capacidades comerciales y se pueden implementar de forma independiente a través de canales de implementación totalmente automatizados. Según una investigación de Statista , se encontró que alrededor del 81,5% de las empresas utilizan arquitectura de microservicios. Cada servicio se ejecuta en su propio proceso y se comunica con otros servicios a través de API bien definidas, normalmente utilizando una interfaz HTTP/REST para todo el sistema.
Los microservicios son procesos pequeños e independientes que se comunican entre sí para formar aplicaciones complejas. A menudo se clasifican en una arquitectura monolítica. Pueden escribirse en diferentes lenguajes de programación y utilizar diferentes tecnologías de almacenamiento de datos, por lo que son unidades de software altamente desacopladas y comprobables, lo que facilita las pruebas unitarias.
¿Cuándo utilizar los microservicios de Node.js?
Al decidir si utilizar o no el microservicio node.js, es importante considerar todos los requisitos y la arquitectura de su aplicación. Si tiene una aplicación monolítica existente que necesita mejoras de escalabilidad y rendimiento, dividirla en servicios independientes más pequeños puede ser beneficioso si el costo de la migración es aceptable. Los microservicios también deben usarse cuando es necesario desarrollar rápidamente nuevas funciones pero que no requieren cambios en otras partes del sistema, como webhooks, notificaciones o servicios de procesamiento analítico. Dividiendo así los componentes del software.
En los casos en los que la baja latencia es fundamental, es posible que Node no siempre sea adecuado porque su naturaleza de un solo subproceso significa que las tareas que requieren un uso intensivo de la CPU bloquearán todas las demás solicitudes hasta que completen la ejecución, lo que puede afectar negativamente el rendimiento en condiciones de carga alta en comparación con las arquitecturas más tradicionales. . como aplicaciones Java EE o .Net Core que se ejecutan en varios subprocesos simultáneamente.
Los patrones de programación asincrónicos también deben emplearse siempre que sea posible en las implementaciones de servicios de nodos para que las tareas intensivas de E/S no bloqueen completamente las solicitudes entrantes mientras se esperan respuestas de servicios externos como bases de datos o API de terceros, etc.
En general, Node js ha demostrado ser útil en la creación de sistemas distribuidos que requieren un alto rendimiento a escala y un uso de recursos relativamente bajo.
Sin embargo, todavía existen algunas desventajas asociadas con el uso del microservicio Node.js que también deben tenerse en cuenta antes de tomar una decisión:
- Soporte de lenguaje limitado : debido a que Node se basa en JavaScript, solo los desarrolladores familiarizados con este lenguaje pueden construir y mantener de manera efectiva este tipo de sistemas;
- Falta de madurez : si bien existen muchos marcos en torno al desarrollo de nodos, como ExpressJS, KoaJS, etc., muchos carecen de ciertas características que se encuentran en lenguajes más establecidos.
- Vulnerabilidades de seguridad : los módulos de nodo tienden a tener revisiones de seguridad limitadas en comparación con los paquetes escritos en otros idiomas, lo que significa que el código malicioso puede pasar desapercibido si no se realizan las comprobaciones adecuadas durante el desarrollo;
- Manejo y depuración de errores : la resolución de errores en grandes sistemas distribuidos formados por muchos nodos pequeños puede resultar difícil, especialmente cuando se trata de operaciones asincrónicas en diferentes nodos.
Además, decidir si utilizar o no el microservicio Node.js depende en gran medida de sus requisitos específicos, así como del tipo de experiencia que tenga disponible entre los miembros de su equipo.
Considerando que, comprender cómo utilizar mejor los microservicios de JavaScript requiere cierta experiencia trabajando con tecnologías del lado del servidor basadas en JavaScript como Express JS o Koa JS, etc.
Si se hace correctamente, los beneficios logrados con este enfoque pueden superar con creces cualquier desventaja asociada si se comprenden sus limitaciones y se implementan las salvaguardias adecuadas cuando sea necesario.
Implementando microservicios con Node.js
Este tutorial explora un caso de uso para crear un microservicio de traducción de idiomas con la API de Google Translate. También es fundamental cumplir con los mejores estándares de seguridad al desarrollar una aplicación Node.js. Entonces, cuando se trata de garantizar la seguridad de sus aplicaciones Node.js, las mejores prácticas de seguridad de Node.js pueden ayudarlo a proteger sus datos.
Contexto
La API de Google Translate es una API sólida de traducción de idiomas que proporciona traducción de texto en varios idiomas en tiempo real. También permite a los usuarios traducir texto en el sitio web sin desarrollar capacidades de traducción nativas mediante la integración de esta API externa en un microservicio.
Vamos a empezar.
Requisitos previos
Paso 1: Regístrese para obtener una cuenta de Google Cloud
Para utilizar la API de Google Translate, debe tener una cuenta de Google Cloud. Regístrese para obtener una cuenta gratuita en
Paso 2: active Google Translate y obtenga la clave API
Después de registrarse para obtener una cuenta de Google Cloud, debe habilitar la API de Google Translate en Google Cloud Console. Sigue estos pasos:
1. Acceda a Google Cloud Console en
2. Selecciona tu proyecto o crea uno nuevo
3. Haga clic en el icono del menú de navegación (☰) y seleccione API y servicios > Panel de control.
4. Haga clic en Habilitar API y servicios.
5. Busque la API de Google Translate y haga clic en ella.
6. Haga clic en Habilitar
7. Genere una clave API haciendo clic en Credenciales > Crear credenciales
8. Copie la clave API que se utilizará más adelante en nuestra aplicación.
Paso 3: crea un proyecto de Node.js.
Cree un nuevo proyecto Node.js ejecutando el siguiente comando en su terminal.
Microservicio de traducción mkdir microservicio de traducción de cd inicio npm
El comando npm init se utiliza para inicializar un proyecto Node.js.
Paso 4: instale las dependencias y revise el archivo JSON
Instale las dependencias requeridas para el proyecto ejecutando el siguiente comando
npm instala express axios
Así es como debería verse su paquete.json después de instalar las dependencias. Es importante revisar el archivo JSON para asegurarse de que todo esté configurado correctamente.
{ "nombre": "microservicio de traducción", "versión": "1.0.0", "descripción": "", "principal": "index.js", "guiones": { "prueba": "echo \"Error: no se ha especificado ninguna prueba\" && salida 1" }, "autor": "", "licencia": "ISC", "dependencias": { "axios": "^1.3.4", "expreso": "^4.18.2" } }
Paso 5: configurar el servidor y crear el archivo JS
Cree un nuevo archivo js llamado server.js y agregue el siguiente código:
const expresar = requerir('expresar'); const axios = requerir('axios'); const PUERTO = proceso.env.PORT 3000; aplicación constante = expreso aplicación.get(" (req, res) => { res.sendFile(__dirname + '/home.html', (err) => { si (errar) { consola.log(err); res.status(500).send('Error: No se puede cargar la página'); } }); }); app.get('/translate', async (req, res) => { const {texto, fuente, destino} = solicitud.query; consola.log(texto); console.log(fuente, destino); respuesta constante = esperar axios.get ( ` ); console.log(respuesta.datos.datos.traducciones(0).textotraducido) res.json(response.data.data.translations(0).translatedText); }); aplicación.escuchar(PUERTO, => { console.log(`Servidor ejecutándose en el puerto ${PORT}`); });
El código anterior tiene dos rutas, una para servir una página de inicio y otra para manejar una solicitud de traducción.
La ruta de traducción utiliza la biblioteca Axios para realizar una solicitud GET a la API de traducción de Google Cloud con los parámetros de texto, origen y destino proporcionados. Luego, el texto traducido se devuelve en formato JSON como respuesta.
Paso 6: configurar la variable de entorno
Cree un nuevo archivo llamado .env en la carpeta raíz del proyecto y agregue el siguiente código:
GOOGLE_API_KEY=<tu_clave_api_google>
Reemplazar
Paso 7: configurar el lado del cliente
Cree un nuevo archivo llamado home.html y agregue el siguiente código
<!DOCTYPE html> <html> <cabeza> <título>Traducir texto</título> </cabeza> <cuerpo> <h1>Traducir texto</h1> <formulario> <label for="text">Ingrese el texto a traducir:</label><br /> <tipo de entrada="texto" nombre="texto"><br /><br /> <label for="from-language">Traducir desde:</label> <seleccionar nombre="desde-idioma"> <option value="es">Inglés</option> <option value="es">Español</option> <option value="fr">francés</option> <option value="de">alemán</option> <option value="it">italiano</option> <option value="ja">japonés</option> <option value="ko">coreano</option> <option value="pt">inglés</option> <option value="ru">ruso</option> <option value="zh">chino</option> </seleccionar><br /> <label for="to-language">Traducir a:</label> <seleccione nombre="a-idioma"> <option value="es">Inglés</option> <option value="es">Español</option> <option value="fr">francés</option> <option value="de">alemán</option> <option value="it">italiano</option> <option value="ja">japonés</option> <option value="ko">coreano</option> <option value="pt">inglés</option> <option value="ru">ruso</option> <option value="zh">chino</option> </select><br /><br /> <botón tipo="enviar">Traducir</botón> </formulario> <br /> <p>Texto traducido: </p> <div></div> <script src=" <guión> $(documento).listo(función { $('#translate-form').submit(función (evento) { evento.preventDefault; var texto = $('#texto').val ; var fuente = $('#from-language').val ; var objetivo = $('#to-idioma').val; var url=" + texto + '&source=" + fuente + "&target=" + destino; $.ajax({ URL: URL, escriba: "OBTENER", éxito: función (datos) { consola.log(datos); $('#traducción').append(datos); }, error: función { alert('Se produjo un error al traducir el texto'); }, }); }); }); </script> </cuerpo> </html>
El código anterior toma la entrada del usuario, envía un objeto de solicitud al servidor y devuelve un objeto de respuesta al texto traducido mediante una llamada AJAX. Esto servirá como la página de inicio de la aplicación.
Paso 8: inicie el servidor
Inicie el servidor ejecutando el siguiente comando:
servidor de nodo.js
Paso 9: prueba el microservicio
Abra su navegador y vaya a
Ahora pruebe la aplicación ingresando el texto a traducir. Deberías ver el texto traducido en la pantalla.
Ventajas y desventajas de utilizar microservicios de Node JS
A continuación se muestra una tabla que describe algunas de las ventajas y desventajas de utilizar microservicios con Node.js.
Beneficios | Desventajas |
Los microservicios proporcionan escalabilidad autónoma de cada servicio, lo que facilita la gestión del tráfico intenso y de grandes bases de usuarios. | A medida que crece el número de microservicios, también aumenta la complejidad de la arquitectura general. Haciéndolo más difícil de gestionar y mantener. |
Se pueden crear microservicios para gestionar las fallas de manera inteligente, reduciendo así el impacto de una falla de un solo servicio en todo el sistema. | Debido a que un microservicio se conecta a otros a través de una red, es más probable que se produzcan fallos y retrasos en la red. |
Debido a que un servicio se puede crear y entregar independientemente de otros, los microservicios ofrecen implementaciones más rápidas y frecuentes. | Dado que cada servicio debe probarse e interconectarse con otros, desarrollar y probar microservicios requiere más mano de obra y recursos. |
Desarrollo de software con microservicios, las alternativas
Los microservicios permiten a las organizaciones dividir aplicaciones monolíticas en partes más pequeñas y manejables que se pueden desarrollar e implementar de forma independiente con node.js. Esta estrategia garantiza la escalabilidad y el mantenimiento de la aplicación. Sin embargo, varias alternativas de microservicios a Node.js ofrecen beneficios similares para el desarrollo y la implementación de aplicaciones.
Java
Java existe desde hace algún tiempo y ahora es uno de los lenguajes de programación más utilizados. También incluye varias herramientas y marcos que lo hacen ideal para crear microservicios.
Por ejemplo, el marco Spring Boot permite a los desarrolladores diseñar rápidamente arquitecturas de microservicios de nivel de producción, proporcionando una visión enfocada de cómo deben construirse e implementarse, lo que reduce significativamente el tiempo de desarrollo.
Ir
Go (también conocido como Golang) es un lenguaje relativamente nuevo creado por Google en 2009. Sin embargo, su popularidad creció rápidamente debido a sus características simples pero poderosas, como recolección de basura, primitivas de concurrencia, tiempos de compilación rápidos, seguridad de memoria y una sólida herramienta comunitaria. apoyo.
Go facilita la escritura de programas pequeños y eficientes con un mínimo esfuerzo, lo que lo hace adecuado para crear microservicios livianos que pueden ampliarse o reducirse fácilmente según la demanda o la necesidad. Su bajo uso de recursos también lo hace atractivo cuando se ejecuta una gran cantidad de servicios en entornos de nube distribuidos, lo cual es esencial cuando se trata de cientos o incluso miles de servicios diferentes que se ejecutan simultáneamente dentro de un solo sistema o en múltiples nodos.
Phyton
Python es otro lenguaje popular ampliamente utilizado tanto entre profesionales experimentados como entre aficionados, gracias a su estructura de sintaxis simple que permite la creación rápida de prototipos, lo que permite a los desarrolladores lanzar productos rápidamente sin tener mucho conocimiento sobre convenciones de codificación, etc.
Además, Python tiene varios marcos creados específicamente para admitir arquitecturas orientadas a servicios, como Flask y Django. Esto ayuda a enrutar solicitudes a lo largo de rutas específicas entre componentes junto con una seguridad adecuada en cualquier patrón de diseño arquitectónico. Esto lo convierte en un candidato ideal para desarrollar soluciones basadas en microservicios.
Rubí
Ruby a menudo se ignora por error porque es demasiado lento para el desarrollo del lado del servidor. Sin embargo, mediante el uso del módulo EventMachine de Ruby, este mito puede ser desacreditado, permitiendo a los desarrolladores crear aplicaciones web asincrónicas de alto rendimiento capaces de manejar grandes volúmenes de tráfico simultáneamente, al tiempo que proporcionan tiempos de respuesta que superan con creces las expectativas de los modelos tradicionales de "bloqueo".
Conclusión:
En conclusión, la creación de microservicios con Node.js, un entorno de desarrollo en tiempo de ejecución basado en el lenguaje de programación JavaScript, se ha vuelto cada vez más popular en el desarrollo de software debido a sus numerosas ventajas. Al dividir una aplicación completa en microservicios independientes, los equipos de desarrollo pueden trabajar en cada servicio por separado, como se detalla en la descripción del trabajo del Nodo. Este enfoque hace que sea más fácil escalar y mantener la aplicación general.
Si le gustó este artículo, consulte nuestras otras guías a continuación;
- Cambiar la versión del nodo: una guía paso a paso
- Caché de Node JS: aumento del rendimiento y la eficiencia
- Libere el poder de los microservicios Node.JS
- Liberando el poder de Websocket Nodejs
- Los mejores editores de texto y Node JS IDE para el desarrollo de aplicaciones