Aplicação distribuída em Java

Caros,

Estou com um projeto em Java onde meu objetivo é utilizar várias máquinas para efetuar um determinado processamento, algo semelhante a um Cluster para Processamento Paralelo.
Basicamente é um sistema distribuído, arquitetura cliente servidor.
Durante meus estudos tive uma dúvida.
Um vírus do tipo botnet que se apodera de um computador (máquinas zumbis) ele é cliente ou servidor? Eu entendo que todas as máquinas infectadas são servidores, visto que elas prestam um serviço (ataque ou coleta de informações), e existe uma máquina cliente que fica verificando esses servidores pra ver quem executou o procedimento com êxito e assim recuperar os dados requisitados.

Sendo assim, minha aplicação seria composta de uma aplicação do tipo servidor nas minhas máquinas, e na máquina mestre um cliente que acessa todos esses servidores, passa o trabalho pra cada um deles e fica aguardando a resposta.

O que vocês acham disso? Seria essa a abordagem correta? E o que seria melhor pra implementar isso? Socket, RMI ou alguma outra sugestão?

Desde já agradeço.

ps: editado pra corrigir uma vírgula…

Deixa eu ver se entendi, você está querendo ajuda para criar uma bootnet? :shock:

Não, de maneira alguma. Eu só dei o exemplo do botnet que seria algo do tipo cliente servidor.

Minha aplicação na verdade é pra cálculo numérico, tipo aquele Seti@Home.

Na verdade, depende. Elas podem ser tanto cliente como servidor, porém é mais fácil fazer com que as máquinas sejam clientes que se comunicam com um ou mais servidores pois assim você consegue burlar esquemas de segurança mais facilmente, como um firewall por exemplo.

Então, essa que é a dúvida…Porque minha máquina “mestra” vai precisar saber quantos nós ela vai utilizar pra dividir as tarefas entre eles.
O Firewall também não seria problema, apesar de ter entendido sua sugestão.
A idéia ainda é saber quantos núcleos cada nó possui pra otimizar ainda mais o processamento. Isso eu já sei como fazer.

Obrigado por enquanto.

Sua máquina mestre pode ser o servidor e as máquinas escravas clientes. Essa abordagem também facilita o gerenciamento já que sua máquina mestre não necessitária “saber” quem são seus clientes!

Entendido, a minha dúvida é em como fazer com que o servidor passe parâmetro e mande um cliente executar, pois, o cliente vai se conectar ao servidor e ficar aguardando. O servidor precisa saber quantos clientes ou limitar a partir de um número o momento em que vai disparar a execução.

No servidor, para cada conexão você cria uma thread separada e ao atingir o número de threads necessária você dispara o processamento em todos os clientes.
Outra forma é gerenciar a computação ao invés de simplesmente dividi-la. Divida a computação em pacotes a serem processados, passe um pacote de cada vez para cada cliente e espere ele concluir e ai passe outro pacote. Se você tiver um só cliente ele será responsável por todos os pacotes, se tiver 2 eles serão divididos entre eles. Isso também melhora o desempenho já que uma máquina pode terminar um pacote antes da outra de modo que ela pode começar outro e se uma máquina cair você pode pode passar o pacote dela para outra processar.

Entendido, bom, valeu pela discussão X@ndy, vou tentar fazer aqui e tendo sucesso eu aviso qual foi minha abordagem.

Abraço e valew!