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¶
- sources/2021-09-08-zalando-micro-frontends-from-fragments-to-renderers-part-2 — canonical wiki instance. Named as the data client the Rendering Engine uses for GraphQL fetches to FSA.
Related¶
- systems/zalando-rendering-engine — the direct user of Perron at Zalando.
- systems/zalando-graphql-ubff — the Fashion Store API Perron fetches from.
- systems/graphql-dataloader — the batching/caching layer sitting alongside Perron for per-request query deduplication.
- systems/nodejs — the runtime Perron lives in.
- companies/zalando