Este projeto é uma implementação prática e didática do padrão de disseminação Gossip (também conhecido como Epidemic Broadcast). Ele simula uma rede descentralizada de nós que compartilham e sincronizam seu estado interno de forma eficiente e robusta, imitando como um boato se espalha em um grupo social.
O padrão Gossip é um mecanismo de comunicação descentralizado usado em sistemas distribuídos para propagar informações de maneira confiável, mesmo na presença de falhas de rede ou nós. Em vez de um nó enviar uma atualização para todos os outros (o que é ineficiente e frágil), ele envia a informação para apenas um ou poucos nós selecionados aleatoriamente. Esses nós, por sua vez, repassam a informação adiante em rodadas subsequentes.
Principais características e vantagens:
Esse padrão é amplamente utilizado em bancos de dados distribuídos (como Cassandra e DynamoDB), sistemas de descoberta de serviços e redes peer-to-peer.
Este código em Rust cria um nó de gossip que pode ser executado múltiplas vezes para formar uma rede. Cada nó possui:
NodeState
): Um mapa de chave-valor onde cada entrada também possui um número de versão. Isso permite que os nós determinem qual valor é o mais recente durante a sincronização.peers
): Um registro dos endereços dos outros nós na rede com os quais ele pode se comunicar.O nó executa quatro tarefas principais de forma assíncrona:
set minha_chave "meu_valor"
). Essas alterações são então propagadas para a rede via gossip.Certifique-se de ter o Rust e o Cargo instalados. Se ainda não os tiver, instale-os através do rustup.
Execute a rede: Abra múltiplos terminais para simular diferentes nós na rede.
cargo run -- --port 8000
Este é o primeiro nó da rede. Como não há ninguém para se conectar, ele inicia sozinho.
cargo run -- --port 8001 --peer 127.0.0.1:8000
Este nó se conecta ao primeiro nó (--peer 127.0.0.1:8000
).
cargo run -- --port 8002 --peer 127.0.0.1:8001
Este nó pode se conectar a qualquer nó já existente na rede (neste caso, ao segundo nó).
set my_key "hello world"
Pressione Enter
. Em poucos segundos, você verá logs nos outros terminais indicando que o estado foi atualizado, demonstrando como a informação se espalhou pela rede via gossip.