SlideShare uma empresa Scribd logo
1 de 22
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/ond
  – 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

                              Socket-server 1

           node frontend.js


                              Socket-server 2
           node sockets.js


           node sockets.js


           node sockets.js


           node sockets.js
Server 1

                                    Socket-server 1

           node frontend.js


                                    Socket-server 2
           node sockets.js


           node sockets.js

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

                                    Socket-server 1

           node frontend.js


                                    Socket-server 2
           node sockets.js


           node sockets.js


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


                                        Redis
Server 1



    node frontend.js




    node sockets.js


    node sockets.js
                       node redis.js

    node sockets.js


    node sockets.js
Server 1



    node frontend.js




    node sockets.js


    node sockets.js
                                       node redis.js

    node sockets.js


    node sockets.js




             Ca 40 000 websocket-tilkoblinger
Server


                  frontend x 8




                         redis




Server                           Server


   socket x 8                       socket x 8



         Ca 160 000 websocket-tilkoblinger
redis




  socketx8 socketx8 socketx8 socketx8




             browsere


Ca 320 000 websocket-tilkoblinger
redis



                                                            redis
          redis
                                      redis                 sockets
          sockets                                 sockets
sockets                                                       sockets
                                      sockets          sockets
            sockets
     sockets                sockets
                                        sockets
                                 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
“Hvordan levere live-oppdateringer til mange brukere samtidig med Node.js?”, Dagbladets Gunnar Fornes på NONA12

Mais conteúdo relacionado

Mais de Netthoder

Silkeveiene adresseavisen
Silkeveiene   adresseavisenSilkeveiene   adresseavisen
Silkeveiene adresseavisenNetthoder
 
Nrk analyseverktøy
Nrk analyseverktøyNrk analyseverktøy
Nrk analyseverktøyNetthoder
 
Aftenposten spydspissprosjekt
Aftenposten spydspissprosjektAftenposten spydspissprosjekt
Aftenposten spydspissprosjektNetthoder
 
Fem grunner til at vi ikke har mediekrise
Fem grunner til at vi ikke har mediekriseFem grunner til at vi ikke har mediekrise
Fem grunner til at vi ikke har mediekriseNetthoder
 
NONA13: Nettprisene 2013 - årets nettsak, årets netthode og hederlige omtaler
NONA13: Nettprisene 2013 - årets nettsak, årets netthode og hederlige omtalerNONA13: Nettprisene 2013 - årets nettsak, årets netthode og hederlige omtaler
NONA13: Nettprisene 2013 - årets nettsak, årets netthode og hederlige omtalerNetthoder
 
Digital graving - John Bones i SKUP / VG
Digital graving - John Bones i SKUP / VGDigital graving - John Bones i SKUP / VG
Digital graving - John Bones i SKUP / VGNetthoder
 
Paal Nisja om Nettavisens digitale tjenester
Paal Nisja om Nettavisens digitale tjenesterPaal Nisja om Nettavisens digitale tjenester
Paal Nisja om Nettavisens digitale tjenesterNetthoder
 
VGs Nina Schmidt om nysatsningen Dyrebar
VGs Nina Schmidt om nysatsningen DyrebarVGs Nina Schmidt om nysatsningen Dyrebar
VGs Nina Schmidt om nysatsningen DyrebarNetthoder
 
Erik Bolstad, NRKs valgomat for kommunevalget
Erik Bolstad, NRKs valgomat for kommunevalgetErik Bolstad, NRKs valgomat for kommunevalget
Erik Bolstad, NRKs valgomat for kommunevalgetNetthoder
 
Schibsted: Shaping the media of tomorrow today
Schibsted: Shaping the media of tomorrow todaySchibsted: Shaping the media of tomorrow today
Schibsted: Shaping the media of tomorrow todayNetthoder
 
Journalistikk med leserne 1
Journalistikk med leserne 1Journalistikk med leserne 1
Journalistikk med leserne 1Netthoder
 

Mais de Netthoder (11)

Silkeveiene adresseavisen
Silkeveiene   adresseavisenSilkeveiene   adresseavisen
Silkeveiene adresseavisen
 
Nrk analyseverktøy
Nrk analyseverktøyNrk analyseverktøy
Nrk analyseverktøy
 
Aftenposten spydspissprosjekt
Aftenposten spydspissprosjektAftenposten spydspissprosjekt
Aftenposten spydspissprosjekt
 
Fem grunner til at vi ikke har mediekrise
Fem grunner til at vi ikke har mediekriseFem grunner til at vi ikke har mediekrise
Fem grunner til at vi ikke har mediekrise
 
NONA13: Nettprisene 2013 - årets nettsak, årets netthode og hederlige omtaler
NONA13: Nettprisene 2013 - årets nettsak, årets netthode og hederlige omtalerNONA13: Nettprisene 2013 - årets nettsak, årets netthode og hederlige omtaler
NONA13: Nettprisene 2013 - årets nettsak, årets netthode og hederlige omtaler
 
Digital graving - John Bones i SKUP / VG
Digital graving - John Bones i SKUP / VGDigital graving - John Bones i SKUP / VG
Digital graving - John Bones i SKUP / VG
 
Paal Nisja om Nettavisens digitale tjenester
Paal Nisja om Nettavisens digitale tjenesterPaal Nisja om Nettavisens digitale tjenester
Paal Nisja om Nettavisens digitale tjenester
 
VGs Nina Schmidt om nysatsningen Dyrebar
VGs Nina Schmidt om nysatsningen DyrebarVGs Nina Schmidt om nysatsningen Dyrebar
VGs Nina Schmidt om nysatsningen Dyrebar
 
Erik Bolstad, NRKs valgomat for kommunevalget
Erik Bolstad, NRKs valgomat for kommunevalgetErik Bolstad, NRKs valgomat for kommunevalget
Erik Bolstad, NRKs valgomat for kommunevalget
 
Schibsted: Shaping the media of tomorrow today
Schibsted: Shaping the media of tomorrow todaySchibsted: Shaping the media of tomorrow today
Schibsted: Shaping the media of tomorrow today
 
Journalistikk med leserne 1
Journalistikk med leserne 1Journalistikk med leserne 1
Journalistikk med leserne 1
 

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

  • 3. 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
  • 4. Eksempler • Eksempel på websocket-tjenester: – Facebook, Twitter – Forex Trading: http://demo.kaazing.com/forex/ – Spaceships: https://developer.mozilla.org/media/uploads/demos/o/n/ond – Browserquest: http://browserquest.mozilla.org/
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. Server 1 node app.js
  • 9. 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
  • 10. Server 1 node frontend.js node sockets.js
  • 11. Server 1 node frontend.js node sockets.js Problemet: Får fortsatt bare 10000 tilkoblinger på EN socket-server app
  • 12. Server 1 node frontend.js node sockets.js node sockets.js node sockets.js node sockets.js
  • 13. Server 1 Socket-server 1 node frontend.js Socket-server 2 node sockets.js node sockets.js node sockets.js node sockets.js
  • 14. Server 1 Socket-server 1 node frontend.js Socket-server 2 node sockets.js node sockets.js Problemet: node sockets.js Brukere som er tilkoblet til server 1 får ikke meldingene fra server 2,3 node sockets.js eller 4
  • 15. Server 1 Socket-server 1 node frontend.js Socket-server 2 node sockets.js node sockets.js node sockets.js Problemet: Hvordan får brukere koblet til Socket-server 1 meldinger fra node sockets.js Socket-server 2 ? Redis
  • 16. Server 1 node frontend.js node sockets.js node sockets.js node redis.js node sockets.js node sockets.js
  • 17. Server 1 node frontend.js node sockets.js node sockets.js node redis.js node sockets.js node sockets.js Ca 40 000 websocket-tilkoblinger
  • 18. Server frontend x 8 redis Server Server socket x 8 socket x 8 Ca 160 000 websocket-tilkoblinger
  • 19. redis socketx8 socketx8 socketx8 socketx8 browsere Ca 320 000 websocket-tilkoblinger
  • 20. redis redis redis redis sockets sockets sockets sockets sockets sockets sockets sockets sockets sockets sockets sockets Ca 1 000 000 websocket-tilkoblinger
  • 21. Hovedpoenget • Websockets gir enorme muligheter for hva man kan lage • Node.js gjør det enkelt for utviklere å bygge websocket-tjenester som skalerer