conquistando el servidor con node.js
TRANSCRIPT
Caridy Patiño
Search Direct TeamYUI EvangelistYUI Contributor
[email protected]@caridy
StartTechConf 2011
Conquering the Server Side with Node.JS
Saturday, November 5, 2011
Saturday, November 5, 2011
La industria esta cambiando muy rápido
Saturday, November 5, 2011
Chrome + V8
Saturday, November 5, 2011
Internet de alta velocidad
Saturday, November 5, 2011
Coulds / Nubes
Saturday, November 5, 2011
WebApps & Apps
Saturday, November 5, 2011
Almazenamiento Másivo
Saturday, November 5, 2011
La web en tiempo real
Saturday, November 5, 2011
Y esto se traduce en...
Saturday, November 5, 2011
Peaks / Picos
Saturday, November 5, 2011
Concurrencia
Saturday, November 5, 2011
Concurrencia
Saturday, November 5, 2011
Saturday, November 5, 2011
Microsoft VBScript compilation error ‘800a03e9′Out of memory/LM/W3SVC/600510919/Root/dStore/http://global.asa, line 0
Sold Out
Saturday, November 5, 2011
Desempeño
Saturday, November 5, 2011
Soluciones...
Saturday, November 5, 2011
Más servidores
Saturday, November 5, 2011
Más servidores
$$$$$
Saturday, November 5, 2011
Nubes Elásticas
Saturday, November 5, 2011
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
Delegar procesos hacia el cliente
Saturday, November 5, 2011
Saturday, November 5, 2011
Node.JS
Saturday, November 5, 2011
Server Side JavaScript(SSJS)
Saturday, November 5, 2011
RhinoWakanda Akshell
RingoJSNarwhalJS
Saturday, November 5, 2011
Nuestros sistemas operativos y lenguajes derivan de los sistemas diseñados para teletipos.
Saturday, November 5, 2011
Las plataformas modernas de software siguen imitando estas interfaces antiguas.
Saturday, November 5, 2011
“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
Los procesos son buenos para mantener unidades aisladas. Sin embargo, son demasiado pesados como
para dedicarle una conexión completa.
Saturday, November 5, 2011
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
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
Un solo stack por cada proceso
Saturday, November 5, 2011
Node.JS solo tiene 2.5 años de edad.
La version 0.6 es la 3ra iteración estable.
Saturday, November 5, 2011
Saturday, November 5, 2011
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
Por qué Javascript?
Saturday, November 5, 2011
Javascript es el lenguaje del navegador
Saturday, November 5, 2011
Javascript es un lenguaje dinámico
Saturday, November 5, 2011
Closures y programación asincrónicapor naturaleza
Saturday, November 5, 2011
Comunidad creciente, activa y diversa
Saturday, November 5, 2011
http://github.com/languages
Saturday, November 5, 2011
No existe otro lenguaje que pueda destronar a javascript en un
future cercano
Saturday, November 5, 2011
Node Event Loop
Saturday, November 5, 2011
var result = db.query("select * from T");// use result
Saturday, November 5, 2011
var result = db.query("select * from T");// use result
Qué esta haciendo el software mientras se ejecuta la query?
Saturday, November 5, 2011
db.query("select * from T", function (result) { // use result});
Saturday, November 5, 2011
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
Node maneja todas los IO de la misma manera
Saturday, November 5, 2011
Saturday, November 5, 2011
Menos memoria necesita ser usada, y un mayor rendimiento debido al menor número de cambios de
contexto.
Saturday, November 5, 2011
El uso de los closures para capturar el estado entre diferentes eventos
Saturday, November 5, 2011
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
Node Stack
Saturday, November 5, 2011
Como usar Node
Saturday, November 5, 2011
Download, configure, compile, andmake install it:
http://nodejs.org/
Saturday, November 5, 2011
Windows Build (Node v0.6.0):
http://nodejs.org/dist/v0.6.0/node.exe
Saturday, November 5, 2011
curl http://npmjs.org/install.sh | sh
Saturday, November 5, 2011
$ 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
$ npm [email protected] /Users/caridy/node/app├─┬ [email protected]
│ ├── [email protected]
│ └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ └── [email protected]
├── micro<[email protected]‐1
│ ├── [email protected]
│ ├── yui3-‐[email protected]
│ └── [email protected]
└── yui3-‐[email protected]
Saturday, November 5, 2011
$ cd my/node/app/$ npm install express
Saturday, November 5, 2011
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
$ node app.js
Saturday, November 5, 2011
http://localhost:3000/usuario/caridy
Saturday, November 5, 2011
$ npm install -g express$ cd my/node/app/$ express ./$ npm install -d$ node app.js
Express Boilerplate
Saturday, November 5, 2011
YUI
Saturday, November 5, 2011
Saturday, November 5, 2011
$ npm install yui3
Saturday, November 5, 2011
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
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
{ "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
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
Yahoo! Cocktails
Saturday, November 5, 2011
Saturday, November 5, 2011
Cocktails: Mojito
Saturday, November 5, 2011
Mojito es un Web Application Framework
Saturday, November 5, 2011
Mojits MVC
View
Controller
Model
Saturday, November 5, 2011
Tres tipos de scripts:
- foo.server.js- foo.common.js- foo.client.js
Saturday, November 5, 2011
Multiples Runtimes
Javascript on the browser
Javascript on the server
Native Bridges
iOS Android
Saturday, November 5, 2011
$ mojito help
$ mojito create app ./myApp$ mojito create mojit Foo$ mojito test$ mojito compile$ mojito start
Mojito Command 101
Saturday, November 5, 2011
Mojito Application Folder
./myApp- application.json- assets- autoload- index.js- mojits - Foo - Bar- package.json- server.js
Saturday, November 5, 2011
Open Source a inicios del 2012
Saturday, November 5, 2011
Cocktails: Manhattan
Saturday, November 5, 2011
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
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
Yahoo! Manhattan extiende Node.JS para proveer fault-isolation & fault-tolerance, escalabilidad, disponibilidad,
seguridad y desempeño.
Saturday, November 5, 2011
Saturday, November 5, 2011
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
Desempeño
Saturday, November 5, 2011
Saturday, November 5, 2011
Saturday, November 5, 2011
node.js 0.4 + express + yui + mustache
Saturday, November 5, 2011
Apache + PHP
Node + Express + YUI + Mustache
Saturday, November 5, 2011
Saturday, November 5, 2011
Apache + PHP no crece
Saturday, November 5, 2011
Saturday, November 5, 2011
Thank [email protected]@caridy
Saturday, November 5, 2011
Links
• nodejs.org
• npm.org
• expressjs.com
• yuilibrary.com/projects/nodejs-yui3/
Saturday, November 5, 2011
http://www.slideshare.net/rhyolight/mojito-sl-2011
Más sobre Yahoo! Mojito:
Saturday, November 5, 2011
http://video.yahoo.com/yahoonet-24189541/yodel-24697328/cocktails-in-action-27127763.html
http://video.yahoo.com/yahoonet-24189541/yodel-24697328/introducing-cocktails-from-yahoo-27127762.html
Más sobre Yahoo! Manhattan:
Saturday, November 5, 2011