yodlr realtime technology stack

23
@RossKukulinski WebRTC, Node.JS, and Socket.io in Production Silicon Valley Realtime October 7, 2015

Upload: ross-kukulinski

Post on 15-Apr-2017

508 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Yodlr Realtime Technology Stack

@RossKukulinski

WebRTC, Node.JS, and Socket.io in Production

Silicon Valley Realtime October 7, 2015

Page 2: Yodlr Realtime Technology Stack

@RossKukulinski

Ross Kukulinski Yodlr Founder / CEO

BayNode Organizer

nodejs Evangelist

Soccer Fanatic

[email protected]

Page 3: Yodlr Realtime Technology Stack

@RossKukulinski

Yodlr: Easy Virtual Presentations• Runs in your web browser

• No plugins or downloads

• HD voice chat

• Audio recording

• File sharing

• PDF/Powerpoint presentations

• Support for large meetings & webinars

Page 4: Yodlr Realtime Technology Stack

@RossKukulinski

Page 5: Yodlr Realtime Technology Stack

@RossKukulinski

Our Tech StackInfrastructure Database Server-Side Client-Side

Page 6: Yodlr Realtime Technology Stack

@RossKukulinski

Our Client-Side• WebRTC

• Access to microphone & speaker via browser

• Streams audio over network to our mixing service

• Socket.io

• Realtime connection to presence/chat/upload services

• We only enable websocket protocol

Page 7: Yodlr Realtime Technology Stack

@RossKukulinski

Scaling WebRTC Media

Image credit: Philipp Hancke

Page 8: Yodlr Realtime Technology Stack

@RossKukulinski

Scaling WebRTC Media

Image credit: Philipp Hancke

Page 9: Yodlr Realtime Technology Stack

@RossKukulinski

Scaling WebRTC Media

Image credit: Philipp Hancke

Page 10: Yodlr Realtime Technology Stack

@RossKukulinski

Scaling WebRTC Media

Media Server(s)

Page 11: Yodlr Realtime Technology Stack

@RossKukulinski

Socket.io & NodeJS• Socket.io

• “Real-time bidirectional event-based communication”

• Built on top of websockets (can fall back to long-polling)

• NodeJS

• Excellent at maintaining many concurrent connections

• But… Node is single threaded

• Scale by running multiple instances of your application

Page 12: Yodlr Realtime Technology Stack

@RossKukulinski

Socket.io in Production• Enable sticky load balancing if using XHR Polling or JSONP Polling

• Need a database layer if:

• Broadcast messages between clients

• Using built-in ‘rooms’ feature

• Authentication

• Authentication?

• JSON Web Token (JWT)

• Custom middleware functions

Page 13: Yodlr Realtime Technology Stack

@RossKukulinski

Socket.io Database• Defaults to a memory-store

• Redis is the ‘popular’ database store

• Note: messages are NOT persistent

• Other DB support by extending socket.io-adapter

• socket.io-rethinkdb

• socket.io-mongo last updated 2 years ago :(

Page 14: Yodlr Realtime Technology Stack

@RossKukulinski

Redis• Simple key/value store with pub-sub

• Easy to setup and build with

• FAST!

• But… HA is a pain in the neck

• Not really geared toward persistent/long-term storage

Page 15: Yodlr Realtime Technology Stack

@RossKukulinski

Our Database Layer• Long-term Storage: Mongodb

• User accounts / Credentials / Permissions

• Historical anonymized usage data

• Temporary Storage: Redis

• Realtime room data

• Socket.io persistence layer

Page 16: Yodlr Realtime Technology Stack

@RossKukulinski

Here’s a crazy idea

Page 17: Yodlr Realtime Technology Stack

@RossKukulinski

Database with persistent storage AND pub-sub

capability

Page 18: Yodlr Realtime Technology Stack

@RossKukulinski

Page 19: Yodlr Realtime Technology Stack

@RossKukulinski

Our New Tech Stack?Infrastructure Database Server-side Client-Side

Page 20: Yodlr Realtime Technology Stack

@RossKukulinski

DBaaS or self-hosted

• Mongodb hosted by ObjectRocket (Rackspace)

• Redis self-hosted

• In general: If you don’t have a DBA, go with a DBaaS

Page 21: Yodlr Realtime Technology Stack

@RossKukulinski

In an alternate universe…

• Ditch socket.io for SaaS pub/sub/message system

• e.g. PubNub, Firebase, Pusher

• Might be lower TCO, but vendor lock-in concern

Page 22: Yodlr Realtime Technology Stack

@RossKukulinski

Realtime DevOps

• Measure everything

• Statsd / Graphite / Grafana

• Deploy early & often (CI/CD)

• We LOVE Docker, Kubernetes, & CoreOS

Page 23: Yodlr Realtime Technology Stack

@RossKukulinski

Thanks!

Questions?

[email protected]