Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Aspectos nodejs

144 views

Published on

Presentación tema 4 de la asignatura "Servidores web" del Máster Universitario en Desarrollo de Aplicaciones y Servicios Web. sobre Nodejs

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Aspectos nodejs

  1. 1. AISI Administración de Servidores Web: nodejs
  2. 2. MWS nodejs nodejs
  3. 3. MWS nodejs Open Source Server side javascript V8: Javascript desarrollado por Google Nodejs.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
  4. 4. 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 worldn"); }).listen(port); Se ejecuta igual con 1 núcleo que con 1000 Para 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_sched ulingpolicy Scaling Node.js
  5. 5. MWS nginx l 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 worldn"); }).listen(port); } scaling Node.js
  6. 6. 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
  7. 7. MWS nodejs “If #nginx isn’t sitting in front of your node server, you’re probably doing it wrong.” —Bryan Hughes on Twitter https://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?
  8. 8. 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?
  9. 9. 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 deportivos https://www.nginx.com/blog/realtime- websocket
  10. 10. MWS nodejs PROFESSIONAL NODE.JS, Pedro Teixeira, John Wiley & Sons, Inc, 2013 Referencias

×