JEPSEN

Analyses

Over the past four years, Jepsen has analyzed over two dozen databases, coordination services, and queues—and we've found replica divergence, data loss, stale reads, lock conflicts, and much more. Here's every analysis we've published.

Aerospike2015-05-043.5.4
Cassandra2013-09-242.0.0
Chronos2015-08-102.4.0
CockroachDB2017-02-16beta-20160829
Crate2016-06-280.54.9
Elasticsearch2014-06-151.1.0
2015-04-271.5.0
etcd2014-06-090.4.1
Hazelcast2017-10-063.8.3
Kafka2013-09-240.8 beta
MariaDB Galera2015-09-0110.0
MongoDB2013-05-182.4.3
2015-04-202.6.7
2017-02-073.4.0‑rc3
NuoDB2013-09-231.2
Percona XtraDB Cluster2015-09-045.6.25
RabbitMQ2014-06-063.3.0
Redis2013-05-182.6.13
2013-12-10WAIT
RethinkDB2016-01-042.1.5
2016-01-222.2.3
Riak2013-05-191.2.1
Tendermint2017-09-050.10.2
VoltDB2016-07-126.3
Zookeeper2013-09-233.4.5

Get Tested

Would you like Jepsen to analyze your distributed system? Contact aphyr@jepsen.io for pricing.

Analyses generally take one to four months, depending on scope, and are bound by our research ethics policy. We work with your team to understand the system's guarantees, design a test for the properties you care about, and build a reproducible test harness. We then help you understand what any observed consistency anomalies mean, and work with your engineers to file bugs and develop fixes.

Jepsen can also provide assistance with your existing Jepsen tests—developing new features, performance improvements, visualizations, and more.

Techniques

Jepsen occupies a particular niche of the correctness testing landscape. We emphasize:

  • Black-box systems testing: we evaluate real binaries running on real clusters. This allows us to test systems without access to their source, and without requiring deep packet inspection, formal annotations, etc. Bugs reproduced in Jepsen are observable in production, not theoretical. However, we sacrifice some of the strengths of formal methods: tests are nondeterministic, and we cannot prove correctness, only find errors.

  • Testing under distributed systems failure modes: faulty networks, unsynchronized clocks, and partial failure. Many test suites only evaluate the behavior of healthy clusters, but production systems experience pathological failure modes. Jepsen shows behavior under strain.

  • Generative testing: we construct random operations, apply them to the system, and construct a concurrent history of their results. That history is checked against a model to establish its correctness. Generative (or property-based) tests often reveal edge cases with subtle combinations of inputs.