1. Usando Appia e tomando como base a implementação da composisão de impressão, implemente os algoritmos da composição de tratamento de trabalhos do Capítulo 1 do livro. Para simplificar, suponha que o tratamento de trabalho equivale a impressão do mesmo e que a transformação equivale a mudar todas as letras para maiúsculas. Execute o arquivo "Example" 2. Estude o funcionamento da implementação de enlaces perda-justa presente no Appia (net.sf.appia.protocols.udpsimple) e crie um programa principal onde dois processos trocam mensagens de texto. Execute o "ExampleReceiver" que ficará esperando receber uma mensagem. Execute o "ExampleSender" que espera uma mensagem ser digitada e a envia. 3. Implemente uma camada que corresponde a enlaces perfeitos usando a composição de protocolos sugerida no livro (UDP, Algoritmos 2.1 e 2.2). Teste sua implementação com o programa de troca de mensagens de texto do Exercício 2. É necessário informar o id do processo ao executar "MainApplication" e "ReceiverApplication". Neste projeto, apenas os ids 0 ou 1 podem ser informados, porém deve-se manter sempre os processos com ids diferentes. O id deve ser passado como parâmetro ao executar cada um dos arquivos. Para executar no Eclipse: - Propriedades do projeto (alt + enter após selecionar a raiz do projeto) > Run/Debug Settings - Crie 2 configurações diferentes, uma para a Main, outra para o Receiver: - New... > Java Application - Na primeira aba, preencha o campo "Main class:" com a "MainApplication" - Na segunda aba, informe em "Program arguments" o id escolhido para a "Main Application" (valores 0 ou 1) - Clique em OK - Faça o mesmo para a "ReceiverApplication", informando o outro id - As duas opções de "Run" estarão agora disponíveis. Basta executar as duas para testar o exercício. 4. Proponha uma otimização para melhorar o desempenho da implementação do Execício 3. - Não enviar as mensagens já recebidas novamente pela rede. Apenas enviar a informação para a camada superior. 5. Como podemos, a partir da ordem parcial dada pela relação de precedência causal, criar uma ordenação total de eventos em um sistema distribuído? Quais são as propriedades mais importantes desta ordenação total? - * - 6. Faz sentido tentar implementar, usando Appia, as abstrações de detector de falhas perfeito como apresentadas em sala de aula? Por quê? Resposta 1: - Não. O detector de falhas perfeito considera que se tem um sistema síncrono e, portanto, existe um tempo limite (delta) fixo para a execução de um processo. Considerando que o Appia envia processos pela rede (o sistema não é síncrono) e se tem um tempo variável - e muitas vezes grande - para que as mensagens sejam entregues pode-se detectar que um processo é falho, mesmo ele estando apenas demorando para responder. 7. Aplicação base para comunicação entre 2 processos que recebem e enviam mensagens - Ajustar os IPs localizados na classe "ExampleSender" - Executar um dos processos com o parâmetro: 0 - Executar um dos processos com o parâmetro: 1 8. É fundamental para o funcionamento do detector de falhas perfeito eventual o aumento do tempo de espera por Delta a cada falsa suspeita? - * - Parar o aumento do tempo? Sistemas síncronos, não? 9. Implemente uma camada no Appia que corresponda ao Algoritmo 2.9 (Elect Lower Epoch) do livro. Crie uma aplicação que exiba na tela o líder atual. Demostre a sua implementação usando máquinas em rede.
foguinhoperuca/Algoritmos-Distribuidos
Exercícios sobre algoritmos distribuídos utilizando o Appia
Java