Click here to load reader
View
99
Download
0
Embed Size (px)
Citation preview
AISI
Administración de Servidores Web: nodejs
MWS nodejs
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
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
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
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
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?
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?
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
MWS nodejs
PROFESSIONAL NODE.JS, Pedro Teixeira, John Wiley & Sons, Inc, 2013
Referencias