Integration System Acceptance SMALL Unit Integration (maybe) COMPLEX SYSTEM Fault injection Stress / performance Canary Regression Unit Integration System Acceptance Compatibility Today
(fail by doing whatever I want) OMISSION FAILURES (fail by dropping messages) CRASH FAILURES (fail by stopping) * Stolen from Henry Robinson’s PWLSF talk Deadlocks Livelock / starvation Under specification Over specification *
PROPERTIES, & TRANSITIONS. PARTICULARLY USED IN PROTOCOLS ( TLA+, MODIST, SPIN, …) MODEL CHECKING CONSIDERED SLOW & HARD TO USE. SAFETY- CRITICAL DOMAINS ( TLA+, COQ, ISABELLE ) HUMAN ASSISTED PROOFS LIGHTWEIGHT FM BEST OF BOTH WORLDS ( ALLOY, SAT ) NOTE: THE CHOICE OF METHOD TO USE IS APPLICATION DEPENDENT
CHECKING IN ANALYSIS, DESIGN & CODING PHASES SPIN: Model of system design & requirements (properties) as input. Checker tells us if they hold. If not a counterexample is produced (system run that violates the requirement) ProMeLa (Process Meta Language) to describe models of dst systems (c-like) % MODEL CHECKING
Used a lot! LIGHTWEIGHT FM Alloy: solver that takes constraints of a model and finds structures that satisfy them Can be used both to explore the model by generating sample structures, and to check properties by generating counterexamples.
Sacrifice rigor (less certainty) for something reasonable Challenged by large state space TOP-DOWN FAULT INJECTORS, INPUT GENERATORS BOTTOM-UP LINEAGE DRIVEN FAULT INJECTORS WHITE / BLACK BOX WE KNOW (OR NOT) ABOUT THE SYSTEM
& determines if a failure could have prevented it. Molly only injects the failures it can prove might affect an outcome Counterexamples + Lineage visualizations to help you understand why BOTTOM-UP / MOLLY: LINEAGE DRIVEN FAULT INJECTION
C++ Core algorithm: 2 explicit state machines Test safety vs liveness mode. All tests start in safety & inject random failures. Tests turned to liveness mode to verify system is not deadlocked. Repeatable ! " # $
(PlusCal language - like c) Used it in 6 large complex real- world systems. 7 teams use TLA+ Found subtle bugs & confidence to make aggressive optimizations w/o sacrificing correctness Use formal specification to teach system to new engineers
tests Shim out the network & introduce artificial partitions Terraform spins up test cluster 20-100 nodes & more testing Production verification & then release Jepsen for Consul Hashicorp
VERIFY & ENHANCE Have the basics covered Then add behaviors, interactions, & fancy stuff Test the full distributed system. This means testing the client, system, AND provisioning code!
suite Master PRs Kick off a suite Dredd Tests Systems, boundaries, & integration Stacks OS + Our Images Scenario Live setup + assertions Suite Collection of scenarios INTEGRATION TESTS Run integration tests in EC2 Mock services maybe Using different AMIs helped us a lot Can you spot the problem?
verbose, & mostly awful BUT they are useful printf is still widely used as debugging Mind verbosity & configuration. Use different modes if tests repeatable
(also missing dependencies) Disk corruption happens: use file checksums to test to detect this Shorter timeouts on leases in special nodes to prevent clock drift ON ADDRESSING STATES
common source of errors so test for bad configs Remember OSDI paper: 3 nodes, 3 inputs + unit tests can reproduce 77% of failures EC2 as real as it gets (Docker, LXCs too) CONFIGURATION & SETUP
(go race detector) Static analysis tools are more common Fault injection frameworks are good but you still need understanding of baseline behavior ON TOOLS & FRAMEWORKS
client, code, & provisioning Increase tests investment as complexity increases. Easy things don’t cut it when you need certainty Invest in visibility & understanding of behavior Cost tradeoff present ACADEMIA & INDUSTRY Formal Methods when applied correctly tend to result in systems with highest integrity Conventional testing is still our foundation DST Getting it right is tricky Use multitude of methods to gain confidence Value in testing
Kingsbury, Armon Dadgar, Sean Cribbs, Sargun Dhillon, Ryan Kennedy, Mike O’Neill, Thomas Mahoney, Eric Kustarz , Bruce Spang, Neha Narula, Zeeshan Lakhani, Camille Fournier, and Greg Bako. Thank you!