Problem
In a shared fleet one misbehaving client, such as a request of death or a traffic flood, can take down every worker and hurt all tenants. Plain sharding limits blast radius to one shard, but each shard still affects many customers.
Also known as: virtual-shards, blast-radius-partitioning
Assign each tenant a small random subset of workers so a noisy or poison tenant affects only a tiny fraction of others.
In a shared fleet one misbehaving client, such as a request of death or a traffic flood, can take down every worker and hurt all tenants. Plain sharding limits blast radius to one shard, but each shard still affects many customers.
Shuffle sharding applies combinatorics to isolation. Instead of dividing workers into a few fixed shards, each tenant gets its own random combination of workers, so overlap between any two tenants is rare. Amazon Route 53 uses it to contain denial-of-service attacks.
Choose a subset size k out of n workers, derived from a hash of the tenant id.
workers: w1 w2 w3 w4 w5 w6 w7 w8
tenant A -> w2, w7
tenant B -> w1, w5
tenant C -> w2, w5
If tenant A sends a poison request that crashes workers, only w2 and w7 fail. Tenant B is untouched. Tenant C loses w2 but keeps w5, and a retrying client simply moves to the remaining worker. With 100 workers and subsets of five, there are about 75 million combinations, so a fully shared fate is almost impossible.
Low, uses existing capacity
Medium, routing and observability per tenant
High, combinatorial reasoning
Subset too small so one tenant failure removes all its capacity
Clients do not retry across subset members
Hash collisions overlap a heavy tenant with a critical one