Node.js @ Rubyslava

26
Powerpoint Templates Page 1 Powerpoint Templates Ivan Srba Rubyslava, 17.5.2012

description

Rubyslava - Programmers' Meetup in Bratislava, May 17, 2012

Transcript of Node.js @ Rubyslava

Page 1: Node.js @ Rubyslava

Powerpoint Templates Page 1

Powerpoint Templates

Ivan Srba

Rubyslava, 17.5.2012

Page 2: Node.js @ Rubyslava

Powerpoint Templates Page 2

Prívlastky node.js

Page 3: Node.js @ Rubyslava

Powerpoint Templates Page 3

Prečo vzniklo node.js?

• Lebo Ryan Dahl

„Windows is very important, just like php.“

Page 4: Node.js @ Rubyslava

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?

Page 5: Node.js @ Rubyslava

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?

Page 6: Node.js @ Rubyslava

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

Page 7: Node.js @ Rubyslava

Powerpoint Templates Page 7

Princíp node.js

http://magnetik.github.com/node-webid-report/

Page 8: Node.js @ Rubyslava

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/');

Page 9: Node.js @ Rubyslava

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, ...

Page 10: Node.js @ Rubyslava

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

Page 11: Node.js @ Rubyslava

Powerpoint Templates Page 11

Databázy

• Relačné databázy

• PostgreSQL, MySQL, MSSQL, SQLite, Oracle

• NoSQL databázy

• Mongo, Hive, Redis, CouchDB, Cassandra

• ORM

Page 12: Node.js @ Rubyslava

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, ...

Page 13: Node.js @ Rubyslava

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

Page 14: Node.js @ Rubyslava

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

Page 15: Node.js @ Rubyslava

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

Page 16: Node.js @ Rubyslava

Powerpoint Templates Page 16

Video ukážka

• Textový editor

• Etherpad Lite

• Kategorizátor

• Diskusia

Etherpad Lite: http://etherpad.org/

Page 17: Node.js @ Rubyslava

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(...);

});

...

Page 18: Node.js @ Rubyslava

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);

}

...

Page 19: Node.js @ Rubyslava

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

Page 20: Node.js @ Rubyslava

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

Page 21: Node.js @ Rubyslava

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ť

Page 22: Node.js @ Rubyslava

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) {}

Page 23: Node.js @ Rubyslava

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

Page 24: Node.js @ Rubyslava

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

Page 25: Node.js @ Rubyslava

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

Page 26: Node.js @ Rubyslava

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