[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Uso de SNMP para gerencias análises



On 6/5/07, Fibrox Fibrox <fibrox@gmail.com> wrote:
Ruben:

As análises são rodadas no R, e que há em um dos casos mil análises para serem feitas, e cada uma pega em torno de 6 horas. Temos acesso também ao CNPAD (Centro Nacional de Processamento de Alto Desempenho),  o qual também será usado.

Este problema nos é constante, temos necessidade de análises que gastam um tempo enorme. Sendo assim pensei em deixar algumas máquinas, duas são HT, para fazer o serviço.

Então maquina não é o problema, menos mal.
Não sei com relação a forma de desenvolvimento de vocês, mas por padrão o pessoal costuma desenvolver tudo linear, o que é ruim no caso de mult-processamento. Se você tiver um programa linear rodando em um Computador com 100000 processadores ou com 1 só, é basicamente o mesmo desempenho. Verifique ai se está tudo ok com relação a isso - isso é um dos pontos que pode ganhar MUITO desempenho. 

O meu problema além de que a coisa funcione é saber como mandar as mensagens entre os micros, sei que pode funcionar, mas não sei nem por onde começar.

Eu atualmente uso SDLNET [0], que é uma lib multi-plataforma para C, e tem porte para Perl, Python e mais várias outras linguagens.
De qualquer forma, a maioria das linguagens tem formas de tratar sockets e comunicação de rede. Busque informações de como fazer comunicação por sockets na linguagem que vocês utilizam, provavelmente isso vai dar conta do recado.
Como é um projeto grande, vale a pena vocês desenvolverem um servidor para ele, que gerenciê essas milhares de análises. Inclusive, é bom até o server gerenciar os resultados, por exemplo enviando sempre uma análise para pelo menos 2 computadores e depois comparando se deu o resultado correto.
Enfim, há muitas possibilidades, mas para começar o negócio é aprender a mexer com socket na linguagem que vocês usam.

[0] http://www.libsdl.org/projects/SDL_net/

Voce(s) teria algum exemplo de como fazer isso.

Em SDLNet há esses exeplos[1] na documentação, qualquer dúvida pode me dar um toque, com relação a comunicação por TCP/IP eu dou manutenção tanto no cliente quanto no servidor que usamos por aqui, então é muito possível que possa ajudar.

[1] http://jcatki.no-ip.org/SDL_net/SDL_net_demos.tar.gz

Vou ver o link que o César enviou, do OpenNMS, ver se acho algo.

Não sei se estudar protocolos de comunicação lhe ajude nesse momento. Com certeza seria bom, as não é o necessário para você desenvolver o que você precisa, já que a maioria das bibliotecas encapsulam isso

Rúben.





Fibrox

Em 05/06/07, Rúben Lício <rubenlr@gmail.com> escreveu:
On 6/5/07, Fibrox Fibrox <fibrox@gmail.com> wrote:
Pessoal:

Temos necessidade de rodar muitas análises, alias milhares, e como cada uma demora horas para serem concluídas, estava pensando em colocar várias máquinas, P4 com Debian, para fazer o serviço, mas acho que ele seria mais eficiente se as máquinas rodassem se forma continua, ou seja, terminando uma anaálise já pegaria a próximo disponível e seguiriam todas até terminar o serviço.

Talves seja interessante pegar um processador de multiplos núcleos ou um paralelo mesmo, e fazer a aplicação distribuida para melhorar o desempenho. Já pensou a respeito?

Penso em fazer isso, atráves da comunicação entre as várias máquinas que estão ligadas e as que serão ligadas, onde uma "gerente", em um primeiro momento, diria oque tem que ser feito, ou seja, ela requisitaria a maquina M1, para a análise A1, e a M2 para a A2, e assim por diante, quando a M1 terminar a análise ela solicita qual a próxima análise deverá ser feita, sendo assim ela não ficaria parada.

Para isso pensei em usar SNMP, onde a gerente diria oque fazer e ao longo do trabalho iria "anotando" quais análises já foram feitas e quais a fazer.

Nunca usei SNMP, mas sei que é usado para observação do estado de dispositivos de rede, e por que não máquinas.

Oque preciso saber é como enviar uma "ordem" para a M1 e como ela reconhece a mesma e da mesma forma como  M1 enviaria para a "gerente" que ela terminou o serviço.

Veja que todas as máquinas já terão inicialmente os dados para análise, sendo que a "gerente" enviaria apenas o número da que se deseja rodar.


Até onde sei SNMP é somente um protocolo de rede. Ao que me parece o seu problema atualmente não é o protocolo de comunicação, e sim o como programar isso.
Eu faria um servidor e um cliente, e o servidor gerenciaria isso enquanto os clientes pediriam novas tarefas sempre que tivessem livre.
Você pode fazer isso se bobiar até mesmo em SH, mas em C também não é dificil se você tem familiáridade com sockets.

Ufa!!

Alguém tem alguma luz para este assunto?

Se o seu objetivo é aumento de performance, pense em pegar maquinas para aplicações paralelas, e re-estruturar seu programa para utilizar o máximo dessas maquinas, e também faça uma estrutura de distribuição de processamento pela rede.
A primeira vista parece algo de outro mundo, mas n é muito complicado não.

Muito obrigado.

Fibrox
-------------
"O tempo passa. Divirta-se!"



--
Rúben Lício Reis

Game Developer
Linux user #433535



--


Fibrox
-------------
"O tempo passa. Divirta-se!"



--
Rúben Lício Reis

Game Developer
Linux user #433535
Reply to: