HomeResourcesCase study
Case study

Uber Built a Router With No Router

By The SDL team·3 min read·Updated Jun 8, 2026

Ringpop puts sharding and routing inside the app nodes themselves — gossip membership and consistent hashing, no central coordinator.

Most sharding designs add a component: a router, a coordinator, a config service that knows where everything lives. Uber's Ringpop asked the opposite question — what if the application nodes themselves were the routing layer?

Uber needed application-layer sharding and request routing that self-heals as nodes come and go, without depending on a dedicated infrastructure team or a central coordinator that becomes its own bottleneck and single point of failure.

Plain English

When work is spread across many servers, something has to answer "which server handles this user?" The common approach is a central router or registry that tracks every server and routes requests. But that central piece is now a thing that can fail, a thing that must itself scale, and a thing someone has to operate.

Ringpop pushes that responsibility into the application nodes. The nodes collectively know the layout and route among themselves. There's no separate brain — the cluster is its own brain.

Now the engineering

Ringpop is a library (originally Node.js) that bakes three classic distributed-systems primitives into your app:

SWIM-style gossip membership. Nodes continuously gossip about who's alive. When one joins or dies, the news propagates peer-to-peer — no central registry to consult or keep consistent. The membership list self-heals.

Consistent hashing. Keys are mapped onto a hash ring (Uber used FarmHash with a red-black-tree ring) so that adding or removing a node relocates only that node's slice of keys, not the entire mapping. This is what makes membership churn cheap instead of catastrophic.

Request forwarding over TChannel. A request can land on any node; that node consults the ring and forwards it to the key's true owner. Clients don't need to know the topology — any node is a valid entry point.

Sharding logic that lives in the app, not in a central router consistent hash ring key → ring position → owning node SWIM gossip membership nodes detect joins/failures by gossiping — no central registry the ring self-heals as nodes come and go consistent hashing (FarmHash + RB-tree ring) a node leaving moves only its keys, not the whole map request forwarding over TChannel hit any node; it forwards to the key’s owner No infra team, no separate coordinator — the cluster organises itself.
The cluster routes itself. Gossip keeps membership current, consistent hashing localises churn, and any node can forward to the right owner — no central coordinator.

Worth knowing

Consistent hashing is the load-bearing idea, and it recurs everywhere (Discord routes channels this way; every distributed cache uses it). Its whole point: when the set of nodes changes, you want to remap the minimum number of keys. A naive hash(key) % N remaps almost everything when N changes — a stampede of data movement. Consistent hashing remaps roughly 1/N. Learn it once; you'll see it in half your teardowns.

The gap it reveals

The instinct is to solve routing with a central service. The senior realisation is that decentralised, gossip-based membership plus consistent hashing can eliminate the coordinator entirely — trading a single point of failure for a self-healing peer system. Understanding why consistent hashing (not modulo) is what makes node churn affordable is the core insight most people skip.

In the interview room

"How do requests find the right shard?" is a routing question in disguise. Mentioning consistent hashing — and why it beats hash % N (minimal key movement on membership change) — is table-stakes for senior. Going further to gossip-based membership and 'any node can forward' shows you can design a routing layer without inventing a central bottleneck.

The reframe

The reflex to add a coordinator is often the reflex to add a single point of failure. Some of the most robust systems push intelligence to the edges — letting peers organise themselves — so there's no central thing to overload or lose. Ringpop's elegance is that it has no special node; every node is ordinary, and the cluster is smart anyway.

The most reliable router is no router. Let the nodes route themselves.

Primary source →
uber.com — Ringpop: Scalable, Fault-Tolerant Application-Layer Sharding

Want feedback on your design?

Related articles