Skip to content

SYSTEM Cited by 1 source

Perron (Zalando HTTP data client)

What it is

Perron (github.com/zalando-incubator/perron) is Zalando's open-source Node.js HTTP data client with built-in circuit breakers, error handling, and retries. It is the substrate the Rendering Engine uses to fetch GraphQL queries against the Fashion Store API on behalf of Renderers (Source: sources/2021-09-08-zalando-micro-frontends-from-fragments-to-renderers-part-2).

What it does

Per the Part 2 post, the Rendering Engine "uses an implementation of Perron, a data client with built-in support for circuit breakers, error handling and retries." The three capabilities named:

  • Circuit breakers — short out repeated calls to a failing dependency instead of piling up timeouts on every request. Standard pattern; Perron bakes it into the client so every caller gets it.
  • Error handling — a uniform error model across different failure classes (network timeout, 5xx, parse failure) so upstream callers don't re-implement classification.
  • Retries — retry policies attached to the client configuration rather than repeated at each call site.

Why it matters for the Rendering Engine

In a recursive entity-tree resolution model, a single page render can fan out into dozens of GraphQL queries across many Renderers (outfit page → collection carousel → outfit card → outfit view → …). If one backend dependency degrades, without a circuit breaker every Renderer waiting on that data blocks its subtree and the whole page stalls. Perron pushes the circuit-breaker decision into the client so the Rendering Engine can keep streaming HTML for Renderers whose dependencies are healthy.

Relation to the broader resilience toolbox

Perron is a Node.js-side cousin of:

  • Hystrix / resilience4j (JVM),
  • Polly (.NET),
  • the per-service-mesh circuit-breaker configuration in Envoy / Istio.

Zalando's choice to keep it as a library rather than a mesh feature is consistent with the Rendering Engine running on Node.js and talking to a single upstream aggregation layer — the circuit-breaker decision is local to the caller, not a cross-service mesh concern.

Known gaps (Part 2 post)

  • No disclosure of which circuit-breaker algorithm Perron uses (percentage-based, count-based, half-open recovery window, etc.).
  • No retry-policy examples (exponential backoff? jitter? retry-on-idempotent-only?).
  • No adoption rate outside the Rendering Engine.

Seen in

Last updated · 476 distilled / 1,218 read