how to develop innovative, scalable systems

55
How To Develop Innovative, Scalable Systems?

Upload: max-kossatz

Post on 10-Aug-2015

778 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: How to develop innovative, scalable systems

How To Develop Innovative, Scalable Systems?

Page 2: How to develop innovative, scalable systems
Page 3: How to develop innovative, scalable systems
Page 4: How to develop innovative, scalable systems
Page 5: How to develop innovative, scalable systems

Chat System

Page 6: How to develop innovative, scalable systems

How hard can it be?

Page 7: How to develop innovative, scalable systems

• Authentication• Slowmode• Moderator• Admins• Subscribers• Timeout• Ban• Limits per user• Notify messages• Imagelog• Unlimited Rooms

Not that easy!• IP-Ban• Raffle• Voting• Whisper• Blacklist• Block user• Posting Images• DDOS Protection• Limits per channel• Chatlog• System messages

Page 8: How to develop innovative, scalable systems

Realtime

Page 9: How to develop innovative, scalable systems
Page 10: How to develop innovative, scalable systems

No IRC!

Page 11: How to develop innovative, scalable systems
Page 12: How to develop innovative, scalable systems

WebSocket

Web Server

UI

Let’s try this

PHPMysql

Auto scaling

Page 13: How to develop innovative, scalable systems
Page 14: How to develop innovative, scalable systems

Less than 2k

Page 15: How to develop innovative, scalable systems

Back to the drawing Board!

Page 16: How to develop innovative, scalable systems
Page 17: How to develop innovative, scalable systems

WebSocket Load balancing

Permission and security model (Admin, Mods, ...)

Frontend Server Backend Server

UI

Ok, so let’s try this!

Frontend ServerNodeJs

data storageRedis Cluster

hitboxREST-API

PHPNginx

BackendServerNodeJs

Auto scalingAuto scaling

Average roundtrip / message: < 300ms

Page 18: How to develop innovative, scalable systems

• Small, cheap machines • Handle the connections, no logic• When it breaks it breaks only for a few user• Automatic Failover to another chat frontend server• Socket.io for handling websockets• Carrier for sending messages between front & back• Up & Downscale possible as needed

Frontend Server

Page 19: How to develop innovative, scalable systems

• Small, cheap machines • Handles all the logic• Stateless, can be restarted/upgraded any time• Easy expandable with new features • Up & Downscale possible as needed• Load balancing via round robin

Backend Server

Page 20: How to develop innovative, scalable systems

• Fast• I mean, REALLY fast!• You can cluster it• Easy to back up

Redis

Page 21: How to develop innovative, scalable systems

No single point of failure

Page 22: How to develop innovative, scalable systems
Page 23: How to develop innovative, scalable systems
Page 24: How to develop innovative, scalable systems

Websockets...

Page 25: How to develop innovative, scalable systems

WebSocket Load balancing

Permission and security model (Admin, Mods, ...)

Frontend Server Backend Server

UI

Ok, let’s fix Websockets

Frontend ServerNodeJs

data storageRedis Cluster

hitboxREST-API

PHPNginx

BackendServerNodeJs

Auto scaling

Auto scaling

Long Polling Fallback

FallbackServerNodeJs

Page 26: How to develop innovative, scalable systems
Page 27: How to develop innovative, scalable systems

Script Kiddies

Page 28: How to develop innovative, scalable systems
Page 29: How to develop innovative, scalable systems
Page 30: How to develop innovative, scalable systems
Page 31: How to develop innovative, scalable systems

Validate everything!

Page 32: How to develop innovative, scalable systems
Page 33: How to develop innovative, scalable systems
Page 34: How to develop innovative, scalable systems

• Frontend servers report CPU load every 10 Seconds• Lowest X frontend servers are send to the UI• UI selects a frontend server randomly from this five• If UI gets disconnected it removes server from list• UI tries another frontend server• IF no servers left UI gets X new frontend servers from API

Load Balancing

Page 35: How to develop innovative, scalable systems
Page 36: How to develop innovative, scalable systems
Page 37: How to develop innovative, scalable systems

2000 Messages/seconds

Page 38: How to develop innovative, scalable systems

Async.js for the win!

Page 39: How to develop innovative, scalable systems
Page 40: How to develop innovative, scalable systems
Page 41: How to develop innovative, scalable systems

„Self“ DDOS

Page 42: How to develop innovative, scalable systems
Page 43: How to develop innovative, scalable systems

Cache early, Cache often!

Page 44: How to develop innovative, scalable systems

Stupid Software Design

Page 45: How to develop innovative, scalable systems

Sometimes Realtime is bad!

Page 46: How to develop innovative, scalable systems
Page 47: How to develop innovative, scalable systems
Page 48: How to develop innovative, scalable systems

Monitor Everything!

Page 49: How to develop innovative, scalable systems

Etsy‘s statsd

Page 50: How to develop innovative, scalable systems
Page 51: How to develop innovative, scalable systems

So, is it Working?

Page 52: How to develop innovative, scalable systems
Page 53: How to develop innovative, scalable systems
Page 54: How to develop innovative, scalable systems

Thank [email protected]

Page 55: How to develop innovative, scalable systems

We are hiring!jobs.hitbox.tv