22
Skalerbare websocket- tjenester med Node.js

“Hvordan levere live-oppdateringer til mange brukere samtidig med Node.js?”, Dagbladets Gunnar Fornes på NONA12

Embed Size (px)

Citation preview

Skalerbare websocket-tjenester med Node.js

Prosjekt: Dagbladet Livestudio

Websockets

• F5 -> Ajax -> Websockets

• Websockets: Holder forbindelsen åpen

• Ajax: Ringer opp på nytt

• Kan gi oppdateringer i sanntid

• Holde samtalen / ringe opp på nytt– En annen måte å se på det:

• Å konstant holde F5-knappen nede

Eksempler

• Eksempel på websocket-tjenester:– Facebook, Twitter– Forex Trading: http://demo.kaazing.com/forex/– Spaceships:

https://developer.mozilla.org/media/uploads/demos/o/n/ondras/f1aaecf925922510753de0634542f815/just-spaceships_1336138488_demo_package/index.html

– Browserquest: http://browserquest.mozilla.org/

Andre applikasjoner som kan dra nytte av websockets

• Applikasjoner som trenger oppdateringer i sanntid

• Responsivt debattforum

• Google Docs-lignende applikasjoner– For eks for felles forside-redigering

• Live børs-oversikt

• Twitter-lignende applikasjoner

• Interaktive multiplayer-spill for web

Utvikler-verktøyene

• Node.js– Webserver/nettverksapplikasjon– Brukes av blant annet Yahoo, Ebay, Linkedin, Microsoft Azure,

Cloud9, Klout, Mockingbird

• Socket.io– Populær node-modul for å jobbe med websocket-tilkoblinger

• Redis – Gir skaleringsmuligheter– Brukes av blant annet Twitter, Digg, Disqus, Guardian,

Stackoverflow, Flickr, Yahoo, Craigslist

Hvordan bruker man verktøyene?

• Første forsøk– Oppretter en node-applikasjon (webserver)

som gjør alle oppgavene• Håndterer alle forespørsler• Håndterer alle websocket-tilkoblinger• Gjør alle lagringer/hentinger fra database

Server 1

node app.js

Bryter opp i flere node-apper

• En node-app tar seg av websocket-tilkoblinger vha Socket.io

• En node-app tar seg av frontend forespørsler – Bilder, html, javascript, css, osv, osv

Server 1

node frontend.js

node sockets.js

Server 1

node frontend.js

node sockets.js

Problemet: Får fortsatt bare 10000 tilkoblinger

på EN socket-server app

Server 1

node frontend.js

node sockets.js

node sockets.js

node sockets.js

node sockets.js

Server 1

node frontend.js

node sockets.js

node sockets.js

node sockets.js

node sockets.js

Socket-server 1

Socket-server 2

Server 1

node frontend.js

node sockets.js

node sockets.js

node sockets.js

node sockets.js

Socket-server 1

Socket-server 2

Problemet:Brukere som er tilkoblet til server 1 får ikke meldingene fra server 2,3 eller 4

Server 1

node frontend.js

node sockets.js

node sockets.js

node sockets.js

node sockets.js

Socket-server 1

Socket-server 2

Problemet:Hvordan får brukere koblet til Socket-server 1 meldinger fra Socket-server 2 ?

Redis

Server 1

node frontend.js

node sockets.js

node sockets.js

node sockets.js

node sockets.js

node redis.js

Server 1

node frontend.js

node sockets.js

node sockets.js

node sockets.js

node sockets.js

node redis.js

Ca 40 000 websocket-tilkoblinger

Server

frontend x 8

socket x 8

Server

socket x 8

Server

redis

Ca 160 000 websocket-tilkoblinger

redis

socketx8

browsere

socketx8 socketx8 socketx8

Ca 320 000 websocket-tilkoblinger

redis

sockets

socketssockets

redis

socketsredis

sockets

socketssockets

sockets

redis

sockets

socketssockets

sockets

Ca 1 000 000 websocket-tilkoblinger

Hovedpoenget

• Websockets gir enorme muligheter for hva man kan lage

• Node.js gjør det enkelt for utviklere å bygge websocket-tjenester som skalerer