Skip to content

jamrok/distributed-systems-rs

Repository files navigation

Tests Security Audit codecov

"We’ve teamed up with Kyle Kingsbury, author of Jepsen, to build this series of distributed systems challenges so you can try your hand and see how your skills stack up.

The challenges are built on top of a platform called Maelstrom, which in turn, is built on Jepsen. This platform lets you build out a “node” in your distributed system and Maelstrom will handle the routing of messages between the those nodes. This lets Maelstrom inject failures and perform verification checks based on the consistency guarantees required by each challenge."

- Fly.io

  • Implement a simple echo service that receives a specially formatted "echo" message and payload and responds to each client with an "echo_ok" response with the matching payload.
  • Implement a globally-unique ID generation system that is totally available (i.e It can continue to operate even in the face of network partitions).
  • Implement a broadcast system that gossips messages to a single node.
  • Expand on the previous solution and gossip messages between multiple nodes in a cluster with no network partitions.
  • Improve the previous solution and gossip messages between multiple nodes even when there are network partitions.
  • Optimize the solution so it works well on a slow network with and without network partitions.
  • Optimize the solution so it meets the given performance metrics.
  • Implement a custom sequentially-consistent key/value store.
    • Note: The challenge said to use a provided key/value store service, but I made my own to better understand what's involved.
  • Implement a stateless grow-only counter and have all nodes use the custom KV store to handle adding a delta to the counter and reading the correct value.
  • Ensure the solution works across multiple nodes even when there are network partitions.
  • Implement a replicated log service similar to Kafka.
  • Implement the requirements using a linearizable key/value store.
  • Ensure the solution works across multiple nodes.
  • Increase the efficiency by evaluating bottlenecks, reduce the probability of CaS failures, and use more efficient consistency models for certain operations where appropriate.
  • Implement a key/value store that supports transactions and use it to perform all the operations within the transactions on a single node.
    • The goal is to support weak consistency while also being totally available.
  • Implement Totally-Available, Read Uncommitted Transactions across multiple nodes.
  • Implement Totally-Available, Read Committed Transactions across multiple nodes.
  • Ensure the solution works when there are network partitions.

🔋 Code Coverage

About

Fly.io's Distributed Systems Challenges in Rust

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published