[Cascavel-pm] Res: Res: Res: Problema com pipe

Alexei Znamensky russoz em gmail.com
Sexta Fevereiro 19 13:37:25 PST 2010


De qualquer maneira, vale a recomendação de ler a documentação do SO. As
implementações de sockets de linguagens != C são, em sua maioria, apenas uma
casca para as chamadas de sistema nativas do SO.

Além disso, reforço a recomendação do Mantovani de ler a documentação de
IPC, tanto a de perl, quanto relativas a Linux/UNIX (isso não mudou tanto
assim nos últimos anos, pode ser documentação mais antiga que deve servir).

E por fim, se os seus processos são estritamente locais - isto é, pai e
filhos rodam na mesma máquina, sugiro fortemente que, ao invés de
implementar usando sockets UDP, que implemente usando sockets UNIX, que são
aqueles arquivos tipo "s" que você pode encontrar em alguns diretórios do
seu sistema. No meu Ubuntu aqui, eu encontrei alguns em /var/run. Rode um
"ls -l /var/run" que talvez você encontre alguns aí.

A semântica dos sockets UNIX é similar, se não igual, à dos sockets TCP, com
a vantagem de não precisar de número de porta. Você cria uma entrada no
filesystem para isso.

Boa sorte!

[]s,
Alexei Znamensky [russoz_gmail_com] [russoz.wordpress.com] [
www.flickr.com/photos/alexeiz]
"Though we live in trying times, we're the ones who have to try"


2010/2/19 Gabriel Sancinetti <gabrielssan em yahoo.com>

> Alexei,
>
> A questão é que não vale o esforço.
> Ontem li um comentário em um forum que dizia que não é recomendado uso de
> pipes para scripts de execução paralela e assíncrona.
> Neste mesmo tópico foi recomendado o uso de Sockets.
>
> Já implementei outra solução hoje pela manhã e parece que vai atender as
> espectativas.
> Eu substibui a comunicação via pipe por Socket sem grandes impactos na
> estrutura do código.
> E para ser sincero ficou ridiculamente simples.
>
> Resumidamente, a alternativa que usei foi criar no processo pai um socket
> servidor "udp". Os filhos executam o comando e apenas enviam uma mensagem
> udp com resultado para o pai.
> Não é possível garantir a entrega das mensagens, mas a probabilidade de
> falhas é bem pequena. Mesmo assim meus logs irão me alertar nestes casos
> pois o controle de TIMEOUT foi mantido. (O processo pai espera receber a
> quantidade de mensagens igual ao número de processos filhos abertos).
>
> O problema é que se algum servidor/software de rede começar a porventura
> enviar mensagens para minha porta udp o script vai para o espaço. (Acho que
> vou colocar algum tipo de código na mensagem para validar se a mesma veio do
> meu processo filho).
>
> Enfim, ainda vou estressar essa solução e aviso a vocês se deu certo.
> Se tiverem algum alerta ou sugestão, enviem por favor.
>
> Abraços
>
> Att.
>
> Gabriel
>
> ------------------------------
> *De:* Alexei Znamensky <russoz em gmail.com>
>
> *Para:* Cascavel Perl Mongers <cascavel-pm em pm.org>
> *Enviadas:* Sexta-feira, 19 de Fevereiro de 2010 9:10:25
> *Assunto:* Re: [Cascavel-pm] Res: Res: Problema com pipe
>
> Gabriel,
>
> Recomendo você pesquisar exaustivamente a documentação do OS sobre pipes,
> buffers, etc. Esse tipo de rotinas, em perl (ou em qualquer outra linguagem,
> for that matter), geralmente são apenas wrappers para chamadas de sistema do
> próprio sistema operacional (no caso em Linux, isso É verdade). Assim, eu
> diria que há uma grande chance de que o seu problema esteja no nível do SO e
> não no nível da linguagem.
>
> []s,
> Alexei
>
> Alexei Znamensky [russoz_gmail_com] [russoz.wordpress.com] [
> www.flickr.com/photos/alexeiz]
> "Though we live in trying times, we're the ones who have to try"
>
>
> 2010/2/18 Gabriel Sancinetti <gabrielssan em yahoo.com>
>
>> Alceu,
>>
>> Os plugins são o que eu quero aproveitar nos meus hosts remotos através do
>> check_nrpe.
>> Para fazer algo do tipo eu teria que refazer o "check_nrpe".
>> Se houver algo nesse sentido já implementado talvez resolveria parte do
>> meu problema, mas não a questão do tempo de execução do script.
>>
>> A solução sobre arquivos texto é umas das opções que posso seguir, pensei
>> nela quando inseri um trace no processo filho escrevendo no mesmo arquivop
>> de log que o processo pai. ( Estou tendendo para esse lado.)
>>
>> Sobre o pipe, a resposta é não. É criado um pipe para cada processo filho.
>> Sua pergunta esta diretamente relacionada ao meu problema.
>> Não sei qual a limitação de nível de SO que preciso controlar com maior
>> cuidado.
>> Os sleeps do código foram inseridos pensando no contexto de problema de
>> bufferização nos pipes.
>> Quando adiciono um sleep de 10 segundos (que é o timeout dos comandos) no
>> processo pai antes de chamar cada filho a taxa de erro é quase nula. (1 a 5
>> erros entre mais de 2000 comandos processados)
>> Mas coloquei todo tipo de log e de "eval" em de cada linha e nada de erro.
>>
>> Daí minha desconfiança no tratamendo do sinal ("USR1") que o processo
>> filho envia ao pai para informar que terminou.
>> Pois a lógica do script parte do princípio que a cada resposta de um
>> processo filho, a váriável $gotone é incrementada.
>> Aí vem a dúvida, será que os pipes estão OK e simplesmente o script não
>> está incrementando a variável devido a acessos simultaneos e com isso o
>> script interpreta que perdeu alguma resposta?
>>
>> Pior é que pelo visto vou ficar sem saber qual é o problema e partir para
>> outra solução.
>>
>> ps: Antes que me questionem, meu servidor é muito bom. (QuadCore, 4GB,
>> rodando CentOS 4.7 ).
>>
>> Att.
>>
>> Gabriel
>>
>> ------------------------------
>> *De:* Alceu R. de Freitas Jr. <glasswalk3r em yahoo.com.br>
>> *Para:* Cascavel Perl Mongers <cascavel-pm em pm.org>
>> *Enviadas:* Quinta-feira, 18 de Fevereiro de 2010 22:04:40
>>
>> *Assunto:* Re: [Cascavel-pm] Res: Problema com pipe
>>
>>
>> --- Em qui, 18/2/10, Gabriel Sancinetti <gabrielssan em yahoo.com> escreveu:
>>
>> > O comando executado pode ser qualquer script da libexec do
>> > Nagios.
>> > Em 99% dos casos check_nrpe ou check_nt.
>>
>> O Nagios não permite a escrita de plugins em Perl?
>>
>> Você não consegue desenvolver um plugin para o Nagios utilizando a
>> funcionalidade de script em Perl de sua aplicação proprietária?
>>
>> > Quanto ao "ForkManager" foi a minha primeira
>> > tentativa sem sucesso. Não me lembro por qual motivo o
>> > abandonei, mas com certeza está relacionado à necessidade
>> > aguardar a execução de multiplos processos filhos e
>> > processar seus resultados assincronamente.
>> > Se é possível, eu não me lembro.
>>
>> Eu não sou craque neste módulo, então não vou nem me atraver.
>>
>> Mas lembro do código que você enviou que você estava usando um pipe para
>> saber o resultado dos processos filhos. Se os programas do Nagios sempre
>> retornam uma resposta, você não poderia fazer com que os processos filhos
>> atualizem seu status de execução escrevendo em arquivos texto? Ou então
>> atualizando uma tabela de banco de dados com o resultado?
>>
>> Seu código está tentando utilizar o mesmo pipe para todos os processos? O
>> que acontece se vários deles tentam fazer acesso simultâneo?
>>
>> Talvez você queira pesquisar sobre I/O assíncrono em Perl. O Perlbal faz
>> uso de tal recurso com bastante sucesso.
>>
>> Abraços,
>> Alceu
>>
>>
>>
>> ____________________________________________________________________________________
>> Veja quais são os assuntos do momento no Yahoo! +Buscados
>> http://br.maisbuscados.yahoo.com
>> _______________________________________________
>> Cascavel-pm mailing list
>> Cascavel-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>
>> ------------------------------
>> Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10<http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/>-
>> Celebridades<http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/celebridades/>-
>> Música<http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/m%C3%BAsica/>-
>> Esportes<http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/esportes/>
>>
>> _______________________________________________
>> Cascavel-pm mailing list
>> Cascavel-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>
>
>
> ------------------------------
> Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 10<http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/>-
> Celebridades<http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/celebridades/>-
> Música<http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/m%C3%BAsica/>-
> Esportes<http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/esportes/>
>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/cascavel-pm/attachments/20100219/a5156173/attachment.html>


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