---
title: "Fly.io Distributed Systems Challenge"
---

# Gossip Glomers

A series of distributed systems challenges brought to you by Fly.io.

[Let’s Get Started](https://fly.io/dist-sys/1)

We’ve teamed up with [Kyle Kingsbury](https://aphyr.com/about), author of [Jepsen](https://jepsen.io/), 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](https://github.com/jepsen-io/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.

The documentation for these challenges will be in [Go](https://golang.org/), however, Maelstrom is language agnostic so you can rework these challenges in any programming language.

## Got Stuck? Need Help?

It’s no secret that distributed systems are infuriating and difficult. Even the best developers in the world can be brought to their knees in the face of cluster failures. If you get stuck on these challenges or want to see how other folks are solving them, checkout the [#dist-sys-challenge](https://community.fly.io/tag/dist-sys-challenge) tag on the [Fly.io Community Discourse](https://community.fly.io/).

## Let’s get started

Can’t wait to start? The [Echo challenge](https://fly.io/dist-sys/1) will get you up and running with a basic echo request/response to help you understand how Maelstrom works and to make sure you have everything running correctly.

1. **Echo**
   Get the hang of working with Maelstrom in Go by creating a node which is a binary that receives JSON messages
   
   [Read More About Echo](https://fly.io/dist-sys/1)
2. **Unique ID Generation**
   Implement a globally-unique ID generation system that runs against Maelstrom's unique-ids workload
   
   [Read More About Unique ID Generation](https://fly.io/dist-sys/2)
3. **Broadcast**
   Implement a broadcast system that gossips messages between all nodes in the cluster. Gossiping is a common way
   
   [Read More About Broadcast](https://fly.io/dist-sys/3a)
4. **Grow-Only Counter**
   Implement a stateless, grow-only counter which will run against Maelstrom's g-counter workload. This
   
   [Read More About Grow-Only Counter](https://fly.io/dist-sys/4)
5. **Kafka-Style Log**
   Implement a replicated log service similar to Kafka. Replicated logs are often used as a message bus or
   
   [Read More About Kafka-Style Log](https://fly.io/dist-sys/5a)
6. **Totally-Available Transactions**
   Implement a key/value store which implements transactions. These transactions contain micro-operations
   
   [Read More About Totally-Available Transactions](https://fly.io/dist-sys/6a)
