Este projeto implementa o Algoritmo de Eleição de Líder em Anel
utilizando
Message-Oriented Middleware (MOM) para comunicação entre nós
distribuídos.
Cada nó roda como um processo independente, conectado ao RabbitMQ, e
participa
do processo de eleição para determinar qual deles será o líder do
sistema distribuído.
Enzo C. Stival, Henrique de O. Godoy, Hiann W. Padilha, Marcos P. Ruppel. Bacharelado em Ciência da Computação, PUCPR - 2025.
A eleição distribuída de líder consiste em decidir, entre várias
entidades em um
sistema distribuído, qual delas exercerá o papel de líder. A
topologia
utilizada neste trabalho é um anel unidirecional, onde cada nó
possui
exatamente dois vizinhos.
- Cada nó deve possuir um identificador único.
- O sistema deve garantir que somente um líder seja eleito.
- A comunicação ocorre apenas entre vizinhos, via MOM (RabbitMQ).
- Um nó iniciador dispara o processo de eleição.
O algoritmo segue o modelo clássico de eleição em anel:
- Um nó iniciador envia seu próprio identificador para um vizinho.
- Ao receber uma mensagem
ELEICAO:<id>:- o nó compara
<id>com o seu próprioid; - encaminha ao próximo vizinho o maior entre eles;
- se um nó receber o próprio id, significa que seu id é o maior do anel; portanto, é o líder.
- o nó compara
- Após determinar o líder, o nó envia
LIDER:<id_lider>pelo anel. - Cada nó recebe essa mensagem, registra o líder e a repassa adiante.
- Quando a mensagem retorna ao próprio líder, o sistema está síncronizado.
├── componente.py # Implementação de um nó no anel
├── starter.py # Dispara a eleição em um nó arbitrário
└── README.md # este arquivo
Cada nó:
- cria sua própria fila no RabbitMQ (
queue=<id_nó>), - escuta mensagens endereçadas a ele,
- processa eleição ou anúncio de líder,
- encaminha mensagens ao próximo vizinho.
Mensagens enviadas pelos nós:
ELEICAO:<id>circula pelo anel até retornar ao maior.LIDER:<id_lider>notifica todos os nós do líder eleito.
Mensagens vindas do starter:
START:<id>faz um nó iniciar uma eleição.
python componente.py 1 2
python componente.py 2 3
...python starter.py START 3Para o sistema funcionar é necessário que os componentes estejam
conectados
em uma topologia de anel unidirecional.
O anel padrão usado no exemplo é:
1 ─ 2 ─ 3 ─ 4 ─ 5 ─ 6 ─ 7 ─ 8
↑ ↓
└─────────────────────────┘
Cada nó tem exatamente dois vizinhos.
Durante a execução, o nó líder será descoberto ao receber seu próprio id e imprimirá:
>>> EU SOU O LÍDER (id máximo do anel) <<<
E os demais nós:
<id> reconhece <lider> como líder.
- Python 3+
pika(client AMQP)
pip install pika-
RabbitMQ + Erlang
Este projeto demonstra:
- implementação do conceito de Message-oriented Middleware (MOM);
- coordenação de processos via mensagens;
- ausência de relógio global e dependência apenas do tráfego pelo anel;
Uso educacional - PUCPR.