Pergunta

I têm uma c # multi-roscada simulação de Monte Carlo , a aplicação já está estruturado de tal forma que ele pode ser repartido por em tarefas que executam de forma independente, um TaskController executa tarefas, agregados resultados intermédios, cheques para convergência (critérios de rescisão antecipada), em seguida, retorna resultados finais, este é implementado atualmente usando um ThreadPool.

Eu tinha como a alavancagem mais de um computador para ajuda neste cálculo . Eu não tenho de aprovação ou de infra-estrutura para usar o IIS (isso é política não vai mudar), mas eu posso usar, por exemplo, WCF com ligação a NetTcpBinding endpoint, eu testei esta comunicação através do servidor e tem as permissões e obras adequadas.

Para começar eu estou pensando ter um exe master (console app) e vários escravos em outros servidores como trabalhadores dedicados (caso sejam exes? Ou serviços do Windows?), Eventualmente, eu poderia ter este conjunto para rodar em centenas de estações de trabalho (bem como servidores) dentro da empresa durante tempo ocioso (ou quando um protetor de tela está ativo).

Eu poderia escrever isso mesmo, mas vou ter de comunicações Pega, 1, 2-way? rescisão antecipada (intermediário convergência resultado controlo), o cancelamento de tarefas não é mais necessário, a implantação do trabalho, a descoberta de máquinas disponíveis e prontos para implantação de trabalho, estrangulamento / pausa do trabalho, se uma estação de trabalho não está ocioso? tudo o resto que se passa em um sistema distribuído?

Caso o mestre (controlador de tarefas) saber os endereços (IP) de todos os trabalhadores escravos e dizer-lhes para fazer o trabalho (se estiverem disponíveis) ou devem os trabalhadores escravos só sei o endereço principal e pedido de trabalho quando estão em uma posição para fazê-lo, ou a comunicação deve fluir nos dois sentidos? Esta será executado em um relógio 24 horas com cerca de 9 corridas apostaram por dia para apoiar as regiões de negócios diferentes.

Eu estou procurando recomendações para grade .net / bibliotecas distribuídas que pode ajudar e alguns conselhos arquitetura neste esforço.

Atualizar

Tem experiência qualquer pessoa usando qualquer um dos seguintes?

http://www.digipede.net/ (commercial)
http://www.gridbus.org/~alchemi/
http://ngrid.sourceforge.net/
http://www.osl.iu.edu/research/mpi.net/

ou usados ??JavaSpaces, Jini de .net ou encontrados tecnologias .net equivalente

http://java.sun.com/developer/technicalArticles/tools/JavaSpaces/
http://www.jini.org

Graças

Foi útil?

Solução

Eu iria investigar a possibilidade de usar um baseado no espaço arquitetura para isso.

O mestre iria escrever os trabalhos em um espaço (essencialmente um repositório de objetos). Os clientes que consomem estão sempre à procura de emprego e, como postos de trabalho tornam-se disponíveis, eles vão puxar a partir do espaço, processar e escrever de volta os resultados para esse espaço, ou de outra (todos sob uma transação). Você iria marcar empregos como pertencente a um determinado prazo, a fim de resultados do grupo.

A vantagem disto é que este escalas muito facilmente (simplesmente adicionando mais consumidores). Os consumidores teriam de determinar quando eles podem trabalhar, e só precisa ser configurado com informações sobre o espaço (como encontrá-lo). O produtor é dissociado completamente do conjunto de consumidores.

Como o trabalho é processado em uma transação, se um consumidor não completar, o trabalho retorna para o espaço e está disponível para o processamento por outro consumidor.

Você pode lidar com resultados intermediários facilmente. O produtor tem resultados a partir do espaço e pode derivar intermediários como os resultados se tornam disponíveis. Você pode cancelar as tarefas facilmente. Simplesmente removê-los do espaço.

Você pode adicionar mais produtores com muita facilidade. Eles simplesmente escrever para o mesmo espaço, e se os trabalhos são marcados de forma adequada, os resultados estão ligados ao produtor de forma inequívoca.

Eu não tenho certeza o que os quadros estão disponíveis para .Net, infelizmente (eu sou do mundo Java e usaria JavaSpaces - estes descoberta uso dinâmico, e ao lado de nenhuma configuração é necessária). Mas vale a pena alguns pesquisando. Talvez (se isso é suficiente poderoso), você pode escrever C # produtores / consumidores de interface para uma infra-estrutura Javaspace.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top