[Cascavel-pm] Perl Dynamic Subroutines / Functions

Otávio Fernandes otaviof em gmail.com
Sábado Maio 9 21:29:59 PDT 2009


2009/5/10 Guilherme Sperb Machado <gsmachado em gmail.com>:
> Obrigado pela resposta de todos.
>
> Vou esclarecer algumas coisas:
>
> - A idéia é fazer algo bem dinâmico mesmo. Por isso estou estudando o
> quão dinamico isso pode ser feito.
> - O IDEAL para min, seria que o servidor "distribuisse" FUNÇÕES em
> perl para os clientes, e não COMANDOS. Segue a ideia abaixo:

Qual o seu real problema? É ter um servidor que possa processar todas
as instâncias do seu software e para isso ele vai usar muito
processmento e memória? Se a resposta for afirmativa eu recomendo que
você faça algo virtualizado, assim: crie uma máquina virtual que
utiliza várias hospedeiras, assim, você consegue juntar o poder de
processamento e memória de todas elas. O único ponto de atenção é o
IO, este é conhecidamente o ponto mais fraco no ambiente virtual,
porem, para isso você pode recorrer a um storage. Atente que a solução
virtualizada é mais simples para o seu software.

> Servidor possui implementado a seguinte funcao:
>
> sub function1 {
>  # funcao que implementa um parser em um determinado website. Essa
> funcao serah distribuida pelo servidor, porque, o parser pode mudar a
> qualquer hora sem acarretar mudancas nos clientes.
> }

No caso do ambiente virtual você pode simplesmente criar mais um
processo e utilizar o nice para definir a prioridade sobre os outros.

> Essa funcao seria "enviada" de alguma maneira para os clientes. Os
> clientes receberiam essa funcao, e a usariam de uma forma previamente
> implementada DENTRO do cliente. O QUE EU QUERO EVITAR TAMBEM é um
> processamento dessa funcao pelo servidor. O cliente que precisa
> PROCESSA-LA, mas quem vai dizer COMO fazer (ou seja, a função escrita
> em si) é o servidor.

Neste ponto eu vejo algo como "horizontalmente escalável", e se esta
for o objetivo que você quer chegar, eu recomendo que você veja com
muito cuidado as linguagens de programação funcionais, como por
exemplo Erlang. Também veja o MapReduce, _parece_ ser exatamente o que
você precisa.

> Resumindo, para ficar mais claro: quero que os clientes sejam meros
> clientes burros para processamento apenas. O servidor ficaria com o
> conhecimento, e quando algo mudar (relativo ao parsing de websites,
> que por sinal sao centenas nesse meu problema), o servidor distribuirá
> as funções atualizadas para os clientes executarem e trabalharem com
> os dados obtidos. :-)

humm, virtualização mesmo.

> Ficou mais claro?
>
> Alguem sugere alguma solução?
>
> Pelo que eu sei, RPC não serve, porque o cliente soh chama uma funcao
> no servidor, que processa, e soh dah um output pro cliente. :-( Quero
> evitar justamente isso.
>
> Não sei, pode ser que isso nao exista por problemas conceituais de
> linguagens de programação mesmo... tipo, pensando de uma forma
> SIMPLÓRIA, seria como definir uma função em uma variável ($sub1 = sub
> a { comandos }) e então enviar essa variavel $sub1 para o cliente, de
> alguma forma, e o cliente a partir daih, adaptar essa funcao recebida,
> em tempo de execucao, no seu codigo, para que seja possivel a chamada
> dela, posteriormente ao recebimento. Algo do tipo.

Neste ponto você tem que ficar muito atento quanto a utilização dos
seus nodes. Como você vai saber se ele está sobrecarregado, ou se está
com processamento sobrando. Veja que vai ficar uma solução pouco
eficiente.

> Acho que fui mais claro agora.
>
> Abraço, e agradeço desde já,
> Guilherme Sperb Machado

-- 
Otávio Fernandes <otaviof at gmail.com>
http://otaviof.blogspot.com/


Mais detalhes sobre a lista de discussão Cascavel-pm