---
title: "Challenge #3b: Multi-Node Broadcast"
---

# Challenge #3b: Multi-Node Broadcast

In this challenge, we’ll build on our [Single-Node Broadcast](https://fly.io/dist-sys/3a) implementation and replicate our messages across a cluster that has no network partitions.

## Specification

Your node should propagate values it sees from `broadcast` messages to the other nodes in the cluster. It can use the topology passed to your node in the `topology` message or you can build your own topology.

The simplest approach is to simply send a node’s entire data set on every message, however, this is not practical in a real-world system. Instead, try to send data more efficiently as if you were building a real broadcast system.

Values should propagate to all other nodes within a few seconds.

## 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
```

This will run a 5-node cluster for 20 seconds and broadcast messages at the rate of 10 messages per second. It will validate that all values sent by `broadcast` messages are present on all nodes.

If you’re successful, continue on to the [Fault Tolerant Broadcast challenge](https://fly.io/dist-sys/3c). If you’re having trouble, mosey on over to the [Fly.io Community forum](https://community.fly.io/) for tips.

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)
