Friday, August 14, 2026

How Roblox's Cache Sustained 1.38B QPS Beyond Redis Limits

Roblox's caching layer handles 1.38 billion QPS across 6,000+ Redis nodes. When Grow a Garden drove a 10x traffic surge, they survived on existing hardware with a federated architecture and smart efficiency wins.


The Redis Ceiling and How They Broke It

Redis clusters hit a practical limit at 400–500 nodes — beyond that, the Gossip protocol's internode chatter consumes too much CPU and network. AWS ElastiCache enforces this same cap.

Roblox's largest backend service needed 100 million QPS from a single logical cluster (up from 10M in three months). Their solution: a federated architecture — a client reverse proxy in front of multiple independent 400-node Redis clusters, presented as one unified service. Today that's 6,000+ nodes across 15+ clusters, scaling horizontally by simply adding more.


Zero-Downtime Migration

Migrating live production clusters used a three-stage pipeline — no application changes required:

  1. Dual-write to both old and new clusters simultaneously
  2. Read switch once TTL-bounded data reaches parity
  3. Decommission the original cluster

The proxy layer absorbed all migration complexity transparently.


Surviving a 10x Surge on Bare Metal

Grow a Garden shattered gaming CCU records — from 2.8M to 21M concurrent users in three months. Impact: 10x traffic to the largest Redis cluster, all on on-prem hardware with no cloud burst option.

They optimized both their memory-bound Redis fleet (better scheduling, reduced fragmentation) and compute-bound Envoy proxies (tighter autoscaling, leaner health checks). The biggest win: colocating both workloads on the same machines with cgroup isolation — memory-heavy Redis alongside CPU-heavy Envoy — cutting capacity needs by 25%.


Reliability at Scale

  • Hot key detection: Sampling live traffic to throttle overloaded keys before they cascade
  • Partial failure tolerance: Batched requests return partial results instead of all-or-nothing failures
  • Chaos engineering: Regular fault injection (node/rack outages, latency) in production
  • Client-side guardrails: Rate limiting and retry budgets prevent thundering herds

Key Takeaways

  1. Federate when a single component can't scale — proxy in front of multiple clusters works for caches, databases, and queues alike
  2. Dual-write migrations work beautifully for TTL-bounded data — no complex replication needed
  3. Bin-pack complementary workloads — memory-bound + CPU-bound on the same machines with cgroup isolation is free capacity
  4. Design batch operations for partial failure from day one

Next up: Roblox is building a multitenant caching service on ValKey for better cost efficiency and resource isolation.


Commentary on Roblox's engineering blog post by Sen Li, Anders Persson, Pranish Pantha, and Jeffrey Zhong (March 2026).

No comments:

Post a Comment