Universidade Federal do Paraná
Departamento de Informática
Bacharelado em Ciência da Computação
Prof. Elias P. Duarte Jr.

Trabalho Prático de Redes de Computadores II - Turma 2018/1

Alta Disponibilidade com Grupo Multicast de Servidores

Entrega: Todos os trabalhos deverão estar disponibilizados sexta-feira dia 8 de junho de 2018; não serão aceitos trabalhos disponibilizados após esta data. Atenção, são mais de 3 semanas de prazo, organize-se!

Os alunos devem informar por e-mail a URL do trabalho, usando o subject "TP REDES II 2018-1"

O trabalho deve ser feito em dupla; o código, os testes e o relatório devem ser feitos por ambos os membros da dupla. Use esta oportunidade para melhorar sua habilidade de trabalhar em equipe.

Descrição do Trabalho

  1. Uma estratégia comum para implementar um sistema altamente disponível é através de replicação. Neste trabalho você vai implementar uma calculadora remota altamente-disponível, baseada em um grupo multicast de N servidores. A estratégia que vamos usar é a mais simples possível: apenas o servidor correto de menor identificador atende requisições de clientes. Este servidor é chamado de líder, e apenas ele responde a todas as requisições de clientes.
  2. A calculadora distribuída funciona da seguinte maneira. O cliente envia uma expressão matemática, o servidor líder faz o cálculo correspondente e retorna o resultado final ao cliente. Cada dupla vai definir o formato da expressão e das mensagens, incluindo mensagens de erro -- por exemplo, quando o usuário tenta fazer uma divisão por zero.
  3. Dentro do grupo, cada servidor tem um identificador interno no grupo, que varia de 0 a N-1. Os servidores se monitoram contínua e periodicamente. O monitoramento é feito da seguinte maneira: de tempos em tempos (por exemplo a cada 10 segundos) cada servidor envia uma mensagem aos demais, informando seu identificador interno. Cada servidor mantém um vetor com a hora em que ouviu a última resposta de cada membro do grupo.
  4. Quando recebe uma mensagem de um cliente, cada servidor verifica se é o líder ou não, baseado na hora em que recebeu a última resposta de cada membro do grupo. Apenas o líder deve fazer o cálculo e responder ao cliente. Cada dupla deve informar explicitamente no relatório quais critérios utilizou para um servidor considerar outro falho ou correto.
  5. Prepare um arquivo de log para cada execução, concatenando os logs gerados por cada servidor individual.

Cada dupla pode fazer a implementação na linguagem que escolher, o professor sugere Python pela produtividade, mas são muito bem vindos trabalhos em C, C++, Java ou qualquer outra linguagem.

ENTREGA DO TRABALHO

Deve ser construída uma página Web, que contém em documentos HTML, os seguintes itens:

  1. Relatório de como foi feito o trabalho e quais foram os resultados obtidos. Use desenhos, diagramas, figuras, todos os recursos que permitam ao professor compreender como a dupla estruturou o trabalho e quais resultados obteve. O objetivo é o professor entender como a dupla fez o trabalho, como o trabalho funciona.
  2. Código Fonte comentado. ATENÇÃO: acrescente a todo programa a terminação ".txt" para que possa ser diretamente aberto em um browser. Exemplos: cliente.py.txt ou servidor.c.txt
  3. Logs de execução dos processos cliente/servidores, que demonstrem a execução correta destes processos. Os testes devem ser exaustivos até o ponto que demonstrem com clareza a funcionalidade correta do sistema.

Observações:




Prof. Elias P. Duarte Jr.     Departamento de Informática     UFPR