Muy bien, aquí escribiendo después de algún tiempo y a petición de un viejo amigo que requeria un poco de NodeJS y como funcionaba ya que la distancia nos ha alejado le dije que retomaria el blog para ayudarle un poco con sus problemas además que mis primeros post del año. De momento les explicare ¿Qué es? ¿Cómo funciona? ¿Para qué sirve?
En el transcurso de los días iremos viendo temas con pequeños ejemplos.
¿Qué es?
NodeJS es un entorno de ejecución para JavaScript construido con el motor de JavaScript V8 de Chrome.
Node usa un modelo de operaciones E/S sin bloqueo y orientado a eventos, que lo hace liviano y eficiente esta tecnología es lo que permite trabajar con Javascript del lado del servidor.
El ecosistema de paquetes NPM (node package manager) es el gestor de paquetes javascript de NodeJS por excelencia. (En la semana publicare una entrada de como funciona)
Node es un programa que puede hacer todo lo que hace Apache (con algunos
módulos), pero que también puede hacer mucho más, al ser una plataforma
JavaScript extensible desde la cual usted puede construir.
Tan importante como entender lo que Node es, tambien es importante entender lo que Node no es. Node no es simplemente un reemplazo de Apache que instantáneamente vaya
a hacer más escalable su aplicación Web PHP.
Eso no podría estar más lejos de la verdad. Node está creciendo extremadamente
rápido, la comunidad se esta involucrando bastante y rapidamente tanto así que se está creando
una gran cantidad de módulos y este crecimiento podría generar un amplio negocio muy pronto.
¿Cómo funciona?
El motor V8 de Javascript de Google está diseñado para correr en un navegador y ejecutar el código de Javascript de una forma extremadamente rápida esto permite ejecutar procesos desde el
servidor abriendo un nuevo abanico de posibilidades en cuanto al mundo
de desarrollo se refiere.
Node trabaja con un único hilo de ejecución que es el encargado de organizar todo el flujo de trabajo que se deba realizar. Node gestiona todas sus tareas de una forma asincrona para evitar que se pierda el número de tarea que va o si se bloquea por x o y razón no pierda el hilo.
Para poder trabajar de una forma óptima se delega todo el trabajo en un pool de threads. Este pool de threads esta construido con la librería libuv la cual dispone de su propio entorno multithread asíncrono. Por lo tanto Node.js envia todo el trabajo al pool.
Libuv realizará a través de alguno de sus threads el trabajo
encomentado. Una vez que el trabajo haya sido completado libuv emitirá
un evento que será recibido por Node.
Recibido el evento una función de callback se encargará de terminar de
procesarlo. Por eso cuando trabajamos con Node practicamente toda la
programación es asíncrona y se parece tanto a las clásicas llamadas AJAX.
A muchos programadores se les ha hecho creer que la programación
orientada a objetos es el diseño perfecto de programación y que no deben
usar nada más.
Node utiliza lo que se conoce como modelo de
programación orientado por eventos.
¿Para qué sirve?
Está extremadamente bien diseñado para situaciones en que usted
esté esperando una gran cantidad de tráfico y donde la lógica del lado
del servidor y el procesamiento requeridos, no sean necesariamente
grandes antes de responder al cliente.
Algunos ejemplos podrian ser:
Una API RESTful. Un servicio Web que proporcione una API RESTful toma algunos parámetros, los interpreta, arma una respuesta y descarga esa respuesta (usualmente una cantidad relativamente pequeña de texto) de vuelta al usuario. Esta es una situación ideal para Node, porque puede construirse para que maneje decenas de miles de conexiones.
Tampoco requiere una gran cantidad de lógica y básicamente sólo busca valores de una base de datos y los reúne como una respuesta. Como la respuesta es una pequeña cantidad de texto y la solicitud entrante es una pequeña cantidad de texto, el volumen de tráfico no es alto, y una máquina probablemente puede manejar las demandas de API de incluso la API de la más ocupada de las empresas.
Fila de Twitter. Piense en una compañía como Twitter que recibe tweets y los escribe en una base de datos. Literalmente hay miles de tweets llegando cada segundo y la base de datos posiblemente no puede seguir el ritmo del número de escrituras necesarias durante los horarios pico de uso. Node se convierte en una pieza clave de la solución a este problema.
Node puede manejar decenas de miles de tweets entrantes. Luego puede escribirlos rápida/fácilmente en un mecanismo de cola en memoria (memcached, por ejemplo), desde donde otro proceso separado puede escribirlos en la base de datos. El rol de Node en esto es reunir rápidamente el tweet y pasar esta información hacia otro proceso responsable de escribirlo.
Comparado con un servidor PHP normal que intente manejar escrituras en la base de datos misma, cada tweet podría causar una pequeña demora mientras se escribe en la base de datos, dado que el llamado de base de datos estaría bloqueando. Una máquina con este diseño sólo podría manejar 2.000 tweets entrantes por segundo, debido a la latencia de base de datos. A un millón de tweets por segundo, usted estaría hablando de 500 servidores. Node, en cambio, maneja cada conexión y no causa bloqueo, permitiéndole capturar tantos tweets como se le puedan arrojar. Una máquina nodo capaz de manejar 50.000 tweets por segundo, y usted estaría hablando de sólo 20 servidores.
Estadísticas de videojuegos. Si usted alguna vez jugó un juego como Call of Duty on-line, algunas cosas le habrán llamado la atención inmediatamente cuando observó las estadísticas del juego, principalmente el hecho de que deben estar rastreando toneladas de información sobre el juego para poder producir tal nivel de estadísticas. Luego, multiplique esto por los millones de personas que lo juegan en cualquier momento, y tendrá una idea de la inmensa cantidad de información que se genera con bastante rapidez. Node es una buena solución para este escenario, porque puede capturar los datos que están generando los juegos, hacer un mínimo de consolidación con ellos y luego ponerlos en una fila para escribirlos en una base de datos.
Parecería algo tonto dedicar todo un servidor a rastrear cuántas balas disparan las personas en los juegos, lo cual podría ser el límite útil si usted utilizara un servidor como Apache, pero parecería menos tonto si en lugar de ello usted pudiera dedicar un solo servidor a rastrear casi todas las estadísticas de un juego, como usted puede llegar a hacerlo con un servidor que ejecute Node.
No hay comentarios:
Publicar un comentario