javascript - instalar - Usando NodeJS para un gran proyecto
npm (5)
¿Es NodeJS un buen marco / base de código para una gran aplicación del lado del servidor? Lo que busco desarrollar es una aplicación grande que requerirá transacciones HTTP (estados) y grandes cantidades de usuarios concurrentes.
Por lo que he leído en línea, NodeJS no es la mejor herramienta para usar cuando se trata de programas grandes. Lo que he encontrado es el siguiente:
- NodeJS se ejecuta en JavaScript, que se ejecuta en bucles de eventos que no son muy eficientes cuando se utilizan de forma masiva.
- NodeJS puede no ser de bloqueo, pero todas las solicitudes se manejan dentro de un solo hilo, por lo que esto puede causar un poco de cuello de botella cuando se manejan muchas solicitudes.
- NodeJS está construido sobre su propio servidor HTTP, por lo que el mantenimiento futuro requerirá su propio administrador de sistema / híbrido de desarrollador para ocuparse de la aplicación.
- No hay tanto software probado y diverso disponible para NodeJS que lo ayude a construir una aplicación más grande.
¿Se me escapa algo? ¿Es NodeJS realmente tan poderoso como puede ser?
¿Es NodeJS un buen marco / base de código para una gran aplicación del lado del servidor?
Esa pregunta es un poco subjetiva, pero estoy incluyendo puntos objetivos reales que resuelven problemas reales cuando se trabaja con nodo en un proyecto grande.
Actualizar después de trabajar en el proyecto por un tiempo:
Es mejor como servidor front-end / API que está enlazado a E / S (la mayoría de los servidores front-end / api). Si tiene necesidades de proceso de back-end (procesamiento, etc ...), puede emparejarse con otras tecnologías (C # net core, go, Java, etc ... nodos de trabajo)
Creé este proyecto como una muestra que ilustra la mayoría de los puntos - Desarrollo de nodos Sane : https://github.com/bryanmacfarlane/sanenode
NodeJS no está construido sobre su propio servidor http. Está construido sobre el motor javascript de V8 Chrome y no asume un servidor http. Hay un módulo http incorporado, así como el popular servidor web express, pero también hay módulos de socket (así como socket.io ). No es solo un servidor http.
El único subproceso no causa un cuello de botella porque todas las E / S están programadas y son asíncronas. Este enlace lo explica bien: http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
En cuanto al módulo de software, puede buscar en el registro de npm . Siempre mire cuántas personas lo usan (descargas) y visite el repositorio de github para ver si se está manteniendo activamente (o hay un montón de problemas que nunca reciben atención).
Con respecto al "proyecto grande", lo que he encontrado crítico para un desarrollo sano es:
Compilación en tiempo de compilación (e inteligencia) : encuentra problemas cuando compilas. Si no creías que necesitabas esto como yo cuando empecé, cambiarías de opinión después del primer gran refactor.
Elimine el infierno de devolución de llamada : mantenga el rendimiento que es crítico (mencionado anteriormente) pero elimine el código de devolución de llamada. Use async / await para escribir código lineal y mantener async perf. Se integra con promesas, pero es mucho mejor que solo usar promesas.
Herramientas : muchas opciones, pero las que he encontrado mejor son Typescript (ES6 / 7 hoy), VS Code (intellisense), Mocha (unidades de prueba).
Instrumentación / registro : obtener información sobre su aplicación con seguimiento e instrumentación es fundamental.
Construir en marcos bien examinados : uso expreso como ejemplo, pero eso es una preferencia y hay otros.
Creo que lo más importante es usar el tiempo de CPU lo menos posible. Si su aplicación necesita utilizar la CPU de forma intensiva, la latencia del bucle de eventos aumentaría y la aplicación no respondería ninguna otra solicitud.
Node.js es una muy buena herramienta para construir servicios de red distribuidos. Cuál es el diseño de su aplicación a gran escala es más que una pregunta "qué herramientas usar". Mucha gente usa node.js de una manera muy heterogénea junto con ruby, php, erlang, apache & nginx & HAproxy. Si no sabe por qué necesita un nodo, probablemente no lo necesite. Posibles razones para considerar nodo:
- Quieres compartir código Javascript común entre servidor y cliente
- espera una carga altamente concurrente (de miles a cientos de miles de conexiones simultáneas por servidor)
- usted (o su equipo) es mucho más competente con JavaScript que con cualquier otro idioma / marco disponible
- Si uno de los más de 7600 módulos está implementando gran parte de la funcionalidad requerida
Really NodeJs es poderoso a su manera, algo más de información,
- Puede ejecutar varias instancias de su aplicación bajo el equilibrio de carga para manejar la solicitud masiva.
- Elija NodeJs para leer 2000 archivos en lugar de calcular el número primo número 20.
- Ponga a NodeJs ocupado con la lectura / escritura en archivos o puertos.
- Muy útil cuando necesita transmitir su respuesta a varios clientes.
- No se preocupe por el bloqueo muerto en NodeJs, pero sí se preocupa por la frecuencia con la que realiza la misma operación.
- Lo más importante es que los valores viven en el motor V8 hasta que finaliza el proceso. Asegúrese de la cantidad de líneas de código que va a alimentar en NodeJs.
Un "problema" con NodeJS es que la creación de una aplicación grande requiere disciplina por parte del desarrollador / equipo.
Esto es particularmente cierto con varios equipos dentro de la misma compañía. Los marcos existentes son un poco flojos, y diferentes equipos encontrarán diferentes enfoques para resolver un problema.
KrakenJS es un marco, construido sobre Express. Agrega una capa de convención y configuración que debería facilitar la creación de proyectos grandes, con la participación de varios equipos.