---
title: "Challenge #3c: Fault Tolerant Broadcast"
---

# Challenge #3c: Fault Tolerant Broadcast

In this challenge, we’ll build on our [Multi-Node Broadcast](https://fly.io/dist-sys/3b) implementation, however, this time we’ll introduce network partitions between nodes so they will not be able to communicate for periods of time.

## Specification

Your node should propagate values it sees from `broadcast` messages to the other nodes in the cluster—even in the face of network partitions! Values should propagate to all other nodes by the end of the test. Nodes should only return copies of their own local values.

## Evaluation

Build your Go binary as `maelstrom-broadcast` and run it against Maelstrom with the following command:

```
./maelstrom test -w broadcast --bin ~/go/bin/maelstrom-broadcast --node-count 5 --time-limit 20 --rate 10 --nemesis partition
```

This will run a 5-node cluster like before, but this time with a failing network! Fun!

On success, continue on to [Part One of the Broadcast Efficiency challenge](https://fly.io/dist-sys/3d). If you’re having trouble, head to the [Fly.io Community forum](https://community.fly.io/).

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)
