nodejs vs vertx

22
<technologies-web/> <meta name="author" content="Pierre-Emmanuel Altieri, Clément Casu, Oussama Ezzayer, Raphaël Kiffer">

Upload: quentin-apruzzese

Post on 05-Jul-2015

252 views

Category:

Technology


1 download

DESCRIPTION

Comparatif NodeJS et Vertx

TRANSCRIPT

Page 1: nodejs vs vertx

<technologies-web/>

<meta name="author" content="Pierre-Emmanuel Altieri, Clément Casu, Oussama Ezzayer, Raphaël Kiffer">

Page 2: nodejs vs vertx

Menu du jour

Page 3: nodejs vs vertx

27/05/2009 Ryan Dahl 0.1.33

Page 4: nodejs vs vertx

Ils y croient

Page 5: nodejs vs vertx

2011 Tim Fox 2.1.4

Page 6: nodejs vs vertx

Ils y croient

Page 7: nodejs vs vertx

The C10k Problem

Le c10k […] est un code numérique utilisé pour exprimer la limitation que la plupart des serveurs ont en termes de

connexions réseaux.

http://fr.wikipedia.org/wiki/C10k_problem

Page 8: nodejs vs vertx

« Origins »

Reactor

Vérification

Événement

Exécution

Callback

Requête Web ou callback

Choix de l’événement

Exécution de l’événement

Lancement de callback avec données

Page 9: nodejs vs vertx

Programmation événementielle

boucle principale

Event Loop

Page 10: nodejs vs vertx

Programmation événementielle

fs = require('fs');

var data = fs.readFileSync('file.txt')

// Le flot d’exécution est bloqué jusqu’à la fin de l’exécution

console.log(data)

fs = require('fs');

fs.readFile('file.txt', function(error, data) {

// Exécution à la fin de l’opérationconsole.log(data)});

Page 11: nodejs vs vertx

Avant/Après

Serveur

Thread Thread ThreadThread

Requête Requête RequêteRequête

Page 12: nodejs vs vertx

Avant/Après

Serveur

Thread

Requête Requête RequêteRequête

Page 13: nodejs vs vertx

Avant/Après

Page 14: nodejs vs vertx

Reactive Programming

Responsive Élastique

Event-drivenScalable

Réactif en terme d’UI

Réactif aux erreurs

Réactif aux événements

Réactif à la charge

Page 15: nodejs vs vertx

Bootstrap

var vertx = require('vertx');

vertx.createHttpServer().requestHandler(function(req) {

var file = req.path() === '/' ? 'index.html' : req.path();

req.response.sendFile('app/' + file);}).listen(8080);

console.log('Server is running');

$ node server.js

var http = require('http');

http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain‘

}); res.end('Hello World\n'); }).listen(1337, '127.0.0.1');

console.log('Server is running');

$ vertx run server.js

Page 16: nodejs vs vertx

Bootstrap

$ node server.js

var http = require('http');

http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain‘

}); res.end('Hello World\n'); }).listen(1337, '127.0.0.1');

console.log('Server is running');

$ vertx run Server.java

public class Server extends Verticle {public void start() {

vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() {

public void handle(HttpServerRequest req) {String file = req.path().equals("/") ?

"index.html" : req.path();req.response().sendFile("app/" + file);}

}).listen(8080);}

}

Page 17: nodejs vs vertx

Bootstrap

$ node server.js

var http = require('http');

http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain‘

}); res.end('Hello World\n'); }).listen(1337, '127.0.0.1');

console.log('Server is running');

$ vertx run server.rb

require "vertx"

Vertx::HttpServer.new.request_handler do |req|file = req.uri == "/" ? "index.html" : req.urireq.response.send_file "webroot/#{file}"

end.listen(8080)

Page 18: nodejs vs vertx

Bootstrap

$ node server.js

var http = require('http');

http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain‘

}); res.end('Hello World\n'); }).listen(1337, '127.0.0.1');

console.log('Server is running');

$ vertx run Server.groovy

vertx.createHttpServer().requestHandler { req ->def file = req.uri == "/" ? "index.html" : req.urireq.response.sendFile "app/$file"

}.listen(8080)

Page 19: nodejs vs vertx

Bootstrap

$ node server.js

var http = require('http');

http.createServer(function (req, res) {res.writeHead(200, {'Content-Type': 'text/plain‘

}); res.end('Hello World\n'); }).listen(1337, '127.0.0.1');

console.log('Server is running');

$ vertx run server.py

import vertx

server = vertx.create_http_server()

@server.request_handlerdef request_handler(req):

file = "index.html" if req.uri == "/" else req.urireq.response.send_file("app/%s"%file)

server.listen(8080)

Page 20: nodejs vs vertx

Versus

Environnement Modules

npm

Verticles Event Bus

Shared Data 1 processWorkflow

Page 21: nodejs vs vertx

Et les performances ?

0

200

400

600

800

1000

1200

1400

1600

1800

2000

Ajout JSON Hello World Concatenation String Fibo(30) recursif

NodeJS (tr/s) Vert.X (tr/s) NodeJS (mem) Vert.X (mem)

Page 22: nodejs vs vertx

Merci !