Programação Distribuida

Pessoal,

Eu tenho que fazer uma aplicação paralela e distribuida numa rede e NÂO PODE USAR THREAD.Por isso eliminei CORBA ou RMI…queria saber se alguem conhece um framework que me permita utiliza-lo pra fazer a comunicação entre as maquinas,ou seja queria me preocupar só mesmo com o processamento em cada maquina…:wink:

Alguem conhece algum projeto que me permita isso?

Só pra explicar um pouco,eu tenho que ficar processando arquivos nas minhas maquinas e ficar enviando o resultado do arquivo processado para as outras maquinas …tipo o problema é elas pararem o processamento pra receber a atualização…e a coisa tem que ser o mais paralelo possivel,cliente-servidor ou sockets ficaria impraticavel.Por isso eu queria umas sugestões aqui do pessoal…do que devo ir atras pra tentar fazer isso…um framework seria ideal…

Olha kra eu faço iniciação científica sobre sistemas distristribuídos e esse projeto também faz processamento de arquivos. Para fazer o processamento dos arquivos a utilização de threads caiu como uma luva, pois eu consigo controlar o processamento de cada thread (ver sincronização de threas e o método join()). Eu acho que no seu caso vc teria parar o processamento da thread finalizando-a e arrumar um esquema dela recomeçar de onde parou. Se for um arquivo binário fica fácil, poís é só armazenar em qual registro ela parou e dps continuar nele.

E respondendo sua pergunta: eu acho que os mecanismos citados por você são os únicos possíveis para fazer este teu sistema. Outro jeito de fazer isso eu nem imagino como seja.

Vlw ae e tou aberto discurões sobre esse assunto!!

[quote=“ax”]Olha kra eu faço iniciação científica sobre sistemas distristribuídos e esse projeto também faz processamento de arquivos. Para fazer o processamento dos arquivos a utilização de threads caiu como uma luva, pois eu consigo controlar o processamento de cada thread (ver sincronização de threas e o método join()). Eu acho que no seu caso vc teria parar o processamento da thread finalizando-a e arrumar um esquema dela recomeçar de onde parou. Se for um arquivo binário fica fácil, poís é só armazenar em qual registro ela parou e dps continuar nele.

E respondendo sua pergunta: eu acho que os mecanismos citados por você são os únicos possíveis para fazer este teu sistema. Outro jeito de fazer isso eu nem imagino como seja.

Vlw ae e tou aberto discurões sobre esse assunto!![/quote]

Tu ja fez algo parecido ,envolvendo não 2 maquinas conectadas mas sim um conjunto de 3 maquinas…?

O meu projeto é pra funcionar com o nro de máquinas de acordo com a capacidade de processamento dos servidores. Já fiz alguns testes com 5 pcs conectados ao mesmo tempo.
Eu acho que o meu projeto não deve ser igual ou muito parecido ao seu, mas vc pode usar as mesmas funcionalidades do meu (sincronização de threads).

Seria legal se vc esplicasse direito como é esse processamento do arquivo e como é essa atualização. Assim fica mais fácil eu te dar uma luz.

Vlw

Por sorte sua eu tou com os códigos aqui. Esse é uma thread Mestre que controla o processamento de uma thread escrava. Mas dempendendo isso não pode ser útil para vc (preciso de mais detalhes do seu projeto).

import java.io.*;
import java.util.*;
import javax.swing.*;

public class Temporizador implements Runnable{
	private int ver;
	private int dor;

	public Temporizador(int v, int d){
		ver=v;//parcela de tempo para varredura
		dor=d;//parcela de tempo em que a varredura fica suspensa
	}


	public void run(){
		Runnable VI=new VerificIntegrity();
		Thread Verify=new Thread(VI);
		Verify.start();
		while (Verify.isAlive()){//enquanto a varredura não estiver concluida
			try{
				System.out.println("Dormindo.........");
				Thread.sleep(ver);//tempo em que é feita a varredura
				System.out.println("Parado...........");
				Verify.join(dor);//tempo em a varredura fica suspensa
			}catch(Exception e){}
		}
		System.out.println("Verificação concluida com sucesso!");
	}
}

[quote=“ax”]O meu projeto é pra funcionar com o nro de máquinas de acordo com a capacidade de processamento dos servidores. Já fiz alguns testes com 5 pcs conectados ao mesmo tempo.
Eu acho que o meu projeto não deve ser igual ou muito parecido ao seu, mas vc pode usar as mesmas funcionalidades do meu (sincronização de threads).

Seria legal se vc esplicasse direito como é esse processamento do arquivo e como é essa atualização. Assim fica mais fácil eu te dar uma luz.

Vlw[/quote]

Cara ,basicamente…a minha aplicação tem um arquivo enorme com indices desordenados…não dá pra odena-lo numa só maquina(incapacidade de memoria,o arquivo é da ordem de Gigabytes) ,então a ideia é distribuir “blocos desordenados” entre umas 3 maquinas,e continuar tentando ordenar a tambem um dos blocos,nas outras maquinas tentarão ordenar seu bloco especifico,mas tambem ao terminarem tem que avisarem as suas vizinhas que terminarao de ordenar,eviando o bloco…no final a maquina que quebrou o arquivo vai receber de volta os blocos ordenador e poderá ordenar todo o arquivo…

A ideia é meio abstrata,porque essa parte de ordenação é que eu queria me preocupar e me detalhar,a outra parte da comunicação das maquinas é que eu queria me abstrair um pouco disso…

Se tu puder me ajudar com qualquer programa,mesmo que não seja parecido mas pelo menos me esclareceria um pouco do que posso fazer,pode me enviar por favor.A ideia realmente ainda não tive…

Olha eu acho que vc de deve esquecer tudo o que disse pois isso não precisa de sincronização e nem threads.

Só um detalhe que vc não me explicou com é esse esquema de atualização.

Quanto a meu projeto, os códigos dele não poderão te ajudar pois é totalmente diferente.

Eu se fosse vc eu dava uma pesquisada nuns algoritmos de ordenação (tem um chamado quickshort). E quanto a parte de comunicação eu usaria o rmi. E para isso vc vai ter que dar uma boa estudada no assunto (rmi é muito facim).

A idéia do seu projeto é:

1 - dividir o arquivo em partes
2 - enviar essas partes para as máquinas remotas
3 - as maquinas remotas ordenar essas partes
4 - as maquinas remotas retornar as partes ordenadas
5 - quando o servidor receber todas as partes, ordena-las

Eu acho que só rmi basta para isso.

[quote=“ax”]Olha eu acho que vc de deve esquecer tudo o que disse pois isso não precisa de sincronização e nem threads.

Só um detalhe que vc não me explicou com é esse esquema de atualização.

Quanto a meu projeto, os códigos dele não poderão te ajudar pois é totalmente diferente.

Eu se fosse vc eu dava uma pesquisada nuns algoritmos de ordenação (tem um chamado quickshort). E quanto a parte de comunicação eu usaria o rmi. E para isso vc vai ter que dar uma boa estudada no assunto (rmi é muito facim).

A idéia do seu projeto é:

1 - dividir o arquivo em partes
2 - enviar essas partes para as máquinas remotas
3 - as maquinas remotas ordenar essas partes
4 - as maquinas remotas retornar as partes ordenadas
5 - quando o servidor receber todas as partes, ordena-las

Eu acho que só rmi basta para isso.[/quote]

CAra ,não é tão simples assim…a maquina Servidora depois que envia os blocos ordenados ,ela não fica parada esperando não,ela tambem fica ordenando uma parte…outra coisa,as maquinas Clientes enquanto estão ordenando,tambem devem ser avisadas quando uma maquina Cliente terminar …perceba que mesmo que blocos de tamanhos iguais podem levar tempo de processamento bem diferente…em tese,quando uma termina sua ordenação deve enviar sua parte onrdenada para as outras…

O meu problema não é ORDENAÇÂO,mas sim a COMUNICAÇÂO entre as maquinas sem uso de Threads…depois eu me preocupo com ordenação…o problema é comunicação de dados.

Problema complicado…sem uso de threads acho que Java não resolve…

Olha kra eu ainda não sei se realmente vc vai precisar das threas, mas eu já te mostrei que tem como controlar o processamento das threads. Com o rmi vc pode fazer o processamento dos arquivos e ao mesmo tempo continuar a receber invocações remotas (menssagens), pois cada invocação é acionada uma nova thread no cliente para tratar dessa requisição (thread é a natureza da implentação rmi). Então quando o cliente ou servidor está enviando ou recebendo uma nova invocação, ele não fica desabilitado para receber novas invocações.
Em poucas palavras um servidor implentado em rmi, é naturalmente um servidor multi-thread e na maquina servidora vc pode colocar o programa cliente para fazer o processamento do arquivo também, assim a maquina servidora não fica parada.

Quanto a parte de comunicação use mesmo o rmi e para isso vc tem que dá uma boa estudada no assundo e definir direito esse projeto.