Curated list of resources on testing distributed systems
See the codeList of resources on testing distributed systems curated by Andrey Satarin. If you are interested in my other stuff, check out public talks. For any questions or suggestions you can reach out to me on Twitter, Bluesky @asatarin.bsky.social or other platforms.
{% comment %} Private notes https://docs.google.com/document/d/1xHt_PK9yGMTP6JNDMydQLF4SHIdlq-BF9IZeTOXtIOg/edit {% endcomment %}
Table of Contents
These materials are not directly related to testing distributed systems, but they greatly contribute to general understanding of such systems.
State-of-the-art approach to testing stateful distributed systems.
Elle transactional consistency checker for black-box databases:
Some notable Jepsen analyses:
Jepsen is used by CockroachDB, VoltDB, Cassandra, ScyllaDB, YDB, MariaDB and others.
Companies using TLA+ to verify correctness of algorithms:
Pioneered by FoundationDB, deterministic simulation approach to testing distributed systems gained more popularity in recent years.
More companies and systems adopt deterministic simulation as a primary testing strategy:
Other collections on deterministic simulation testing:
See also autonomous testing.
This approach is currently represented by Antithesis — pioneers in autonomous testing, defining the space and the state of the art. Will Wilson (of FoundationDB fame) is one of the founders.
See also deterministic simulation, FoundationDB and fuzzing.
Netflix adopted lineage-driven fault injection techniques for testing microservices.
Netflix pioneered chaos engineering discipline.
There are two flavors of fuzzing. First, randomized concurrency testing, where the ordering of messages is fuzzed:
And input fuzzing, where message contents or user inputs are fuzzed:
See also autonomous testing.
Amazing and comprehensive overview of different strategies to test systems built with microservices by Cindy Sridharan.
Series of blog posts specifically on testing in production — best practices, pitfalls, etc:
See also benchmarking tools.
Great overview of techniques for testing distributed systems from practitioner, the video did age well and still an excellent overview of the landscape. Additional materials could be found in this GitHub repo
Colin Scott shares his viewpoint from academia on testing distributed systems, specifically regression testing for correctness and performance bugs.
See also formal methods and deterministic simulation sections.
Automated failure injection (see also Lineage-driven Fault Injection):
Random/manual failure injection testing:
See also chaos engineering and lineage-driven fault injection.
See also formal methods section.
See also deterministic simulation and autonomous testing.
They published series of blog posts on testing ScyllaDB:
See also formal methods section.
See also formal methods section.
See also formal methods section.
See also:
Formerly known as MemSQL.
Series of post on testing at VoltDB:
Additional resources:
See also:
There is also talk from Sean T. Allen on testing stream processing system at Wallaroo Labs (ex. Sendence)
See also deterministic simulation section.
See also deterministic simulation section.
See also QuickCheck, FoundationDB, Dropbox, Jepsen, deterministic simulation.
In a series of two blog posts, RisingWave team talks about their experience using deterministic simulation for testing distributed SQL-based stream processing platform:
As a result of this work, they open sourced MadSim — Magical Deterministic Simulator for the Rust language ecosystem.
See also deterministic simulation section.
See also Jepsen.
See also formal methods, chaos engineering.
See also deterministic simulation.
These examples are not about distributed systems, but they demonstrate testing concurrency and level of sophistication required in distributed systems.
Testing concurrent code is one of the challenges in single node as well as distributed systems. These tools help to test both lock based and lock-free concurrent code on various platforms.
SQLite is not a distributed system by any stretch of the imagination, but provides good example of comprehensive testing of a database implementation.
See also deterministic simulation section.
(top 24 of 73)
276 followers · starred Jan 2021
4,704 followers · starred Mar 2020
227 followers · starred May 2018
329 followers · starred Mar 2020
Curated list of resources on testing distributed systems
See the codeList of resources on testing distributed systems curated by Andrey Satarin. If you are interested in my other stuff, check out public talks. For any questions or suggestions you can reach out to me on Twitter, Bluesky @asatarin.bsky.social or other platforms.
{% comment %} Private notes https://docs.google.com/document/d/1xHt_PK9yGMTP6JNDMydQLF4SHIdlq-BF9IZeTOXtIOg/edit {% endcomment %}
Table of Contents
These materials are not directly related to testing distributed systems, but they greatly contribute to general understanding of such systems.
State-of-the-art approach to testing stateful distributed systems.
Elle transactional consistency checker for black-box databases:
Some notable Jepsen analyses:
Jepsen is used by CockroachDB, VoltDB, Cassandra, ScyllaDB, YDB, MariaDB and others.
Companies using TLA+ to verify correctness of algorithms:
Pioneered by FoundationDB, deterministic simulation approach to testing distributed systems gained more popularity in recent years.
More companies and systems adopt deterministic simulation as a primary testing strategy:
Other collections on deterministic simulation testing:
See also autonomous testing.
This approach is currently represented by Antithesis — pioneers in autonomous testing, defining the space and the state of the art. Will Wilson (of FoundationDB fame) is one of the founders.
See also deterministic simulation, FoundationDB and fuzzing.
Netflix adopted lineage-driven fault injection techniques for testing microservices.
Netflix pioneered chaos engineering discipline.
There are two flavors of fuzzing. First, randomized concurrency testing, where the ordering of messages is fuzzed:
And input fuzzing, where message contents or user inputs are fuzzed:
See also autonomous testing.
Amazing and comprehensive overview of different strategies to test systems built with microservices by Cindy Sridharan.
Series of blog posts specifically on testing in production — best practices, pitfalls, etc:
See also benchmarking tools.
Great overview of techniques for testing distributed systems from practitioner, the video did age well and still an excellent overview of the landscape. Additional materials could be found in this GitHub repo
Colin Scott shares his viewpoint from academia on testing distributed systems, specifically regression testing for correctness and performance bugs.
See also formal methods and deterministic simulation sections.
Automated failure injection (see also Lineage-driven Fault Injection):
Random/manual failure injection testing:
See also chaos engineering and lineage-driven fault injection.
See also formal methods section.
See also deterministic simulation and autonomous testing.
They published series of blog posts on testing ScyllaDB:
See also formal methods section.
See also formal methods section.
See also formal methods section.
See also:
Formerly known as MemSQL.
Series of post on testing at VoltDB:
Additional resources:
See also:
There is also talk from Sean T. Allen on testing stream processing system at Wallaroo Labs (ex. Sendence)
See also deterministic simulation section.
See also deterministic simulation section.
See also QuickCheck, FoundationDB, Dropbox, Jepsen, deterministic simulation.
In a series of two blog posts, RisingWave team talks about their experience using deterministic simulation for testing distributed SQL-based stream processing platform:
As a result of this work, they open sourced MadSim — Magical Deterministic Simulator for the Rust language ecosystem.
See also deterministic simulation section.
See also Jepsen.
See also formal methods, chaos engineering.
See also deterministic simulation.
These examples are not about distributed systems, but they demonstrate testing concurrency and level of sophistication required in distributed systems.
Testing concurrent code is one of the challenges in single node as well as distributed systems. These tools help to test both lock based and lock-free concurrent code on various platforms.
SQLite is not a distributed system by any stretch of the imagination, but provides good example of comprehensive testing of a database implementation.
See also deterministic simulation section.
(top 24 of 73)
276 followers · starred Jan 2021
4,704 followers · starred Mar 2020
227 followers · starred May 2018
329 followers · starred Mar 2020