This is a dumping ground for specs I'm using to learn TLA+, PlusCal, and some distributed systems algorithms.
Before making this repo, I wanted to learn TLA+ for awhile. It comes up regularly in tweets and blog posts espousing its power. I got the chance during a week-long hackathon at MongoDB. On its first day, two MongoDB researchers, Murat Demirbas -- professor, principal engineer, and author of the hugely popular muratbuffalo.blogspot.com blog -- and Jesse Davis, senior staff engineer (https://emptysqua.re/blog/), gave a day-long seminar on TLA+, TLC, and PlusCal.
This has some specs from the first day of the hackathon (beans.tla, beans3.tla), the rest of that week (raft.tla), and hopefully more from later (TBD).
TLA+ is a high-level language for modeling programs and systems--especially concurrent and distributed ones. It's based on the idea that the best way to describe things precisely is with simple mathematics. TLA+ and its tools are useful for eliminating fundamental design errors, which are hard to find and expensive to correct in code.
https://lamport.azurewebsites.net/tla
Raft is a consensus algorithm for managing a replicated log. It produces a result equivalent to (multi-) Paxos, and it is as efficient as Paxos, but its structure is different from Paxos; this makes Raft more understandable than Paxos and also provides a better foundation for building practical systems.
Ongaro, Diego, and John Ousterhout. "In search of an understandable consensus algorithm." 2014 USENIX annual technical conference (USENIX ATC 14). 2014.
https://raft.github.io/raft.pdf
Cassandra is a distributed storage system for managing very large amounts of structured data spread out across many commodity servers, while providing highly available service with no single point of failure.
Lakshman, Avinash, and Prashant Malik. "Cassandra: a decentralized structured storage system." ACM SIGOPS operating systems review 44.2 (2010): 35-40.