[SP-pm] Arquitetura de um projeto que utilizará sistema de fila com

Lindolfo Lorn Rodrigues lorn at lornlab.org
Wed Mar 14 06:23:09 PDT 2012


Eu não sou uma pessoa que goste de escrever emails grandes, talvez algum
dia eu escreva um blog post sobre isso.
Para mostrar alguns dos meus motivos, peguei o changelog das duas ultimas
versões:

http://www.elasticsearch.org/download/2012/03/01/0.19.0.html
http://www.elasticsearch.org/download/2012/01/10/0.18.7.html

query never returns
(#1725<http://github.com/elasticsearch/elasticsearch/issues/issue/1725>
)

   - Orderly shutdown with unicast discovery might cause the shutdown node
   to still be part of the election process
(#1740<http://github.com/elasticsearch/elasticsearch/issues/issue/1740>
   )
   - NullPointerException when asking for null valued json field when
   fetching search request
(#1749<http://github.com/elasticsearch/elasticsearch/issues/issue/1749>
   )


Cluster metadata files destroyed when using blob store gateway causing data
loss (#1564<http://github.com/elasticsearch/elasticsearch/issues/issue/1564>
)

   - Two different indexes with the same nested object name causing
   ArrayIndexOutOfBoundsException
(#1575<http://github.com/elasticsearch/elasticsearch/issues/issue/1575>
   )

S3 blob storage gateway: deleting an index named x destroys data for any
index with name beginning with x
(#1582<http://github.com/elasticsearch/elasticsearch/issues/issue/1582>
)

Olha o tipo de bug que eles ainda estão resolvendo, se vocês derem uma
olhada caso ocorra QUALQUER um desses bugs:

  - A possibilidade da sua base corromper é grande.
  - Seu sistema vai ficar indisponivel

Se a sua base foi corrompida e você precisa reindexar seus documentos, isso
é um trabalho pesado e lento ( e não tem nada a ver com o ES )
ElasticSearch, como  o nome já diz, é um sistema para BUSCA, como Solr, não
um sistema para guardar objetos/dados.
Usar Solr/ElasticSearch como persistencia de dados é errado, e deixar de
usar Solr como sistema de busca para usar ElasticSearch também não é uma
boa escolha.
Apenas como lição de casa, deem uma olhada no changelog das ultimas versões
do Solr:

http://lucene.apache.org/solr/solrnews.html

Procurem quantos bugs criticos desse tipo foram corrigidos/existem ( se
olhar no Jira do projeto )

PS: Até que o email ficou grande :D
2012/3/14 Marcio Ferreira <marciodesouzaferreira em gmail.com>

> qual o trauma?
> On Mar 14, 2012 9:52 AM, "Lindolfo Lorn Rodrigues" <lorn em lornlab.org>
> wrote:
>
>> Use qualquer coisa, menos ElasticSearch.
>> Sério.
>>
>> 2012/3/14 Marcio Ferreira <marciodesouzaferreira em gmail.com>
>>
>>> Só dando um pitaco, ao contrário do mongoDB, experimente o ElasticSearch
>>> - performance incrível. E se atente na forma de como será feita a consulta
>>> na API das redes, as vezes consultar uma vez ao dia já resolva seu
>>> problema, e evite os horários de pico prq rodar seu scraper =S
>>>  On Mar 14, 2012 8:03 AM, "Tiago Peczenyj" <tiago.peczenyj em gmail.com>
>>> wrote:
>>>
>>>> Oi
>>>>
>>>> é possivel criar uma fila usando um feed rss ou criando arquivos em um
>>>> diretorio. basta ver o que é mais interessante para o teu projeto. Por
>>>> exemplo, se vc publicar um feed e tiver do outro lado um consumidor
>>>> fazendo pooling vai ser tão bom quanto um ActiveMQ se vc não estiver
>>>> com um volume muito grande de dados E se puder esperar uns segundos.
>>>> Isso pode simplificar a tua infra num primeiro momento.
>>>>
>>>> On Tue, Mar 13, 2012 at 11:33 PM, Daniel de Oliveira Mantovani
>>>> <daniel.oliveira.mantovani em gmail.com> wrote:
>>>> > Shonorio, o Gearman não é um sistema de fila, ele funciona como um
>>>> > distribuid system.
>>>> >
>>>> > Você deva usar o AMPQ[1] ou o Apache ActiveMQ[2] para criar a fila e o
>>>> > Gearman para processar a informação. O Worker não sabe da existência
>>>> > do Client, quem faz esse intermédio é o Gearman Server[3].
>>>> >
>>>> > "A Gearman powered application consists of three parts: a client, a
>>>> > worker, and a job server. The client is responsible for creating a job
>>>> > to be run and sending it to a job server. The job server will find a
>>>> > suitable worker that can run the job and forwards the job on. The
>>>> > worker performs the work requested by the client and sends a response
>>>> > to the client through the job server. Gearman provides client and
>>>> > worker APIs that your applications call to talk with the Gearman job
>>>> > server (also known as gearmand) so you don't need to deal with
>>>> > networking or mapping of jobs. Internally, the gearman client and
>>>> > worker APIs communicate with the job server using TCP sockets. To
>>>> > explain how Gearman works in more detail, lets look at a simple
>>>> > application that will reverse the order of characters in a string. "
>>>> >
>>>> > [User Interface] <===>[RDBMS]<===> [Queue System]
>>>> >                                                                  /\
>>>> >                                                                  ||
>>>> >                                                                  ||
>>>> >                                                       [Distribuid
>>>> > System] <===> [Document-oriented database]
>>>> >
>>>> >
>>>> > Se baseando nesse arquitetura o Queue System vai mandando "jobs" de
>>>> > acordo com número de workers que você tem disponível, evitando um
>>>> > overhead e criando um sistema "auto scalability".
>>>> >
>>>> > Se eu fosse você eu me preocuparia com a forma de armazenamento dos
>>>> > dados, as redes sociais já garantem a integridade dos dados, sendo
>>>> > assim uma solução Document-oriented database te pouparia muito
>>>> > processamento e trabalho. Existem várias opções, eu recomendo o
>>>> > MongoDB[4] mesmo com o Eden Cardim me crucificando por isso.
>>>> >
>>>> > Guarde os dados dos usuários e do site num RDBMS, se você estiver
>>>> > pensando num RDBMS open source eu te recomendo o PostgreSQL, ele tem
>>>> > um ótimo suporte ao paradigma temporal.
>>>> > Se você usar o PostgreSQL, eu te recomendo usar o Pgpool[5] para
>>>> > replication, clustering, load balance etc.
>>>> >
>>>> > [1] - http://www.amqp.org/about/what
>>>> > [2] - http://activemq.apache.org/
>>>> > [3] - http://gearman.org/
>>>> > [4] - http://www.mongodb.org/display/DOCS/Sharding+Introduction
>>>> > [5] - http://www.pgpool.net/mediawiki/index.php/Main_Page
>>>> >
>>>> > Grande Abraço.
>>>> >
>>>> > 2012/3/13 Solli Honorio <shonorio em gmail.com>:
>>>> >> Pessoal,
>>>> >>
>>>> >> Estou iniciando um projeto de monitoramento de mídias sociais e
>>>> fazer algum
>>>> >> processamento com estas informações, e acredito que utilizar
>>>> esquemas de
>>>> >> fila serviria muito bem para este ambiente.
>>>> >>
>>>> >> Basicamente o esquema que estou imaginando para o ambiente é :
>>>> >>
>>>> >> [ Interface com o usuário ] <===> [Banco de Dados] <====> [Sistema
>>>> de Fila]
>>>> >>
>>>> >>                    ||             ||
>>>> >>
>>>> >>                    ||             +- [Executa a pesquisa]
>>>> >>
>>>> >>                    ||
>>>> >>
>>>> >>                    +-- [ Processa o resultado da pesquisa]
>>>> >>
>>>> >> As ações que eu imagino nisto são :
>>>> >>
>>>> >> * interface com o usuário não é meu problema, tem um webdeveloper
>>>> >> trabalhando nisto;
>>>> >> * não quero de maneira alguma fazer os 'agentes' interagir
>>>> diretamente com o
>>>> >> banco de dados, por isto penso em criar um cliente que leia o banco
>>>> de dados
>>>> >> e coloque os dados formatados para o agente na fila do agente. O
>>>> caminho
>>>> >> contrário também, ler o resultado do agente e gravar no banco de
>>>> dados;
>>>> >>
>>>> >> Estou avaliando a possibilidade de utilizar o Gearman (na verdade
>>>> não tenho
>>>> >> certeza se esta é a melhor alternativa mesmo), na verdade o
>>>> >>  AnyEvent::Gearman. Mas algumas coisas me chamaram no Gearman do
>>>> qual eu
>>>> >> acho meio estranho para o ambiente sistema de fila que eu tenho na
>>>> minha
>>>> >> cabeça.
>>>> >>
>>>> >> 1. o worker (aparentemente o cara que executará o serviço) não fica
>>>> em loop
>>>> >> lendo uma fila, parece que ele está sendo acionado pelo cliente;
>>>> >> 2. o parece que o cliente fica 'preso' aguardando o final da
>>>> execução do
>>>> >> worker.
>>>> >>
>>>> >> Ainda não tenho código (que o meu cliente não leia isto, pois estou
>>>> muito
>>>> >> atrasado), mas eu gostaria de obter recomendações de vocês sobre a
>>>> >> arquitetura que estou imaginando.
>>>> >>
>>>> >> Obrigado,
>>>> >>
>>>> >> Solli Honorio
>>>> >>
>>>> >>
>>>> >> --
>>>> >> "o animal satisfeito dorme". - Guimarães Rosa
>>>> >>
>>>> >> =begin disclaimer
>>>> >>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>>> >>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>>>> >>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>>>> >> =end disclaimer
>>>> >>
>>>> >
>>>> >
>>>> >
>>>> > --
>>>> > "If you’ve never written anything thoughtful, then you’ve never had
>>>> > any difficult, important, or interesting thoughts. That’s the secret:
>>>> > people who don’t write, are people who don’t think."
>>>> > =begin disclaimer
>>>> >   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>>> >  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>>>> >  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: SaoPaulo-pm em pm.org
>>>>  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: SaoPaulo-pm em pm.org
>>>  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: SaoPaulo-pm em pm.org
>>  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: SaoPaulo-pm em pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20120314/b1ee87e1/attachment-0001.html>


More information about the SaoPaulo-pm mailing list