nodejs ¿porque usarlo?
DESCRIPTION
NodeJs ¿porque usarlo? Ventajas, Desventajas, ComparaciónTRANSCRIPT
NODE.JS
Por Rodolfo Vera
Justificación• Node.js es la tecnología mas reciente en
Silicon Valley. • Actualmente utilizada por Microsoft,
VMWare, Ebay, Yahoo, y muchas otras empresas de tecnología.
• Se escucha sobre Node.js:– aplicaciones “en tiempo real” o “altamente
escalables”. – es Javascript para el lado del servidor (por
qué?, para qué?)– en qué momento usarlo ni cómo hacerlo
Problema• La web se ha vuelto más interactiva. Los
usuarios de todo el mundo quieren interactuar con otros usuarios, y quieren hacerlo en tiempo real.
• Por ejemplo, chatear, jugar, actualizar redes sociales, son actividades que requieren de una comunicación en tiempo real entre usuarios, cliente y servidores a través de la web.
• Y algo más importante, esta comunicación en tiempo real debe ocurrir a gran escala, soportando cientos, miles, y hasta millones de usuarios.
Solución• Lo que necesitamos es una comunicación en
tiempo real entre clientes y servidores.• HTTP no fue construido para un gran número de
clientes tratando de conectarse simultáneamente a un servidor, lo cual puede ser lento e ineficiente.
• Para habilitar la comunicación en tiempo real escalable, los servidores deben tener la capacidad de enviar datos a los clientes, en lugar del pesado modelo de petición-respuesta de HTTP.
• También necesitamos estar seguros que el envío de datos trabaje de una forma escalable, mantenible, y usable desde una perspectiva de desarrollo de software
Alternativa de Solución: Node.js
• ¿Qué és?– es un entorno Javascript del lado del
servidor, basado en eventos. Node ejecuta javascript utilizando el motor V81,
– Esto permite a Node proporcionarr un entorno de ejecución del lado del servidor que compila y ejecuta javascript rápidamente
– Es código abierto, y se ejecuta en Mac OS X, Windows y Linux
1 desarrollado por Google para uso de su navegador Chrome
Node usa JS• JS actualmente es un lenguaje de programación
totalmente, tan capaz como cualquier otro lenguaje tradicional como C++, Ruby o Java.
• Además JS tiene la ventaja de poseer un excelente modelo de eventos, ideal para la programación asíncrona.
• Javascript también es un lenguaje omnipresente, conocido por millones de desarrolladores. Esto reduce la curva de aprendizaje de Node.js, ya que la mayoría de los desarrolladores no tendrán que aprender un nuevo lenguaje para empezar a construir aplicaciones usando Node.js.
Problema de conexión (memoria) con programación Asíncrona Actual• El enfoque tradicional para generar código
asíncrono es engorroso y crea un espacio en memoria no trivial para un gran número de clientes(cada cliente genera un hilo, y el uso de memoria de cada uno se suma).
• Para evitar esta ineficiencia, así como la dificultad conocida de las aplicaciones basadas en hilos, (programming threaded applications), se opta por node.js por lo siguiente:
Solución con Node.js
Módulos ExternosPor ejemplo:• Socket.io (envío y recepción de
sockets, TCP)• Express (gestiona el servidor mas
simple)• Jade (Mejorar sintáxis de HTML)• MongoDB (Base de Datos orientada a
documentos(no registros))• Node-static (Servidores para archivos
estáticos)
Servidor: Apache o Node.js?Lo mas importante de entender es que ninguno es mejor que otro, depende del caso en el que se quiera usar- Apache generalemente usa PHP, lo cual es muy fácil para
principiantes y está construído para la Web. Node js no fué construído originalemnte para ella.
• Apache y PHP son antiguos y estables. Hay mucho soporte. Node Js es relativamente nuevo y no está diseñado específicamente para desarrollo de aplicaciones Web. Web apps basadas en http son un uso de Node.js
• Famosos cms(Sistema Gestor de Contenidos) (Wordpress, Drupal, Joomla etc.) y Frameworks de desarrollo (Yii, Laravel, Code Ignitor, Cake PHP) están construídos en PHP. Muy útiles para el desarrollo y organización de código. Node Js tiene Express, socket, jade, etc. Pero son nuevos y no hay mucho soporte.
Servidor: Apache o Node.js?• Apache está basado en hilos, es decir, cada petición es
manejada por hilos o procesos separados (dependiendo de la configuración), lo cuál significa que si el proceso espera por la entrada/salida, todo el hilo es bloqueado. Node JS tiene I/O asincronas. Cada instancia nodejs se ejecuta en un hilo y debido a su naturaleza asíncrona, puede manejar muchas mas peticiones que Apache.
• Apache está basado en hilos, así que si un problema ocurre, sólo el hilo en particular será el que caiga (“crash”) y no los demás. Node Js maneja múltiples peticiones usando un sólo hilo, entonces… =/ .
• Apache no bloquea peticiones cuando tiene una petición de CPU intensivo. NodeJs bloquea está petición intensiva CPU hasta que termine. Usualmente se delega esta responsabilidad a otro proceso en Nodejs.
Servidor: Apache o Node.js?• PHP no soporta web sockets nativamente.
Hay que implementar librerías, pero un número decente de conexiones web sockets en tiempo real, se comerá todos los recursos del servidor.
• NodeJs es el candidato perfecto para la comunicación en tiempo real cominado con Socket.IO para obtener un buen servidor escalable junto con una comunicación de regreso (servidor->envía) . De peso liviano y puede incrementarse por que todo corre en un sólo hilo.
Bibliografía• http://nodejs.org/• “¿Porque Node.js?”,
http://mocionsoft.com/blog/porque-usamos-node-js/
• “Node.js Vs Apache”, http://www.quora.com/What-are-the-pros-and-cons-of-Node-js-versus-Apache-web-server