We use analytics cookies.We use cookies to analyze site traffic and improve your experience.
Loading...
System Design Masterclass · Load Balancing Proxies
Free preview: the first 2 parts of this 6-part lesson.
Already bought the course? Sign in to read the whole lesson.
this lesson is part of
System Design Masterclass
Unlock this lesson and the 751 other paid lessons
$25 once, by PayPal
See the System Design courseread the rest of this lesson in
System Design Masterclass
Unlock this lesson and the 751 other paid lessons
$25 once, by PayPal
See the System Design coursein Load Balancing Proxies
This lesson is part of the full System Design Masterclass. Unlock it along with 769 other lessons for a one-time payment.
One-time payment by card or PayPal
Get Lifetime AccessOne-time payment: UPI, card or netbanking
Get Lifetime Access18 Foundation lessons are free, no payment needed. Try them now
It is easy and good
“It is really nice and good Please join the course”
The weighted routing lesson covered the mechanism: a coin per request, the statistics of a small canary, and the fact that the denominator moves during an incident.
This lesson is about what has to be true before it is safe to use it.

Running two versions at once means everything they share has to work for both, and caches, sessions, schemas and message formats are all shared by default.
The question that decides whether a split is ready is not whether the routing is configured. It is whether an old request and a new request, interleaved at random, both produce correct results against the same shared state.

New code reading old data is the direction everybody thinks about. Old code reading what the new version wrote is the one that gets missed.
Here are two versions running for real, sharing one cache and one session store.

Both failures in the top block returned 200. Nothing errored at the , nothing errored at either backend, and both responses were wrong.

This is the Vary problem from the header routing lesson, arriving through a completely different door.

A split is usually watched by comparing error rates between the two versions, and neither of these failures moves an error rate.
They show up as support tickets about prices displaying oddly and carts emptying, which nobody traces back to the rollout.

The weight is applied to each request, not to each user, so a multi-step interaction is almost guaranteed to touch both versions.

A split duplicates the code and duplicates nothing else, which is what makes it cheap and what makes it dangerous.
Make that list explicitly before a split, because it is longer than it looks. Add search indexes, feature flag stores, object storage layouts, metric names, log formats and anything a downstream consumer parses.