Node.js @ Rubyslava
-
Upload
ivan-srba -
Category
Technology
-
view
1.352 -
download
3
description
Transcript of Node.js @ Rubyslava
Powerpoint Templates Page 1
Powerpoint Templates
Ivan Srba
Rubyslava, 17.5.2012
Powerpoint Templates Page 3
Prečo vzniklo node.js?
• Lebo Ryan Dahl
„Windows is very important, just like php.“
Powerpoint Templates Page 4
• I/O operácie sú drahé
L1-cache 3 cycles
L2-cache 14 cycles
RAM 250 cycles
Disk 41 000 000 cycles
Network 240 000 000 cycles
http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
• Riešenie: fork, threads
Prečo vzniklo node.js?
Powerpoint Templates Page 5
• Vlákna sú pamäťovo náročné
http://blog.webfaction.com/a-little-holiday-present
• Ďalšie problémy: deadlock
Prečo vzniklo node.js?
Powerpoint Templates Page 6
O node.js
• Serverová platforma
• Založená na Chrome JS runtime V8
• Jednovláknová
• Udalosťami riadená
• Určená pre
• Aplikácie pracujúce s veľkým množstvom dát
• Aplikácie pracujúce v reálnom čase
Powerpoint Templates Page 7
Princíp node.js
http://magnetik.github.com/node-webid-report/
Powerpoint Templates Page 8
Hello world
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 running at
http://127.0.0.1:1337/');
Powerpoint Templates Page 9
Modulárnosť
• Node Package Management, NPM
• Celkovo až 9950 modulov
• Webové frameworky, databázy, web sockety
• Parsery, TCP/IP, ladenie, I18N, ...
Powerpoint Templates Page 10
Web frameworky
• Express
• Jeden z najpoužívanejších frameworkov inšpirovaný Sinatrou
• Locomotive
• MVC framework inšpirovaný RoR
• RailwayJS
• MVC framework podobný RoR
Powerpoint Templates Page 11
Databázy
• Relačné databázy
• PostgreSQL, MySQL, MSSQL, SQLite, Oracle
• NoSQL databázy
• Mongo, Hive, Redis, CouchDB, Cassandra
• ORM
Powerpoint Templates Page 12
Web sockety
• Socket.io
• Knižnica poskytujúca univerzálne API pre vytváranie aplikácií pracujúcich v reálnom čase
• Protokoly: WebSocket, AJAX long pooling, JSONP pooling...
• Prehliadače: IE, Safari, Google, Firefox, Opera, ...
Powerpoint Templates Page 13
Použitie node.js
• PopCorm
• Kolaboratívna platforma
• Pre riešenie úloh (vzdelávanie)
• Integruje sadu kolaboratívnych nástrojov
• Textový editor, grafický editor, kategorizátor, diskusia
PopCorm
Powerpoint Templates Page 14
PopCorm
• CRUD časť aplikácie v RoR
• Kolaboratívne nástroje v node.js
• Ako databáza bolo použité MySQL
• Na produkcii sme použili webový server Nginx a Monit na testovanie dostupnosti node.js nástrojov + ich prípadný reštart
Powerpoint Templates Page 15
Prečo node.js?
• Veľké množstvo dát
• Každá zmena = nová revízia
• Potreba synchronizovať obsah v reálnom čase
• Snaha o maximálnu efektívnosť práce skupín
• AJAX nie je dostatočne rýchly/efektívny
Powerpoint Templates Page 16
Video ukážka
• Textový editor
• Etherpad Lite
• Kategorizátor
• Diskusia
Etherpad Lite: http://etherpad.org/
Powerpoint Templates Page 17
Diskusia
var app = require('express').createServer()
var io = require('socket.io').listen(app);
var settings = require("./utils/Settings");
var messageHandler = require("MessageHandler");
app.listen(settings.port);
io.sockets.on('connection', function (socket) {
socket.on('start', function(...) {
messageHandler.handleStart(...);
});
socket.on('typing-message', function(...) {
messageHandler.handleTypingMessage(...);
});
socket.on('send-message', function(...) {
messageHandler.handleNewMessage(...);
});
...
Powerpoint Templates Page 18
Prijatie novej správy
exports.handleNewMessage = function(...) {
var created_at = new Date().getTime();
socket.emit('new-message', ...);
socket.broadcast.to(socket.group_id).
emit('new-message', ...);
chatMessage.addNewChatMessage(..., logError);
if (activity_id !== null) {
userCharacteristicMatrixValue.
increaseValue(..., logError);
}
...
Powerpoint Templates Page 19
Praktické skúsenosti
• Štatistika
• Virtuálny stroj: 4 jadrá, 2GB RAM
• 50 paralelne pracujúcich používateľov
• Vyťaženie CPU: MySQL 10%, Ruby 5%, node.js <1%
• Zistenia
• Nástroje v node.js bez problémov zvládali synchronizovať obsah
• MySQL by bolo vhodné nahradiť za Redis
Powerpoint Templates Page 20
Praktické skúsenosti
• Identifikované problémy
• Museli sme riešiť veľa „zvláštnych“ problémov najmä so socket.io
• Pri produkčnom nasadení bol veľký problém s umiestnením node.js aplikácií za Nginx
• Stlačenie tlačidla ESC zrušilo vo Firefoxe socketové spojenia so serverom
• Niektoré problémy so socketmi sa prejavovali len pri kombinácii 2 a viac rôznych prehliadačov
Powerpoint Templates Page 21
Pozitíva node.js
• Javascript je veľmi vhodný pre programovanie s callbackmi (na rozdiel od Ruby)
• Rovnaký programovací jazyk na klientovi aj na serveri
• Všetko sa vykonáva asynchrónne (okrem vášho kódu)
• Vysoká produktívnosť
• Minimálna réžia (CPU, pamäť)
• Modulárnosť
Powerpoint Templates Page 22
Negatíva node.js
• „It's Fucking JavaScript“
• Problémy s produkčným nasadením
• Celková nevyspelosť technológie
• Priveľmi dynamický vývoj
• Nedostatočné technológie pre testovanie
if (typeof my_var !== "undefined" &&
my_var !== null) {}
Powerpoint Templates Page 23
Záver
• Kedy nepoužiť node.js
• Výpočtovo náročné aplikácie
• CRUD/HTML aplikácie
• Kedy použiť node.js
• JSON API
• AJAXom preplnené aplikácie
• Streamovanie dát
• Realtime aplikácie
Powerpoint Templates Page 24
Dôležité zdroje
• http://nodejs.org/
• Oficiálna stránka node.js
• http://nodeguide.com/
• Rozsiahly tutoriál pre programovanie v node.js
• http://nodetuts.com/
• Sada 30 video-tutoriálov
• http://blog.mixu.net/2011/02/01/understanding-the-
node-js-event-loop/
• Vysvetlenie procesu spracovanie udalostí
• http://search.npmjs.org/
• https://github.com/joyent/node/wiki/modules
• Registre modulov
Powerpoint Templates Page 25
Zaujímavé články
• http://www.ibm.com/developerworks/opensource/libra
ry/os-nodejs/
• Úvod do node.js
• http://simonwillison.net/2009/nov/23/node/
• Úvod do node.js
• http://radar.oreilly.com/2011/07/what-is-node.html
• Rozsiahlejší úvod spolu s dobrými príkladmi
• http://mashable.com/2011/03/10/node-js/
• Rozsiahlejší úvod spolu s dobrými príkladmi
Powerpoint Templates Page 26
Zaujímavé články
• http://teddziuba.com/2011/10/node-js-is-cancer.html
• Trochu iný pohľad na node.js
• http://blog.targeterapp.com/post/22984987832/why-
we-moved-from-nodejs-to-ror
• Prípadová štúdia, kedy autori prešli od node.js k RoR
• http://www.unlimitednovelty.com/2012/03/why-critics-
of-rails-have-it-all-wrong.html
• RoR vs. node.js