Build a live scoring platform where every ball event (runs, wicket, over) must reach 30M concurrent users globally within sub-second latency during World Cup finals, supporting both persistent connections and fallback polling.
Core challenge: 30M users watching the same match. A wicket falls. Every user must see it within 1 second. That's 30M push deliveries for a single event. You can't maintain 30M individual WebSocket connections on one server · you need a broadcast architecture.
Key insight: This is a broadcast problem, not a fan-out problem. All 30M users receive the SAME event. Unlike chat (personalized per user), sports scores are identical for everyone watching the same match. This means: one event ? multicast to edge servers ? each server pushes to its connected clients. No per-user fan-out needed.
Connection strategy:WebSocket for mobile apps (persistent, low overhead). SSE (Server-Sent Events) for web (simpler, HTTP-based, auto-reconnect). Long-polling as fallback. CDN-cached JSON (1s TTL) for extreme scale · polling clients get scores within 1-2s.
Failure modes:Edge server crash ? clients auto-reconnect to another server (stateless). Event source delay ? show "updating..." indicator. CDN stale ? 1s TTL means max 1s stale. 30M simultaneous reconnect (thundering herd after outage) ? exponential backoff + jitter on client.
Real-world:Cricbuzz · 30M+ during IPL/World Cup. ESPN · CDN-first with WebSocket for premium. Hotstar · 25M concurrent during cricket (similar architecture). BBC Sport · SSE for live text commentary.
Scale Estimation
Step
Derivation
Result
Design Impact
1
WebSocket servers: 30M · 500K conn/server
60 edge servers
Distributed across regions (India, UK, Aus)
2
Events per match: ~300 balls · 3 events/ball
~900 events/match
Low event rate · broadcast is the challenge, not ingestion
Each server pushes to its 500K connections in parallel
4
Polling fallback: 5M pollers · every 2s
2.5M req/sec to CDN
CDN absorbs · 1s TTL means max 1s stale
5
Bandwidth per client: ~200 bytes/event · 1 event/6s
~33 bytes/sec per client
Negligible · WebSocket overhead dominates
Interview Cheat Sheet
The 6 things to say for live broadcast design
1.Broadcast, not fan-out · all users get same event (unlike chat which is personalized) 2.Fan-out tree · 1 event ? Kafka/Redis Pub/Sub ? 60 edge servers ? 500K clients each 3.WebSocket + SSE + CDN polling · tiered delivery for different client capabilities 4.CDN with 1s TTL · absorbs polling traffic, serves near-real-time for non-WS clients 5.Stateless edge servers · client reconnects to any server (no session affinity needed) 6.Exponential backoff + jitter on reconnect · prevents thundering herd after outage