From telemetry to virtual failures
The practical problem begins with a hand-maintained architecture diagram. It supports discussion but ages faster than the system and is a poor input for recurring calculations. Krasnovsky’s work discovers the model automatically. Jaeger supplies observed blocking calls, deployment data supplies instance counts, and the workload profile weights user operations. The result is a versioned graph with provenance that can be rebuilt whenever topology changes.
A Monte Carlo simulation then selects a fixed fraction of failed containers repeatedly and checks whether every endpoint retains a mandatory path. The model counts surviving requests; the live benchmark counts requests without 5xx responses, socket errors, or timeouts. Edge semantics are decisive. Treating an optional or asynchronous call as blocking changes the outcome being measured and therefore changes the question the model answers.
A strong trend does not remove model limits
The experiment uses the DeathStarBench Social Network application, with deep synchronous chains, fan-out, and three weighted scenarios: home timeline, user timeline, and compose post. It compares a deployment without replicas against one where five key services have three instances. At a 0.3 failure fraction, the replicated model and live system both reach 0.3054; across ten points in the expanded matrix, correlation is roughly 0.992.
That is strong risk-ranking performance, not a certificate of exact availability. The base model assumes binary fail-stop behavior, independent failures, and static topology. It cannot see retries, latency degradation, backpressure, shared placement, a common control plane, or storage state. The estimate can therefore be pessimistic under light stress and optimistic under heavy stress as recovery mechanisms and cascading effects change the direction of the error.
From a paper to a platform loop
A follow-up experiment on OpenTelemetry Demo reconstructs the graph from individual traces and adds an asynchronous Kafka branch. Its effect depends on the SLO: fraud detection does not block the immediate order response, but it becomes mandatory if the expected outcome includes that check. Telemetry coverage alone is therefore insufficient without explicit semantics for the user journey and the boundary of a successful result.
In the open toolchain, Procrustes checks whether enough artifacts exist to build a model, Bering discovers the graph, and Sheaft simulates scenarios. The calculation can become a release gate with endpoint thresholds or a runtime dashboard reacting to topology changes. The recommended start is one critical operation: gather the observable slice, define its SLO and historical rates, rank three risks, and validate one through fault injection.
What to take away
- 01Graph simulation reduces the search space for expensive chaos experiments, but it does not prove system reliability.
- 02Calculation quality depends on both trace coverage and correct semantics for mandatory, optional, and asynchronous dependencies.
- 03High correlation can preserve risk ordering while hiding systematic error in the absolute availability estimate.
- 04The useful output is a prioritized validation backlog with explicit assumptions and recurring calibration against the live system.