DE//AGENT
Explore
Tutorial Lesson 6 of 10 · The System Design Series community intermediate

Design resilient pipelines — retry, circuit breaker, bulkhead

Failures are inputs, not exceptions. Microsoft's pattern catalogue gives each failure shape a name and a solution — retry, circuit breaker, compensating transaction, bulkhead — and each pattern page carries the considerations that decide when it backfires. This lesson fits them to pipeline components.

At a glance

When A component fails messily and the fix needs a name before a patch; A pipeline review lists failure modes and each needs a bounded response
Where Data Engineering System Design
Why Named patterns turn failure handling from scattered try/except blocks into a reviewable design.

Learning objectives

  • Match each pipeline failure shape to its named pattern and its considerations
  • Cap retries with backoff and know when a circuit breaker replaces them
  • Use bulkheads and compensating transactions to bound blast radius

What you need

  • Lesson 5's SLO (patterns exist to defend the budget)
  • One component that fails messily today

Steps

  1. Take the catalogue as-is — Microsoft's cloud design patterns include retry, circuit breaker, compensating transaction, CQRS, event sourcing, and bulkhead, each with problem, solution, and considerations, and the collection is vendor-neutral in practice. (from ref-cloud-design-patterns )
  2. Adopt the format, not just the patterns — each pattern page states the problem/solution pair formally, the format this stage's design exercises expect, so write your pipeline's failure modes in that same pair form. (from ref-cloud-design-patterns )
  3. Fit patterns to pipeline components — the catalogue is described as directly applicable to pipeline component design, so retry belongs on the extract, the breaker on the load, and the bulkhead between tenants. (from ref-cloud-design-patterns )
  4. Give each pattern a budget to defend — Google's SRE vocabulary supplies the error budgets and incident management that decide when retries are safe and when they are a storm, and patterns without budgets multiply load exactly when the system is weakest. (from ref-sre-google )
  5. Mind the consistency of repeated work — DDIA's consistency chapter is the reason an idempotent retry is safe and a non-idempotent one is not, so pair every retry with the transaction semantics that make replaying it harmless. (from ref-ddia )

Check yourself

  • Every external call in your pipeline has a named failure policy — retry with capped attempts and backoff, breaker, or fail-fast to a DLQ.
  • You can say which pattern protects which SLO, and what the pattern's own considerations page warns about.

Worked example

Pattern decision table — from ref-cloud-design-patterns

Failure shape             -> pattern                  -> pipeline application
transient downstream err  -> Retry                    -> re-poll API; backoff + cap
cascading overload        -> Circuit breaker          -> stop hammering a sinking DW
blast radius per tenant   -> Bulkhead                 -> separate pools per domain
partial multi-step load   -> Compensating transaction -> undo a half-applied load
read/write shape mismatch -> CQRS                     -> serving table vs ingest
rebuildable state         -> Event sourcing           -> replay log to reconstruct

Sourced from

Security scan

Last sweep 2026-10-24: 0 finding(s), 0 marked as examples.

Common gotchas

  • Retries without backoff and a cap are a self-inflicted outage — the retry storm is a pattern too.
  • A circuit breaker that trips silently hides a dead dependency — alert on state, not just errors.
  • Bulkheads partition failure, not capacity — they bound blast radius, they do not add throughput.

Production considerations

  • Write the failure policy into the component's interface — callers deserve to know what happens on failure.
  • Review breaker trip counts in the weekly ops review; frequent trips mean a capacity or design problem.

Diagram

resilience patterns on a pipeline
   |
   |- extract --> flaky API    --> Retry (backoff + cap)
   |- load    --> sinking DW   --> Circuit breaker (stop hammering)
   |- tenants --> noisy neighbor--> Bulkhead (separate pools)
   |- multi-step load --> partial failure --> Compensating transaction
   |
   |- every pattern defends a budget (SLO from lesson 5)
    --> failure is an input; the pattern is the interface

Registry stats

Verification community · Oct 24, 2026
Completeness 81
Trust multiplier ×1.25
Composite 34.15 · adequate
Freshness 0 days since last source check
Difficulty intermediate
Version 0.1.0
License CC-BY-4.0
Security flags none