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
- 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.
- 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.
- 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.
- 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.
- 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:
- 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.
- 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
- 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:
- Não serão aceitos trabalhos impressos, nem em meio ótico/magnético.
- Como neste semestre a turma não está grande, todos os trabalhos serão
defendidos no laboratório, portanto
certifique-se que seu trabalho funciona aqui.
- Pode ser usada qualquer linguagem de programação. A diversidade é bem
vinda!
Prof. Elias P. Duarte Jr.
 
 
Departamento de Informática
 
 
UFPR