api_client
Sports Data Providers
Multiple league feeds — push boxscore + play-by-play at 6-10s intervals
⚡ 10 QPS⏱️ 200ms
microservice
DJ Workers (Node/Agenda)
Polls providers, normalizes schema, deduplicates events, dual-writes to MongoDB + Redis
⚡ 10 QPS⏱️ 100ms
database
MongoDB Read Model
Primary persistence: {tenantKey}.boxscore_live indexed by game_id. Read replicas for standings.
⚡ 5000 QPS⏱️ 15ms
cache
Redis Hot Cache
In-memory store for live game state. HSET per game_id. Sub-ms read latency for active games.
⚡ 50000 QPS⏱️ 1ms
api_gateway
GraphQL API (Node)
Multi-tenant resolver: checks Redis first, falls back to MongoDB. Field projection for mobile.
⚡ 12000 QPS⏱️ 20ms
cdn
CDN (5s TTL)
Caches passive poll responses for 5s at the edge. Absorbs 80% of 12K RPS origin load.
⚡ 50000 QPS⏱️ 5ms
api_client
Mobile Client (KMM SDK)
GameEngine polls every 20s. Realm offline persistence. Adaptive polling on game detail (1s in crunch time).
⚡ 12000 QPS0
Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.
100%