Skip to content

capybara-team/bully-election

Repository files navigation

Bully Election

Bully Election Algorithm using NodeJS & HTTP. GitHub

Código desenvolvido como parte do trabalho da disciplina DCC064 Sistemas Distribuídos da UFJF, dentro do tópico de eleição de líderes. Trabalho desenvolvido pelos alunos João Souza, Maxwell Carvalho e Rodolpho Rossete.

Instalação

Antes de começar, certifique-se que tem instalado em sua máquina o runtime NodeJS

nodejs -v # v8.10.0

Baixe o código e descompacte-o, ou clone o repositório:

git clone https://github.com/capybara-team/bully-election.git

Instale as dependências do projeto e gere o build

cd bully-election # Acessa a pasta
npm install # Instala as dependências
npm run build # Gera o código transpilado

Inicialize as instâncias executando

npm start

o script start.sh irá ser executado, iniciando 10 servidores nós em sua rede local, usando as portas 4000 à 4009

Todos os nós rodam uma API Rest em HTTP (acesse http://localhost:4000, http://localhost:4009 ou outra porta).

Funcionamento

Cada nó irá ser inicializado com um parâmetro node-id=ID onde ID é um valor numérico que irá ser usado como ID do nó e a porta que irá rodar (por padrão).

O Arquivo nodes.js contém uma lista de todos os nós participantes da rede e seus respectivos endereços.

Ao ingressar na rede, o nó irá enviar aos seus superiores (nós de ID maior) um sinal de eleição.

Estes irão responder o sinal e mandar um novo para os seus próprios superiores.

Ao terminar o envio do sinal, o nó irá verificar se houve alguma resposta (OK) e se não houver, irá aguardar o fim das eleições dos seus superiores (que irão avisá-lo quando concluídas).

Caso não haja nenhuma resposta, o nó irá se auto-proclamar o novo líder pois todos os seus superiores estão fora do ar.

Para isto, irá avisar a todos os nós da rede que ele é o novo lider.

A eleição é refeita sempre que um nó ingressa na rede ou quando um nó se comunica com o líder e este não dá resposta.

Uso

O projeto está sendo executado em cima de uma API Rest em HTTP, disponibilizando algumas rotas para experimentos. Além disso, o console que executar a aplicação irá dar alguns feedbacks sobre início de eleições ou quando nós são eleitos.

Abaixo estão algumas rotas disponíveis:

  • /status e e /(raíz): Rota que informa o status daquele nó
    • É Enviado informações como Id, Porta, seu líder e se está online (se offline, a rota / não é acessível
  • /toggle: liga ou desliga o servidor. Se re-ligado, este irá executar uma nova eleição.
  • /election: Tratamento de eleições
    • GET: retorna se está online (OK) e envia um sinal para seus superiores. Se os seus superiores não derem resposta, se auto-proclama novo líder.
    • POST: Recebe no parâmetro leader o ID do novo líder eleito. Ao um novo líder se auto-proclamar, este envia esta rota para todos os outros nós.
  • /leader: Faz com que este nó se conecte com o seu líder e retorne as informações obtidas dele. Caso o mesmo Não responda, é iniciada uma nova eleição.

Exemplo de uso

Após iniciar os servidores:

About

Bully Election Algorithm using NodeJS & HTTP

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published