Por qué utilizar nodejs

Los derechos de autor pertenecen al autor.

Para reimpresiones comerciales y no comerciales, comuníquese con el autor para obtener autorización.

Autor: Fengqi Asia

Enlace: /question/19653241/answer/15993549

Fuente: Zhihu

: Zhihu

Para dejar esto claro, hablemos primero de los cuellos de botella en la arquitectura general de la aplicación web (incluido el tráfico, la velocidad del procesador y la velocidad de la memoria). Node.js resuelve este problema cambiando la forma en que se conecta al servidor. Node.js resuelve este problema cambiando la forma en que establece conexiones con el servidor. Cada conexión activa un evento que se ejecuta en un proceso en el motor Node.js, en lugar de generar un nuevo hilo del sistema operativo para cada conexión (y asignarle algo de memoria coincidente). Node.js no sufre interbloqueos porque no permite bloqueos en absoluto y no bloquea completamente las llamadas de E/S. Node.js también afirma que los servidores que lo ejecutan pueden admitir decenas de miles de conexiones simultáneas.

El propio Node ejecuta JavaScript V8, el motor JavaScript subyacente utilizado por Google para su navegador Chrome. Google creó un intérprete súper rápido escrito en C++ usando V8, que también tiene una característica única: puedes descargar el motor e incrustarlo en cualquier aplicación. El motor JavaScript V8 no se limita a ejecutarse en un único navegador. Entonces, Node.js tomará el motor JavaScript V8 escrito por Google y lo reconstruirá para ejecutarlo en el servidor.

Ventajas de Node.js:

1. Programación asincrónica basada en eventos, diseñada para servicios de red. De hecho, las funciones anónimas y las capacidades de cierre de Javascript son ideales para la programación asincrónica basada en eventos. Además, JavaScript es fácil de aprender y muchos diseñadores de front-end pueden comenzar rápidamente con el diseño de back-end.

2. El procesamiento de E/S en modo sin bloqueo de Node.js permite que Node.js tenga un alto rendimiento y una excelente capacidad de carga con un consumo de recursos del sistema relativamente bajo, lo que lo hace muy adecuado para su uso como servidor intermedio. en otros recursos de capa IO. 3. Node.js es liviano y eficiente y puede considerarse una solución perfecta para aplicaciones en tiempo real en entornos de implementación distribuida con uso intensivo de datos. Node es ideal para situaciones en las que se espera mucho tráfico antes de responder al cliente, pero la lógica y el procesamiento del lado del servidor requeridos no son necesariamente muchos.

Desventajas de Node.js:

1. Baja confiabilidad

2. Proceso único, subproceso único, solo admite CPU de un solo núcleo y no puede aprovecharse al máximo. de servidor de CPU multinúcleo. Una vez que este proceso falla, todo el servicio de red fallará.

Pero las deficiencias anteriores pueden compensarse con la solidez del código. Actualmente, el servidor web Node.js admite múltiples procesos de las siguientes maneras:

#1 Inicie múltiples procesos, vincule cada proceso a un puerto diferente y use un servidor proxy inverso (como Nginx) para lograr equilibrio de carga. La ventaja de esto es que podemos usar el poder de Nginx para realizar algunos filtrados e inspecciones, y al mismo tiempo lograr una mejor estrategia de equilibrio.

#2 Enlace a múltiples procesos escuchando en el mismo puerto. Node.js proporciona la función de enviar "identificadores de archivos" entre procesos, lo cual es muy útil (parece ser un parche enviado por ingenieros de Yahoo). Para aquellos que no lo saben, es posible que no lo sepan: Unix socket magic

#3 Proceso El proceso es responsable de escuchar y recibir conexiones, y luego envía las conexiones de manera uniforme a sus procesos secundarios para su procesamiento.

En Node.js v0.5.1, hay una biblioteca de clúster incorporada y afirma que admite directamente multiproceso. Sin embargo, Node.js utiliza algunos métodos complicados para hacer que la interfaz API sea más estúpida. Y el código es bastante complejo. Este enfoque multiproceso implica inevitablemente cuestiones como la comunicación y la gestión de procesos.

Además, hay dos módulos de Node.js: multinodo y clúster. Utilizan estrategias similares a las estrategias anteriores, pero también existen algunas desventajas al usar estos módulos:

# 1 No se puede actualizar a tiempo

#2 Complejo y engorroso, y a menudo vinculado a muchas otras funciones, por lo que los usuarios a menudo son secuestrados

#3 Encontré muchos problemas complejos, a menudo vinculados a muchos otros enlaces funcionales. p>

#3 El problema es difícil de resolver

Ejemplos típicos de Node incluyen:

1.API RESTful

Web que proporciona API RESTful El servicio toma varios parámetros, los analiza, ensambla una respuesta y devuelve una respuesta (generalmente menos texto) al usuario. Esto es ideal para Node porque puede construirlo para manejar decenas de miles de conexiones. Básicamente, todavía no requiere mucha lógica, simplemente busca algunos valores de la base de datos y los combina en una respuesta. Dado que las respuestas son pequeñas cantidades de texto y las solicitudes entrantes son pequeñas cantidades de texto, el tráfico no es alto e incluso las empresas más ocupadas pueden tener una sola máquina para satisfacer sus necesidades de API.

2. Cola de Twitter

Imagínese una empresa como Twitter que necesita recibir tweets y escribirlos en una base de datos. De hecho, con literalmente miles de tweets llegando cada segundo, sería imposible que la base de datos manejara la cantidad requerida de escrituras de manera oportuna durante las horas pico. Como puede ver, Node puede manejar decenas de miles de tweets entrantes. Escribe rápida y fácilmente estos tweets en un mecanismo de cola en memoria (como memcached), que luego los escribe en una base de datos mediante un proceso separado. La función de Node aquí es recopilar rápidamente tweets y pasar esta información a otros procesos que son responsables de escribirlos. Imagine un diseño alternativo (un servidor PHP normal que intentaría manejar las escrituras en la base de datos): dado que la llamada a la base de datos bloquea el canal, cada tweet provocaría un breve retraso en la escritura en la base de datos. Es posible que una máquina diseñada de esta manera solo pueda manejar 2000 tweets entrantes por segundo debido a la latencia de la base de datos. Y 1 millón de tweets por segundo requerirían 500 servidores. Por el contrario, Node es capaz de manejar cada conexión sin bloquear el canal, por lo que puede capturar tantos tweets como sea posible. Una máquina Node capaz de manejar 50.000 tweets requiere sólo 20 servidores.

3. Estadísticas de videojuegos

Si alguna vez has jugado al juego Call of Duty online, inmediatamente te darás cuenta de un problema cuando mires las estadísticas del juego: generar En este nivel de estadísticas, es necesario realizar un seguimiento de mucha información. Entonces, si hay millones de jugadores jugando en línea al mismo tiempo y están en diferentes posiciones en el juego, se puede generar una gran cantidad de información muy rápidamente. Node es la mejor solución en esta situación porque captura los datos producidos por el juego, realiza una combinación mínima de los datos y luego los pone en cola para escribirlos en la base de datos. Usar un servidor completo para registrar cuántas balas dispara un jugador en un juego parece un poco tonto, y si estás usando un servidor como Apache, puede haber algunas limitaciones útiles, pero si estás usando un servidor dedicado para registrar todo; en las Estadísticas del juego, como lo haría con un servidor que ejecuta Node, esto parece una decisión inteligente.

En general, escenarios de aplicación de Node.js

1) Adecuado para

API JSON: al crear servicios API Rest/JSON, Node.js puede tomar Aproveche al máximo su modelo IO sin bloqueo y el soporte de JavaScript para funciones JSON (como la función JSON.stringfy)

2) Adecuado para

escenarios de aplicaciones Node.js