Verifying Transactional Consistency with Jepsen and FaunaDB
blog.fauna.com
blog.fauna.com
> As part of our engineering process at Fauna, we have built a comprehensive suite of unit and property-based tests and as well as a sophisticated distributed testing framework that is capable of checking the behavior of FaunaDB in the presence of a wide combination of fault injections and operational changes, similar to Netflix’s Chaos Monkey.
What did you write your property testing framework in?
Our property tests are written in Scala as a Monad for controlling execution and random sample generation, and our internal distributed test harness uses Akka. This worked out nicely because we were able to make the relevant integration and fault tests scale from local runs via SBT to full geo-distributed clusters and OS-level fault injection.
However, it's difficult to quickly grasp what makes Fauna unique. A comparison with e.g. CockroachDB would be nice!
A good example of doing this well is RethinkDB, that provided two comparisons with MongoDB (one biased, one unbiased).
1. Technical comparison (unbiased):
https://rethinkdb.com/docs/comparison-tables/
2. Personal comparison (biased):
https://rethinkdb.com/docs/rethinkdb-vs-mongodb/
Consul (not a DB though) also has these comparisons:
The primary difference is in the interface (SQL vs NoSQL), the transactional protocol, and capabilities such as built-in multi-tenancy, temporality..
Might be useful to note that GV invested in both (Fauna was after Cockroach).
It can't prove strict acid because it only observes behaviour it can observe. There are code paths it won't see in practice, so the best it can do is refute.
It also can't refute acid as a whole. If you look at the reports, they usually check the very basic behaviour - simple sets and gets. While that can tell you a lot about the system, you can't say it will generalise to complicated joins, multi-row operations, backend plugins, etc.
Consistency in the ACID sense meaning something different from CAP Consistency is another good example.
This is a bit weaker than external consistency or strict serializability; Peter Bailis has a good writeup on the meaning of serializability vs strict serializability here: http://www.bailis.org/blog/linearizability-versus-serializab...