caridy patino - node-js

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

Upload: startech-conference

Post on 28-Jan-2015

155 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Caridy patino - 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: Caridy patino - node-js

Saturday, November 5, 2011

Page 3: Caridy patino - node-js

La industria esta cambiando muy rápido

Saturday, November 5, 2011

Page 4: Caridy patino - node-js

Chrome + V8

Saturday, November 5, 2011

Page 5: Caridy patino - node-js

Internet de alta velocidad

Saturday, November 5, 2011

Page 6: Caridy patino - node-js

Coulds / Nubes

Saturday, November 5, 2011

Page 7: Caridy patino - node-js

WebApps & Apps

Saturday, November 5, 2011

Page 8: Caridy patino - node-js

Almazenamiento Másivo

Saturday, November 5, 2011

Page 9: Caridy patino - node-js

La web en tiempo real

Saturday, November 5, 2011

Page 10: Caridy patino - node-js

Y esto se traduce en...

Saturday, November 5, 2011

Page 11: Caridy patino - node-js

Peaks / Picos

Saturday, November 5, 2011

Page 12: Caridy patino - node-js

Concurrencia

Saturday, November 5, 2011

Page 13: Caridy patino - node-js

Concurrencia

Saturday, November 5, 2011

Page 14: Caridy patino - node-js

Saturday, November 5, 2011

Page 15: Caridy patino - 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: Caridy patino - node-js

Desempeño

Saturday, November 5, 2011

Page 17: Caridy patino - node-js

Soluciones...

Saturday, November 5, 2011

Page 18: Caridy patino - node-js

Más servidores

Saturday, November 5, 2011

Page 19: Caridy patino - node-js

Más servidores

$$$$$

Saturday, November 5, 2011

Page 20: Caridy patino - node-js

Nubes Elásticas

Saturday, November 5, 2011

Page 21: Caridy patino - 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: Caridy patino - node-js

Delegar procesos hacia el cliente

Saturday, November 5, 2011

Page 23: Caridy patino - node-js

Saturday, November 5, 2011

Page 24: Caridy patino - node-js

Node.JS

Saturday, November 5, 2011

Page 25: Caridy patino - node-js

Server Side JavaScript(SSJS)

Saturday, November 5, 2011

Page 26: Caridy patino - node-js

RhinoWakanda Akshell

RingoJSNarwhalJS

Saturday, November 5, 2011

Page 27: Caridy patino - node-js

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

Saturday, November 5, 2011

Page 28: Caridy patino - node-js

Las plataformas modernas de software siguen imitando estas interfaces antiguas.

Saturday, November 5, 2011

Page 29: Caridy patino - 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: Caridy patino - 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: Caridy patino - 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: Caridy patino - 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: Caridy patino - node-js

Un solo stack por cada proceso

Saturday, November 5, 2011

Page 34: Caridy patino - 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: Caridy patino - node-js

Saturday, November 5, 2011

Page 36: Caridy patino - 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: Caridy patino - node-js

Por qué Javascript?

Saturday, November 5, 2011

Page 38: Caridy patino - node-js

Javascript es el lenguaje del navegador

Saturday, November 5, 2011

Page 39: Caridy patino - node-js

Javascript es un lenguaje dinámico

Saturday, November 5, 2011

Page 40: Caridy patino - node-js

Closures y programación asincrónicapor naturaleza

Saturday, November 5, 2011

Page 41: Caridy patino - node-js

Comunidad creciente, activa y diversa

Saturday, November 5, 2011

Page 42: Caridy patino - node-js

http://github.com/languages

Saturday, November 5, 2011

Page 43: Caridy patino - node-js

No existe otro lenguaje que pueda destronar a javascript en un

future cercano

Saturday, November 5, 2011

Page 44: Caridy patino - node-js

Node Event Loop

Saturday, November 5, 2011

Page 45: Caridy patino - node-js

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

Saturday, November 5, 2011

Page 46: Caridy patino - 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: Caridy patino - node-js

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

Saturday, November 5, 2011

Page 48: Caridy patino - 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: Caridy patino - node-js

Node maneja todas los IO de la misma manera

Saturday, November 5, 2011

Page 50: Caridy patino - node-js

Saturday, November 5, 2011

Page 51: Caridy patino - 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: Caridy patino - node-js

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

Saturday, November 5, 2011

Page 53: Caridy patino - 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: Caridy patino - node-js

Node Stack

Saturday, November 5, 2011

Page 55: Caridy patino - node-js

Como usar Node

Saturday, November 5, 2011

Page 56: Caridy patino - node-js

Download, configure, compile, andmake install it:

http://nodejs.org/

Saturday, November 5, 2011

Page 57: Caridy patino - node-js

Windows Build (Node v0.6.0):

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

Saturday, November 5, 2011

Page 58: Caridy patino - node-js

NPM

http://npm.org/

Saturday, November 5, 2011

Page 59: Caridy patino - node-js

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

Saturday, November 5, 2011

Page 60: Caridy patino - 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: Caridy patino - 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: Caridy patino - node-js

Express

http://expressjs.com/

Saturday, November 5, 2011

Page 63: Caridy patino - node-js

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

Saturday, November 5, 2011

Page 64: Caridy patino - 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: Caridy patino - node-js

$ node app.js

Saturday, November 5, 2011

Page 66: Caridy patino - node-js

http://localhost:3000/usuario/caridy

Saturday, November 5, 2011

Page 67: Caridy patino - 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: Caridy patino - node-js

YUI

Saturday, November 5, 2011

Page 69: Caridy patino - node-js

Saturday, November 5, 2011

Page 70: Caridy patino - node-js

$ npm install yui3

Saturday, November 5, 2011

Page 71: Caridy patino - 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: Caridy patino - 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: Caridy patino - 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: Caridy patino - 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: Caridy patino - node-js

Yahoo! Cocktails

Saturday, November 5, 2011

Page 76: Caridy patino - node-js

Saturday, November 5, 2011

Page 77: Caridy patino - node-js

Cocktails: Mojito

Saturday, November 5, 2011

Page 78: Caridy patino - node-js

Mojito es un Web Application Framework

Saturday, November 5, 2011

Page 79: Caridy patino - node-js

Mojits MVC

View

Controller

Model

Saturday, November 5, 2011

Page 80: Caridy patino - node-js

Tres tipos de scripts:

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

Saturday, November 5, 2011

Page 81: Caridy patino - node-js

Multiples Runtimes

Javascript on the browser

Javascript on the server

Native Bridges

iOS Android

Saturday, November 5, 2011

Page 82: Caridy patino - 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: Caridy patino - 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: Caridy patino - node-js

Open Source a inicios del 2012

Saturday, November 5, 2011

Page 85: Caridy patino - node-js

Cocktails: Manhattan

Saturday, November 5, 2011

Page 86: Caridy patino - 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: Caridy patino - 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: Caridy patino - 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: Caridy patino - node-js

Saturday, November 5, 2011

Page 90: Caridy patino - 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: Caridy patino - node-js

Desempeño

Saturday, November 5, 2011

Page 92: Caridy patino - node-js

Saturday, November 5, 2011

Page 93: Caridy patino - node-js

Saturday, November 5, 2011

Page 94: Caridy patino - node-js

node.js 0.4 + express + yui + mustache

Saturday, November 5, 2011

Page 95: Caridy patino - node-js

Apache + PHP

Node + Express + YUI + Mustache

Saturday, November 5, 2011

Page 96: Caridy patino - node-js

Saturday, November 5, 2011

Page 97: Caridy patino - node-js

Apache + PHP no crece

Saturday, November 5, 2011

Page 98: Caridy patino - node-js

Saturday, November 5, 2011

Page 99: Caridy patino - node-js

Thank [email protected]@caridy

Saturday, November 5, 2011

Page 100: Caridy patino - node-js

Links

• nodejs.org

• npm.org

• expressjs.com

• yuilibrary.com/projects/nodejs-yui3/

Saturday, November 5, 2011

Page 101: Caridy patino - node-js

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

Más sobre Yahoo! Mojito:

Saturday, November 5, 2011