Top Banner
Skalerbare websocket- tjenester med Node.js
22

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

Aug 05, 2015

Download

Technology

Netthoder
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: “Hvordan levere live-oppdateringer til mange brukere samtidig med Node.js?”, Dagbladets Gunnar Fornes på NONA12

Skalerbare websocket-tjenester med Node.js

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

Prosjekt: Dagbladet Livestudio

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

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

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

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/

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

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

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

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

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

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

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

Server 1

node app.js

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

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

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

Server 1

node frontend.js

node sockets.js

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

Server 1

node frontend.js

node sockets.js

Problemet: Får fortsatt bare 10000 tilkoblinger

på EN socket-server app

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

Server 1

node frontend.js

node sockets.js

node sockets.js

node sockets.js

node sockets.js

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

Server 1

node frontend.js

node sockets.js

node sockets.js

node sockets.js

node sockets.js

Socket-server 1

Socket-server 2

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

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

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

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

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

Server 1

node frontend.js

node sockets.js

node sockets.js

node sockets.js

node sockets.js

node redis.js

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

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

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

Server

frontend x 8

socket x 8

Server

socket x 8

Server

redis

Ca 160 000 websocket-tilkoblinger

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

redis

socketx8

browsere

socketx8 socketx8 socketx8

Ca 320 000 websocket-tilkoblinger

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

redis

sockets

socketssockets

redis

socketsredis

sockets

socketssockets

sockets

redis

sockets

socketssockets

sockets

Ca 1 000 000 websocket-tilkoblinger

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

Hovedpoenget

• Websockets gir enorme muligheter for hva man kan lage

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

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