Wrapped up distributed systems (eecs491) in college and loved it. There, I built a replicated, sharded key-value store with Paxos, and now am diving deeper into dist-sys patterns through Fly.io's challenges.
a series of dist-sys challenges, each one building on the last:
Echo - Getting our feet wet with the framework
Unique ID Generation - Making IDs that are actually unique across nodes
Broadcast - Making nodes talk to each other reliably
(3b) Multi-Node Broadcast
(3d) Efficient Broadcast
Grow-Only Counter - Building a CRDT (fancy distributed counter)
Kafka-Style Log - Implementing a distributed log with some Kafka-like properties
Transaction System - Building increasingly consistent distributed transactions
Each challenge has its own write-up explaining the key ideas and tradeoffs.
Finished all challenges! Started with simple echo servers, worked through message passing patterns, built CRDTs, replicated logs, and wrapped up with increasingly sophisticated distributed transaction systems - all while handling partitions and maintaining high availability. Still no silver bullets in distributed systems, but now I have a solid arsenal of patterns.
You'll need:
Go 1.20+
Maelstrom 0.2.3 (the testing framework)
Needs Java (OpenJDK)
Download from Maelstrom's releases page
Execute ./run.sh
in a challenge directory to run the tests.