Fala André! O sistema distribuido que estou desenvolvendo no momento se baseia justamente em Gearman, e uso MongoDB (in fact, Log::Dispatch + Log::Dispatch::MongoDB [1]) para armazenar logs. O meu caso é bastante específico, os processos interligados pelo Gearman ficam "jogando" um documento estruturado (relativamente pequeno) um para o outro, e preciso que, em caso de falha em algum ponto, o log traga o estado do documento inteiro exatamente naquele ponto. A grande vantagem, para mim, é a natureza assíncrona do MongoDB, e os seus "capped collections", que rotacionam o log automagicamente [2].
1. https://metacpan.org/module/Log::Dispatch::MongoDB 2. http://blog.mongodb.org/post/172254834/mongodb-is-fantastic-for-logging ABS() 2011/11/1 Tiago Peczenyj <[email protected]> > Ola > > o que vc pode fazer é gravar todos os dados que vc quer em um registro > inteiro do banco de dados. > > depois tenha algo que leia estas linhas e transforme do jeito que vc quer > em outra database, que vc possa manipular a vontade sem medo de ter varios > inserts. > > isso é basicamente um Data Warehouse. de uma lida nos conceitos. > > 2011/11/1 Andre Carneiro <[email protected]> > >> Heil Perl! >> >> >> Pessoal, preciso de um 'norte' para resolver um problema de arquitetura >> de software. Fiz aqui no meu trabalho um 'log parser' distribuído, que gera >> alguns dados de estatísticas que eu preciso capturar isso de alguma forma, >> mas ainda não sei bem como fazer. >> >> A arquitetura resumida é o seguinte: >> >> - um daemon que, de tempos em tempos, lê arquivos de log e o divide em >> vários arquivos menores, zipa esses arquivos e move para um outro >> diretório. Chamo isso de 'dispatcher'; >> - um daemon que lê os arquivo gerados pelo 'dispatchers', e constrói jobs >> através do módulo Gearman::Client e os envia para um ou mais servidores >> para que os jobs sejam processados. Chamo isso de 'jobmanager'; >> - Em várias máquinas existem(na verdade 'existirão' :D ) os servidores de >> 'jobs'(outros daemons ), que recebem as requisições do 'jobmanager' via >> gearman e inicia o processamento dos logs, de fato, através do módulo >> Gearman::Worker, de maneira que a resposta não é esperada pelo JobManager. >> >> >> Problema: >> >> Preciso gravar os dados utilizados nas estatístifcas, além de outras >> informações, mas não sei qual seria a melhor forma de fazer isso >> considerando que vários workers estariam gravando os dados de vários >> servidores diferentes, e a idéia é não centralizar isso num banco de dados >> relacional, evitando concorrência, já que o ambiente aqui por enquanto não >> suporta clusterização de banco de dados. Eu pensei em gravar os dados >> localmente em cada máquina onde os workers gravaram e enviar esses dados >> para um monitor central, ou deixar o dado disponível de alguma forma para >> que o monitor central soubesse a quantidade de dados que está sendo >> processada e de onde. Não sei se fui claro... >> >> Alguém poderia dar uma sugestão, por gentileza? >> >> >> Antecipadamente agradeço! >> >> >> >> Cheers! >> >> -- >> André Garcia Carneiro >> Analista/Desenvolvedor Perl >> (11)82907780 >> >> =begin disclaimer >> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> SaoPaulo-pm mailing list: [email protected] >> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> =end disclaimer >> >> > > > -- > Tiago B. Peczenyj > Linux User #405772 > > http://pacman.blog.br > > =begin disclaimer > Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ > SaoPaulo-pm mailing list: [email protected] > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> > =end disclaimer > >
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
