Skip to content

alinekaori/Algoritmos-Distribuidos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

Exercícios sobre algoritmos distribuídos utilizando o Appia

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages