The inference routing landscape: how I'd pick

Round-robin, load-aware, hash-based, or cache-aware -- which one actually fits your workload
Author
Markell Rawls
Status
Draft
Word Count
~1,200
Tags
llm-dArchitectureRoutingStrategy

TL;DR

Basically: every LLM deployment makes a routing decision, whether you meant to or not. Round-robin ignores KV cache state and wastes GPU. Load-aware helps with hotspots but still misses caches. Hash-based gives you affinity but it's rigid and breaks at scale. Cache-aware routing (what llm-d does) tracks actual KV state across pods -- order-of-magnitude TTFT improvements on prefix-heavy workloads, and it runs on any Kubernetes cluster with any GPU vendor.

The routing decision nobody talks about #

Honestly, if you're deploying LLMs, you've already made a routing decision -- you just might not know it. Sticking a basic load balancer in front of your vLLM replicas? That's a routing decision. Going through a managed API gateway? Also a routing decision. And each one carries trade-offs in cost, latency, vendor lock-in, and operational flexibility that compound as you scale.

So this post is my attempt to map the landscape: what's out there, where each approach wins, and how I'd choose based on the workload.

The four approaches #

Round-robin / random

The default. Requests get spread evenly across replicas with no awareness of what each replica has cached or how busy it is.

Load-aware routing

Sends each request to the least-busy replica, judged by queue depth, GPU utilization, or pending request count.

Hash-based routing

Hashes the prompt (or a prefix of it) and consistently maps it to the same replica.

Prefix-cache-aware routing (llm-d)

This is the interesting one. It tracks actual KV cache state across all replicas in real time and routes each request to the pod with the longest matching cached prefix, balanced against load.

Key Takeaway

The gap between approaches widens fast as prefix length grows. In illustrative comparisons at 32K tokens of shared prefix, cache-aware routing can be tens of times faster than round-robin -- the difference between waiting seconds and waiting milliseconds for the first token.

How I score these #

When I'm comparing routing approaches, I score them on five dimensions:

Cost
GPU utilization & waste
Latency
TTFT & throughput
Lock-in
Vendor dependency
Flexibility
Hardware & model support
Ecosystem
Community & partners

Vendor lock-in: the hidden cost

Proprietary inference platforms tend to bundle routing with their serving stack. Convenient today, sure -- but the day you need to switch hardware vendors, change models, or move clouds, you're rebuilding the routing layer from scratch.

llm-d runs on any Kubernetes cluster, any GPU vendor (NVIDIA, AMD, Intel), and any vLLM-supported model. The routing logic is decoupled from the infrastructure, which is kind of the whole point.

Hardware flexibility

GPU generations keep turning over, and new accelerators keep showing up (NVIDIA B200, AMD MI325X, Intel Gaudi 3). Your routing layer shouldn't be tied to one vendor's SDK. llm-d sticks to standard Kubernetes primitives -- pods, services, endpoints -- so it works across any hardware.

The short version for your boss #

If someone just needs the summary:

The question isn't "which routing is fastest?" It's "which one lets us scale without locking us in, works across GPU vendors, and has a community behind it?" Speed matters -- llm-d delivers dramatic TTFT improvements on prefix-heavy workloads -- but the real win is everything that comes with it.
Key Takeaway

Vendor lock-in is the hidden cost of proprietary inference platforms. llm-d runs on any Kubernetes cluster, any GPU vendor, and any vLLM-supported model -- so your options stay open as hardware evolves.

How to choose #

Here's the decision tree I actually use:

  1. Are your prompts short and uniform? Round-robin is fine. Don't over-engineer.
  2. Do you have prefix sharing? (Multi-turn, agents, document Q&A) --> You need cache-aware routing.
  3. Are you on multiple GPU vendors? --> Avoid vendor-specific routing. Use Kubernetes-native.
  4. Do you need multi-tenant isolation? --> llm-d supports per-namespace routing policies on OpenShift.

Try the interactive comparison #

I also built an interactive deck that puts the approaches side by side -- animated request flows, architecture stacks, illustrative TTFT curves, and workload fit ratings. Easier to poke at than to read about.