Source: answers/day-04-load-balancers-review.md

Day 4 Review — Load Balancers — 2026-07-24

Score: 5.95 / 9 (66%) Verdict: Regression day — but a highly diagnostic one. The MCQs and Q6 mapping were nearly perfect. The damage came from two True/False traps (Q4, Q5) and a partial answer on Q7 (JWT vs sessions). One of the T/Fs is a regression on a Day 2 concept you originally got right — spaced repetition doing its job by catching that gap.

Don't let the score alarm you: after 3 days of stacking 83–90%, small dips are normal. What matters is which concepts leaked, not the point count.


Question-by-question

Q1 (MCQ) — Modern service-mesh algorithm ✅ 1.0 / 1.0

C (P2C) — Correct. Envoy, Finagle, gRPC libs all default to Power of Two Random Choices. Knowing this exists is a real interview differentiator.

Q2 (MCQ) — Cascading health-check failure ✅ 1.0 / 1.0

B — Correct. The subtle trap most beginners miss. Shared downstreams in /healthz mean one downstream blip → all backends fail health check → LB removes everything → total outage. Rule: /healthz checks local readiness only.

Q3 (MCQ) — When sticky sessions are justified ✅ 1.0 / 1.0

B (WebSocket chat) — Correct. Connections inherently pin to a backend for their lifetime; stickiness is natural for this workload. Everywhere else, prefer stateless.

Q4 (T/F) — Slow-start with least-connections ❌ 0.0 / 1.0 ← nuance trap

Your answer: True. Correct: False.

The intuition trap:

"Least connections routes to the backend with fewest active connections. So a cold backend (0 connections) will handle the load fine."

The reality:

A cold backend with 0 active connections is exactly what least-connections identifies as the most attractive target. It will get slammed with the next N requests until its connection count catches up — but its caches are cold, its JIT hasn't warmed, its DB connection pool is empty. It'll be slow and errors will spike.

Slow-start / connection ramp-up applies with every algorithm (round robin, least connections, P2C, hash-based). It's a separate concern: give a fresh backend 1% → 5% → 20% → 100% of its fair share over 30–60 s. Envoy, NGINX, AWS ALB all support this.

Mental model: "Least connections" solves the busy-backend problem, not the cold-backend problem.

Q5 (T/F) — Bandwidth halves latency? ❌ 0.0 / 1.0 ← 🚨 REGRESSION from Day 2

Your answer: True. Correct: False.

This is the same concept as Day 2 Q4 where you answered False correctly:

(Day 2 Q4) "Adding more bandwidth to a network link will reduce the round-trip latency of a small request over that link." → You: False ✓

Today you answered True to essentially the same question flipped. That's a genuine regression, not a careless click — the concept hadn't consolidated.

Lock it in — this is a memorization prompt:

Bandwidth ≠ latency. They are orthogonal. - Bandwidth = pipe width → bytes per second → helps big transfers - Latency = round-trip time → bounded by physics (speed of light through fiber) and equipment delays - Doubling bandwidth does not halve latency. A single small packet takes the same time on a 1 Gbps link and a 10 Gbps link if the distance is the same.

Say it out loud twice: "Bandwidth is not latency. Bandwidth is not latency."

This is a lesson to trust: spaced repetition works. The gap surfaced in a low-stakes quiz today rather than a high-stakes interview next month. Now we fix it. I'm scheduling this to re-appear on Days 7 and 11.

Q6 (Short) — 5 algorithm mappings ✅ 1.0 / 1.0

All 5 correct: 1. Stateless uniform API → Round Robin ✓ 2. WebSocket long-lived → Least Connections ✓ 3. Distributed cache key locality → Consistent Hash ✓ 4. Canary 5% → Weighted Round Robin ✓ 5. gRPC service mesh → P2C ✓

Perfect. Your algorithm-choice intuition is fully in place.

Q7 (Short) — JWT vs sessions (spaced repetition from Day 1) ⚠️ 0.5 / 1.0

Your answer:

"The core difference is where the user's logged-in state is stored: server-side session cookies hold a reference key while the actual data lives in a backend database, whereas JWT bearer tokens are self-contained data packages held entirely by the client."

This is a correct description of the mechanism. It's a significant improvement over your Day 1 answer, which had the concepts scrambled. Progress: real.

But the question specifically asked for the BIGGEST TRADE-OFFS — one strength + one weakness each. You gave a differentiation, not trade-offs.

The FAANG-clean answer looks like this:

Session cookies (opaque ID + server-side store): - Strength: easy revocation — deleting the session-store row instantly logs the user out on all devices. - Weakness: requires a shared, low-latency session store (Redis, DB) — adds a network hop per request and becomes a scaling dependency.

JWT bearer tokens (self-contained, signed): - Strength: stateless verification — any service can validate the token by signature alone, no store lookup, easy across microservices. - Weakness: hard to revoke before expiry — you can't invalidate a specific token without maintaining a blocklist (which defeats the "stateless" appeal). Also XSS-vulnerable if stored in localStorage.

Bonus one-liner to memorize: "Sessions are stateful and easy to revoke; JWTs are stateless and hard to revoke."

This same concept will re-quiz on Day 25 (Auth deep dive). I want to see the trade-off framing next time.

Q8 (Scenario) — Multi-region LB hierarchy ✅ 0.75 / 1.0

Solid. Hit all four required components: - ✅ Latency-based DNS (Route 53) for global routing to eu-west - ✅ ALB for regional LB - ✅ Cross-AZ distribution - ✅ TLS termination at regional LB

Two things to add for a stronger answer:

  1. Mention Anycast as an alternative to DNS-based global routing. DNS routing has TTL issues (Day 1); Anycast IP handles global routing at the network layer — traffic goes to the nearest healthy cluster in seconds, without waiting for DNS caches to expire. FAANG interviewers love this add.

  2. East-west (service-to-service) LB inside the region. You mentioned the north-south path (user → region → AZ → app) beautifully, but a real design also has internal LBs — usually an Envoy sidecar per pod / service mesh. Mentioning this shows you understand modern microservice architecture.

  3. Minor: your HA answer was thin ("LBs scale automatically, span AZs"). Precise phrasing:

    "Cloud-managed L7 LB (ALB/GCP LB) runs multi-AZ under the hood — the control plane and data plane are fault-tolerant across zones. We get a stable DNS name; the provider handles failover in seconds. If we ran it ourselves, we'd use active-passive VRRP with a floating IP, or active-active with Anycast."

Q9 (Design) — Retry amplification post-mortem ✅ 0.7 / 1.0

Root cause diagnosis: excellent. You correctly identified: - ✅ Cascading retry amplification across both layers - ✅ Client SDK 3× × gateway 3× compounding - ✅ Connection storm + lock contention - ✅ Delayed recovery from back-pressure loop

One arithmetic slip: you wrote "up to 16x". For the described setup (3 client retries × 3 gateway retries), the ceiling is 3 × 3 = 9×, not 16×. Minor but worth being tight — FAANG interviewers do notice unit/arithmetic sloppiness.

Fixes: you got one of the three biggest, and missed the most important one.

Fix You had it? Why it matters
Retries at ONE layer only ❌ Missing This is the DIRECT root cause. The whole problem is retries at TWO layers. Remove one and the multiplier disappears.
Circuit breakers ✅ Had Correct — stops calling failing service, breaks the loop.
Retry budgets (cap retries at 10% of traffic) ❌ Missing Netflix Concurrency Limits / Google SRE pattern. Prevents runaway retry storms.
Deadline propagation ❌ Missing Each request carries a total deadline; if downstream is retrying past it, cancel.
Jittered backoff ✅ Had Good, but a smaller lever — helps thundering herd, doesn't fix amplification.
Idempotency keys ✅ Had Helpful, but doesn't reduce load — just prevents duplicate side effects.

The one-liner fix framing to use next time:

"Retries at one layer only, guarded by a circuit breaker, capped by a retry budget, bounded by a request deadline."

That's the four-legged stool of resilience.


Summary

Q Topic Score Notes
Q1 P2C algorithm 1.0
Q2 Cascading /healthz 1.0
Q3 Sticky sessions justified 1.0
Q4 Slow-start w/ least-connections 0.0 ❌ Nuance: least-conn causes cold-start problem
Q5 Bandwidth halves latency? 0.0 Regression from Day 2
Q6 5 algorithm mappings 1.0 ✅ Perfect
Q7 JWT vs sessions (spaced rep) 0.5 ⚠️ Improved understanding, but didn't answer trade-offs as asked
Q8 Multi-region LB hierarchy 0.75 ✅ All parts hit; add Anycast + service mesh
Q9 Retry amplification 0.7 ✅ Great RCA, missed "retries at one layer only"

Score progression

Day Score % Δ
Diagnostic 7.1/10 71%
Day 1 7.5/9 83% +12%
Day 2 7.5/9 83% 0
Day 3 8.15/9 90.6% +7.6%
Day 4 5.95/9 66% −24.6% ⚠️

Don't panic. Look at the pattern: - All 3 MCQs correct — your recognition is sharp. - Q6 perfect — your algorithm-choice muscle is trained. - Both misses were T/F traps designed to catch shallow reasoning — high-signal for what to lock in. - The regression on Q5 is proof spaced repetition is working — it caught the gap early.

Top 3 things to lock in tonight

  1. "Bandwidth is not latency." Say it twice out loud. Pinch yourself when you're about to answer "True" to any question of the form "more bandwidth → less latency." This will be tested again on Day 7 and Day 11.

  2. Slow-start applies with every algorithm. Least-connections doesn't solve cold-start; it causes cold-start (0 connections = most attractive target). Slow-start is a separate ramp mechanism.

  3. JWT vs sessions — the four-word cheat: "stateful & revocable vs. stateless & un-revocable." - Sessions: stateful (needs store), easy revoke (delete row). - JWT: stateless (no store), hard to revoke (need blocklist which negates the point).

Bonus: memorize the four-legged retry stool

"Retries at one layer only, guarded by a circuit breaker, capped by a retry budget, bounded by a deadline."

If you can drop that sentence in a resilience discussion, you sound senior. Bonus if you add: "and downstream retries respect the caller's remaining deadline via deadline propagation."

Weak-area queue update

Concept Origin Severity Re-quiz on Days Status
Bandwidth vs latency — cement this Day 4 Q5 (regression from Day 2 Q4) High 7, 11, 20 🚨 Escalated
Slow-start applies with every algorithm Day 4 Q4 Medium 11, 25 New
JWT vs sessions — TRADE-OFF articulation (not description) Day 4 Q7 (from Day 1 Q7) Medium 25 Still active
Retry amplification — "retries at one layer only" Day 4 Q9 Medium 21, 24 New
Anycast + service mesh in global LB designs Day 4 Q8 Low 26 New