Functional
- Users can send messages to channels they are members of
- Messages delivered in < 500ms p99 end-to-end
- Message history up to 10,000 messages per channel
- Online/offline presence visible to channel members
- Users can be in up to 50 channels simultaneously
Non-functional
- Support 100k concurrent WebSocket connections
- Message delivery at least once (idempotent clients via sequence_number dedup)
- < 500ms delivery p99 end-to-end
- Survive a gateway server crash without losing messages in flight
- Message ordering guaranteed per channel (not globally)
Failure scenarios
- ⚡ Steady-state chat load
- ⚡ Celebrity goes live — 3x connection burst
- ⚡ Gateway server crash
- ⚡ Region A outage
Approach guide
- 1.Phase 1 — Real-Time Delivery Architecture15m
- 2.Phase 2 — Message Persistence and Ordering10m
- 3.Phase 3 — Fan-Out at Scale10m
- 4.Phase 4 — Presence System10m
- 5.Phase 5 — Availability: Gateway Server Crash15m
Full guide on the brief page.
Key numbers
- RAM per WebSocket connection64KB per connection
- Messages per day10M messages/day
- Storage per day10GB/day
- Fan-out write amplification1,000 WebSocket writes per message
- Presence heartbeat load3,333 heartbeats/s