Labs
Each lab takes under an hour on a laptop and turns a claim from this mechanism into a number you measured yourself.
- 1
Measure retry amplification and a retry budget
A backend stalls for 3 seconds; clients time out and retry. Peak offered load with and without a 10% retry budget.
SimulatePython - 2
Find the metastable band
A queue whose work per request triples when it is long: healthy and degraded states at the same load, and the shed-and-ramp exit.
SimulatePython - 3
Availability ceiling and the benefit of cells
30 hard dependencies at 0.999 against a^N, soft dependencies with a fallback, and a poison tenant with no cells, 10 cells and shuffle sharding.
SimulatePython - 4
Bulkheads: one slow dependency, one shared pool
One pool of 10 threads shared by a dependency that hangs and one that is fast, against two pools of 5.
SimulatePython - 5
Gray failure: dead node versus slow node
A 200-node scatter-gather query with one dead node, one slow node, peer-relative ejection, an all-slow fleet and an eviction cap.
SimulatePython - 6
Autoscaler flapping and the effect of dead time
An autoscaler targeting 60% utilisation with a provisioning delay of 0, 2 and 5 minutes, then with hysteresis and slow scale-down.
SimulatePython - 7
Recovery time arithmetic and replay storms
Stop a queue for 60 s at ρ = 0.5, 0.8 and 0.9, time the drain, watch the catch-up overload a downstream stage, then drop stale items.
SimulatePython - 8
A circuit breaker that protects the caller
A dependency that hangs for 30 s: without a breaker every thread blocks; with one the service answers fast and recovers.
SimulatePython