102
Caridy Patiño Search Direct Team YUI Evangelist YUI Contributor [email protected] @caridy StartTechConf 2011 Conquering the Server Side with Node.JS Saturday, November 5, 2011

Conquistando el Servidor con Node.JS

Embed Size (px)

Citation preview

Page 1: Conquistando el Servidor con Node.JS

Caridy Patiño

Search Direct TeamYUI EvangelistYUI Contributor

[email protected]@caridy

StartTechConf 2011

Conquering the Server Side with Node.JS

Saturday, November 5, 2011

Page 2: Conquistando el Servidor con Node.JS

Saturday, November 5, 2011

Page 3: Conquistando el Servidor con Node.JS

La industria esta cambiando muy rápido

Saturday, November 5, 2011

Page 4: Conquistando el Servidor con Node.JS

Chrome + V8

Saturday, November 5, 2011

Page 5: Conquistando el Servidor con Node.JS

Internet de alta velocidad

Saturday, November 5, 2011

Page 6: Conquistando el Servidor con Node.JS

Coulds / Nubes

Saturday, November 5, 2011

Page 7: Conquistando el Servidor con Node.JS

WebApps & Apps

Saturday, November 5, 2011

Page 8: Conquistando el Servidor con Node.JS

Almazenamiento Másivo

Saturday, November 5, 2011

Page 9: Conquistando el Servidor con Node.JS

La web en tiempo real

Saturday, November 5, 2011

Page 10: Conquistando el Servidor con Node.JS

Y esto se traduce en...

Saturday, November 5, 2011

Page 11: Conquistando el Servidor con Node.JS

Peaks / Picos

Saturday, November 5, 2011

Page 12: Conquistando el Servidor con Node.JS

Concurrencia

Saturday, November 5, 2011

Page 13: Conquistando el Servidor con Node.JS

Concurrencia

Saturday, November 5, 2011

Page 14: Conquistando el Servidor con Node.JS

Saturday, November 5, 2011

Page 15: Conquistando el Servidor con Node.JS

Microsoft VBScript compilation error ‘800a03e9′Out of memory/LM/W3SVC/600510919/Root/dStore/http://global.asa, line 0

Sold Out

Saturday, November 5, 2011

Page 16: Conquistando el Servidor con Node.JS

Desempeño

Saturday, November 5, 2011

Page 17: Conquistando el Servidor con Node.JS

Soluciones...

Saturday, November 5, 2011

Page 18: Conquistando el Servidor con Node.JS

Más servidores

Saturday, November 5, 2011

Page 19: Conquistando el Servidor con Node.JS

Más servidores

$$$$$

Saturday, November 5, 2011

Page 20: Conquistando el Servidor con Node.JS

Nubes Elásticas

Saturday, November 5, 2011

Page 21: Conquistando el Servidor con Node.JS

Wow Amazon EC2 Is Expensive For Start Ups

“With EC2, I would pay 30 days * 24 hours * $0.1 * 1.19 (tax) = $85. And that does not take into account backup space (S3),

traffic and true persistent storage (EBS) yet.”

Saturday, November 5, 2011

Page 22: Conquistando el Servidor con Node.JS

Delegar procesos hacia el cliente

Saturday, November 5, 2011

Page 23: Conquistando el Servidor con Node.JS

Saturday, November 5, 2011

Page 24: Conquistando el Servidor con Node.JS

Node.JS

Saturday, November 5, 2011

Page 25: Conquistando el Servidor con Node.JS

Server Side JavaScript(SSJS)

Saturday, November 5, 2011

Page 26: Conquistando el Servidor con Node.JS

RhinoWakanda Akshell

RingoJSNarwhalJS

Saturday, November 5, 2011

Page 27: Conquistando el Servidor con Node.JS

Nuestros sistemas operativos y lenguajes derivan de los sistemas diseñados para teletipos.

Saturday, November 5, 2011

Page 28: Conquistando el Servidor con Node.JS

Las plataformas modernas de software siguen imitando estas interfaces antiguas.

Saturday, November 5, 2011

Page 29: Conquistando el Servidor con Node.JS

“Blocking system call” is a call into the kernel which waits for some I/O to complete before before returning. Blocking syscalls

introduce unbounded latency into the current thread.

Saturday, November 5, 2011

Page 30: Conquistando el Servidor con Node.JS

Los procesos son buenos para mantener unidades aisladas. Sin embargo, son demasiado pesados como

para dedicarle una conexión completa.

Saturday, November 5, 2011

Page 31: Conquistando el Servidor con Node.JS

Uno de los objetivos principales de Node es hacer accesible la programación sin bloqueo para aquellos

usuario que no son expertos.Saturday, November 5, 2011

Page 32: Conquistando el Servidor con Node.JS

Node ha tenido éxito en poner servidor de alto desempeño al alcance de los programadores utilizando una API sin bloqueos

Saturday, November 5, 2011

Page 33: Conquistando el Servidor con Node.JS

Un solo stack por cada proceso

Saturday, November 5, 2011

Page 34: Conquistando el Servidor con Node.JS

Node.JS solo tiene 2.5 años de edad.

La version 0.6 es la 3ra iteración estable.

Saturday, November 5, 2011

Page 35: Conquistando el Servidor con Node.JS

Saturday, November 5, 2011

Page 36: Conquistando el Servidor con Node.JS

HTTP benchmark con 100 clientes concurrentes en OSX 10.6

- v0.2.6 5330 req/sec- v0.4.12 5552 req/sec- v0.5.10 5803 req/se

Saturday, November 5, 2011

Page 37: Conquistando el Servidor con Node.JS

Por qué Javascript?

Saturday, November 5, 2011

Page 38: Conquistando el Servidor con Node.JS

Javascript es el lenguaje del navegador

Saturday, November 5, 2011

Page 39: Conquistando el Servidor con Node.JS

Javascript es un lenguaje dinámico

Saturday, November 5, 2011

Page 40: Conquistando el Servidor con Node.JS

Closures y programación asincrónicapor naturaleza

Saturday, November 5, 2011

Page 41: Conquistando el Servidor con Node.JS

Comunidad creciente, activa y diversa

Saturday, November 5, 2011

Page 42: Conquistando el Servidor con Node.JS

http://github.com/languages

Saturday, November 5, 2011

Page 43: Conquistando el Servidor con Node.JS

No existe otro lenguaje que pueda destronar a javascript en un

future cercano

Saturday, November 5, 2011

Page 44: Conquistando el Servidor con Node.JS

Node Event Loop

Saturday, November 5, 2011

Page 45: Conquistando el Servidor con Node.JS

var result = db.query("select * from T");// use result

Saturday, November 5, 2011

Page 46: Conquistando el Servidor con Node.JS

var result = db.query("select * from T");// use result

Qué esta haciendo el software mientras se ejecuta la query?

Saturday, November 5, 2011

Page 47: Conquistando el Servidor con Node.JS

db.query("select * from T", function (result) { // use result});

Saturday, November 5, 2011

Page 48: Conquistando el Servidor con Node.JS

db.query("select * from T", function (result) { // use result});

Este código le permite al programa retornar al event loop

inmediatamente

Saturday, November 5, 2011

Page 49: Conquistando el Servidor con Node.JS

Node maneja todas los IO de la misma manera

Saturday, November 5, 2011

Page 50: Conquistando el Servidor con Node.JS

Saturday, November 5, 2011

Page 51: Conquistando el Servidor con Node.JS

Menos memoria necesita ser usada, y un mayor rendimiento debido al menor número de cambios de

contexto.

Saturday, November 5, 2011

Page 52: Conquistando el Servidor con Node.JS

El uso de los closures para capturar el estado entre diferentes eventos

Saturday, November 5, 2011

Page 53: Conquistando el Servidor con Node.JS

function adicionar(callback) { http.get(url1, function(respuesta1) { var parte1 = respuesta1.data; http.get(url2, function(respuesta2) { var parte2 = respuesta2.data; callback(parte1 + parte2); }); });}

Saturday, November 5, 2011

Page 54: Conquistando el Servidor con Node.JS

Node Stack

Saturday, November 5, 2011

Page 55: Conquistando el Servidor con Node.JS

Como usar Node

Saturday, November 5, 2011

Page 56: Conquistando el Servidor con Node.JS

Download, configure, compile, andmake install it:

http://nodejs.org/

Saturday, November 5, 2011

Page 57: Conquistando el Servidor con Node.JS

Windows Build (Node v0.6.0):

http://nodejs.org/dist/v0.6.0/node.exe

Saturday, November 5, 2011

Page 58: Conquistando el Servidor con Node.JS

NPM

http://npm.org/

Saturday, November 5, 2011

Page 59: Conquistando el Servidor con Node.JS

curl http://npmjs.org/install.sh | sh

Saturday, November 5, 2011

Page 60: Conquistando el Servidor con Node.JS

$ npm help

$ npm install <pkgName>$ npm uninstall <pkgName>$ npm publish$ npm list$ npm update

NPM 101

http://howtonode.org/introduction-to-npm

Saturday, November 5, 2011

Page 61: Conquistando el Servidor con Node.JS

$  npm  [email protected]  /Users/caridy/node/app├─┬  [email protected]  

│  ├──  [email protected]  

│  └──  [email protected]  

├─┬  [email protected]  

│  ├──  [email protected]  

│  ├──  [email protected]  

│  └──  [email protected]  

├──  micro<[email protected]­‐1  

├──  [email protected]  

├─┬  [email protected]

│  ├──  [email protected]  

│  ├──  yui3-­‐[email protected]  

│  └──  [email protected]  

└──  yui3-­‐[email protected]

Saturday, November 5, 2011

Page 62: Conquistando el Servidor con Node.JS

Express

http://expressjs.com/

Saturday, November 5, 2011

Page 63: Conquistando el Servidor con Node.JS

$ cd my/node/app/$ npm install express

Saturday, November 5, 2011

Page 64: Conquistando el Servidor con Node.JS

var app = require('express').createServer();

app.get('/usuario/:id', function(req, res){ res.send('Bienvenido ' + req.params.id);});

app.listen(3000);

Requiriendo Express NPM Module

Saturday, November 5, 2011

Page 65: Conquistando el Servidor con Node.JS

$ node app.js

Saturday, November 5, 2011

Page 66: Conquistando el Servidor con Node.JS

http://localhost:3000/usuario/caridy

Saturday, November 5, 2011

Page 67: Conquistando el Servidor con Node.JS

$ npm install -g express$ cd my/node/app/$ express ./$ npm install -d$ node app.js

Express Boilerplate

Saturday, November 5, 2011

Page 68: Conquistando el Servidor con Node.JS

YUI

Saturday, November 5, 2011

Page 69: Conquistando el Servidor con Node.JS

Saturday, November 5, 2011

Page 70: Conquistando el Servidor con Node.JS

$ npm install yui3

Saturday, November 5, 2011

Page 71: Conquistando el Servidor con Node.JS

var YUI = require("yui3").YUI;

YUI().use('json', 'io', function(Y) {

Y.io('http://yuilibrary.com/gallery/api/user/caridy', { on: { success: function(id, o) { Y.log(Y.JSON.parse(o.responseText), 'info', 'demo'); } } });

});

Requiriendo YUI NPM Module

Saturday, November 5, 2011

Page 72: Conquistando el Servidor con Node.JS

var YUI = require("yui3").YUI;

YUI().use('yql', function(Y) {

var query = ' select * from geo.states where place="Chile" and lang="es-CL" ';

Y.YQL(query, function(result) { // =result= now contains the result of the YQL Query // use the YQL Developer console to learn // what data is coming back in this object // and how that data is structured. Y.log(result, 'info', 'demo'); });

});

http://developer.yahoo.com/yql/console/#h=select%20*%20from%20geo.states%20where%20place%3D%22Chile%22%20and%20lang%3D%22es-CL%22

Requiriendo YUI NPM Module

Saturday, November 5, 2011

Page 73: Conquistando el Servidor con Node.JS

{ "query": { "count": 15, "created": "2011-10-31T15:38:44Z", "results": { "place": [ { "lang": "es-CL", "uri": "http://where.yahooapis.com/v1/place/2345028", "woeid": "2345028", "placeTypeName": { "code": "8", "content": "Región" }, "name": "Maule" }, { "lang": "es-CL", "uri": "http://where.yahooapis.com/v1/place/2345025", "woeid": "2345025", "placeTypeName": { "code": "8", "content": "Región" }, "name": "Libertador General Bernardo O'Higgins" }, { "lang": "es-CL", "uri": "http://where.yahooapis.com/v1/place/2345029", "woeid": "2345029", "placeTypeName": { "code": "8", "content": "Región" }, "name": "Santiago" } ] } }}

Saturday, November 5, 2011

Page 74: Conquistando el Servidor con Node.JS

Comprehensive unit testing solution for any JS codeYUI Test

YETI YUI Easy Testing Interface: run browser JS unit tests from console

YUI Library

YUI Gallery

Who contributes?Everyone, with committer review.

Who contributes?Everyone, with little review.

Saturday, November 5, 2011

Page 75: Conquistando el Servidor con Node.JS

Yahoo! Cocktails

Saturday, November 5, 2011

Page 76: Conquistando el Servidor con Node.JS

Saturday, November 5, 2011

Page 77: Conquistando el Servidor con Node.JS

Cocktails: Mojito

Saturday, November 5, 2011

Page 78: Conquistando el Servidor con Node.JS

Mojito es un Web Application Framework

Saturday, November 5, 2011

Page 79: Conquistando el Servidor con Node.JS

Mojits MVC

View

Controller

Model

Saturday, November 5, 2011

Page 80: Conquistando el Servidor con Node.JS

Tres tipos de scripts:

- foo.server.js- foo.common.js- foo.client.js

Saturday, November 5, 2011

Page 81: Conquistando el Servidor con Node.JS

Multiples Runtimes

Javascript on the browser

Javascript on the server

Native Bridges

iOS Android

Saturday, November 5, 2011

Page 82: Conquistando el Servidor con Node.JS

$ mojito help

$ mojito create app ./myApp$ mojito create mojit Foo$ mojito test$ mojito compile$ mojito start

Mojito Command 101

Saturday, November 5, 2011

Page 83: Conquistando el Servidor con Node.JS

Mojito Application Folder

./myApp- application.json- assets- autoload- index.js- mojits - Foo - Bar- package.json- server.js

Saturday, November 5, 2011

Page 84: Conquistando el Servidor con Node.JS

Open Source a inicios del 2012

Saturday, November 5, 2011

Page 85: Conquistando el Servidor con Node.JS

Cocktails: Manhattan

Saturday, November 5, 2011

Page 86: Conquistando el Servidor con Node.JS

Yahoo! Manhattan es un ambiente de hosting para aplicaciones basadas en Mojito que utiliza la nube de

Yahoo! para correr esas aplicaciones.

Saturday, November 5, 2011

Page 87: Conquistando el Servidor con Node.JS

Server Side: Technology Stack

Security Filters

Node.JS

Monitoring

Manhattan

Tracking

V8

Express Mustache Connect

Mojito

Mojito App

YUI Cocktails A

bstractions

Saturday, November 5, 2011

Page 88: Conquistando el Servidor con Node.JS

Yahoo! Manhattan extiende Node.JS para proveer fault-isolation & fault-tolerance, escalabilidad, disponibilidad,

seguridad y desempeño.

Saturday, November 5, 2011

Page 89: Conquistando el Servidor con Node.JS

Saturday, November 5, 2011

Page 90: Conquistando el Servidor con Node.JS

Manhattan provides a simple interface for developers to deploy, un-deploy and manage their Mojito-based

applications, leveraging the scale and performance of Yahoo!’s technology infrastructure.

Saturday, November 5, 2011

Page 91: Conquistando el Servidor con Node.JS

Desempeño

Saturday, November 5, 2011

Page 92: Conquistando el Servidor con Node.JS

Saturday, November 5, 2011

Page 93: Conquistando el Servidor con Node.JS

Saturday, November 5, 2011

Page 94: Conquistando el Servidor con Node.JS

node.js 0.4 + express + yui + mustache

Saturday, November 5, 2011

Page 95: Conquistando el Servidor con Node.JS

Apache + PHP

Node + Express + YUI + Mustache

Saturday, November 5, 2011

Page 96: Conquistando el Servidor con Node.JS

Saturday, November 5, 2011

Page 97: Conquistando el Servidor con Node.JS

Apache + PHP no crece

Saturday, November 5, 2011

Page 98: Conquistando el Servidor con Node.JS

Saturday, November 5, 2011

Page 99: Conquistando el Servidor con Node.JS

Thank [email protected]@caridy

Saturday, November 5, 2011

Page 100: Conquistando el Servidor con Node.JS

Links

• nodejs.org

• npm.org

• expressjs.com

• yuilibrary.com/projects/nodejs-yui3/

Saturday, November 5, 2011

Page 101: Conquistando el Servidor con Node.JS

http://www.slideshare.net/rhyolight/mojito-sl-2011

Más sobre Yahoo! Mojito:

Saturday, November 5, 2011