10

Click here to load reader

Aspectos nodejs

Embed Size (px)

Citation preview

Page 1: Aspectos nodejs

AISI

Administración de Servidores Web: nodejs

Page 2: Aspectos nodejs

MWS nodejs

nodejs

Page 3: Aspectos nodejs

MWS nodejs

Open SourceServer side javascriptV8: Javascript desarrollado por GoogleNodejs.org: “Node's goal is to provide an easy way to build scalable network programs”Event-driven, not-blocking I/O model (event-loops via callbacks de javascript)Todo se ejecuta en un único thread.

introducción

Page 4: Aspectos nodejs

MWS nodejs

JavaScript’s single threaded var http = require("http");var port = parseInt(process.argv[2]);

http.createServer(function(request, response) { console.log("Request for: " + request.url); response.writeHead(200); response.end("hello world\n");}).listen(port);

Se ejecuta igual con 1 núcleo que con 1000Para utilizar todos los núcleos disponibles; módulo cluster que permite crear una “red” de procesos que comparten puerto.

¿Cómo se distribuyen las conexiones entrantes? https://nodejs.org/api/cluster.html#cluster_cluster_schedulingpolicy

Scaling Node.js

Page 5: Aspectos nodejs

MWS nginxl var cluster = require("cluster");l var http = require("http");

var numCPUs = require("os").cpus().length;var port = parseInt(process.argv[2]);

if (cluster.isMaster) { for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on("exit", function(worker, code, signal) { cluster.fork(); });} else { http.createServer(function(request, response) { console.log("Request for: " + request.url); response.writeHead(200); response.end("hello world\n"); }).listen(port);}

scaling Node.js

Page 6: Aspectos nodejs

MWS nginx

Módulo http-proxy var proxyServer = require('http-proxy');var port = parseInt(process.argv[2]);var servers = [ { host: "localhost", port: 8081 }, { host: "localhost", port: 8080 }];proxyServer.createServer(function (req, res, proxy) {var target = servers.shift(); proxy.proxyRequest(req, res, target); servers.push(target);}).listen(port);

Scaling node.js multiserver

Page 7: Aspectos nodejs

MWS nodejs

“If #nginx isn’t sitting in front of your node server, you’re probably doing it wrong.” —Bryan Hughes on Twitterhttps://www.nginx.com/blog/5-performance-tips-for-node-js-applications/l Node.js is a great tool for creating and running

application logic that produces the core, variable content for your web page

l It’s not so great for serving static content – images and JavaScript files, for example – or load balancing across multiple servers.

l Node.js has a few weak points and vulnerabilities that can make Node.js based systems prone to ‑underperformance or even crashes. Problems arise more frequently when a Node.js based web application ‑experiences rapid traffic growth.

Nodejs: ¿solo o acompañado?

Page 8: Aspectos nodejs

MWS nodejs

Razones para usar Node.js con otro servidor al frente:l Los permisos privilegiados para el “otro”l Servidor contenido estático como imágenes, css, js, html,...

Aunque el rendimiento de Nodejs es bueno, no es normalmente mejor que Nginx (por ejemplo)

l No encargarnos de control de caché, eTags, puede recaer en el “otro” servidor web (aunque existe “ayuda” en ciertos frameworks) Si tenemos un CDN, entonces da igual

l Implementar SSL/TLS y/o HTTP/2 con el cliente, liberando a node

l Tienes a otro que controle y avise de errores en node.js, de lo contrario no se enteran hasta el timeout

l Otro servidor puede ayudar para mitigar problemas de seguridad y DoS a nodejs (Ej: CVE-2013-4450 se previene con Nginx delante de nodejs)

l Nota: Con websockets, si se usa nginx, que sea una versión reciente(>= 1.3.13)

Nodejs: ¿solo o acompañado?

Page 9: Aspectos nodejs

MWS nodejs

HTTP es un protocolo excelente para aplicaciones basadas en petición-respuesta y mecanismos pull (el cliente pide)¿Qué pasa con apps web con interactividad (push, pull/push), full-duplex, intereacción basada en mensajes entre cliente y servidor?Websocket proporciona una forma fácil de construir apps de tiempo real, dirigidas por eventos que utilice push, pull, o “streaming communications”)Ej: juegos online, chats, webRTC, stock tracking e informes de tiempo real de resultados deportivoshttps://www.nginx.com/blog/realtime-applications-nginx/

websocket

Page 10: Aspectos nodejs

MWS nodejs

PROFESSIONAL NODE.JS, Pedro Teixeira, John Wiley & Sons, Inc, 2013

Referencias