Pergunta

Quais filas de mensagens são pessoas que usam para seus aplicativos Rails e qual foi a força motriz por trás da decisão de escolhê -la. A publicidade mais recente do Twitter sobre sua fila de casa Starling Falling Down afeta qualquer decisões de design existentes.

Estou trabalhando em um aplicativo que precisará de uma fila de mensagens para processar algumas tarefas de segundo plano, não fiz muito disso, e a maioria das coisas que vi no passado tem sido sobre estorninho e trabalho, e para ser sincero o O aplicativo não é muito grande e essa solução provavelmente seria suficiente, mas eu adoraria obter experiência na integração da melhor solução possível, pois tenho certeza de que vou integrar uma em um aplicativo maior em algum momento.

Que mensagens você sugeriria para um aplicativo Rails ???

EDIT: Obrigado pelas sugestões, vou olhar para algumas delas neste fim de semana.

Editar novamente: dei uma olhada em volta e um pouco sobrecarregada pela escolha. No entanto, vou integrar o RabbitMQ ao trabalhar no aplicativo que estou construindo, se eu precisar de algum conhecimento sobre uma fila rápida, terei isso e saberei se atende ou não às minhas necessidades.

EDIT: Encontrando cada vez mais que o DJ me convém muito bem, se eu "superou" em um site, eu diria que Resque é para onde iria ir.

EDIT: (dezembro de 2014), então já faz muito tempo que eu perguntei isso, mas vejo que ainda recebe algumas visualizações ou alguns votos, então achei que a atualizaria na minha abordagem agora quando se trata de minha escolha de trabalhadores de fundo .

Na minha opinião, atualmente, a melhor maneira de executar trabalhos em segundo plano em Ruby está usando o Sidekiq. Muitas pessoas realmente elogiaram o Sidekiq por seus trabalhadores encadeados, em vez de processos por trabalhador, o que pode usar significativamente menos memória do que os como resque, que eu estava usando antes do Sidekiq. Isso é bom, mas para mim esse não foi o recurso assassino. Ao usar o sidetiq com o Sidekiq, o agendamento de trabalhos é tão trivial que eu mudei e nunca olhei para trás, de longe a programação mais fácil de empregos que usei e fiz do Sidekiq uma brisa para usar.

Foi útil?

Solução

Como atualização - o Github mudou para resque em redis em vez de um trabalho atrasado. No entanto, eles ainda recomendam o atraso_job para configurações menores:

https://github.com/resque/resque

Outras dicas

Chris Wanstrath, do Github, estava no SF Ruby Meetup recentemente, falando sobre sua fila. Eles tentaram Starling, Beanstalk e algumas outras variantes antes de se estabelecer no Shopify's touched_job. Eles são bastante agressivos com o uso do fundo.

Aqui está um Postagem do blog do ano passado Isso fala sobre sua mudança para o DJ.

Onde estou agora, rolamos nossos próprios anos atrás, mas estou pegando algumas idéias do DJ para melhorar o manuseio.

eu recomendaria JOB atrasado Como uma solução simples e morta, se você não espera uma carga pesada. Prós: Fácil de configurar, fácil de monitorar, código simples, não possui dependências externas. Anteriormente, usamos o ActiveMessaging (com ActiveMQ e Stomp), mas foi um exagero para o nosso projeto, por isso mudamos para o atraso_job por sua simplicidade.

Enfim, se você precisar de uma solução muito madura e rápida, ActiveMq é uma escolha muito boa. Se você não deseja gastar muito tempo para manter a solução de fila de mensagens em grande escala que você realmente não precisa, touched_job é um caminho a percorrer. Aqui está um bom artigo Sobre a experiência do Scribd com o ActiveMQ.

Aqui estão algumas soluções Ruby/Rails, uma ou mais delas podem ser um bom ajuste, dependendo de suas necessidades:

http://xph.us/software/beansTalkd

http://rubyforge.org/forum/forum.php?forum_id=19781

http://backgroundrb.rubyforge.org

E, uma solução hospedada da Amazon, que seria uma ótima fila para compartilhar entre Ruby/Rails e outros componentes de um sistema maior:

http://aws.amazon.com/sqs

Espero que isto ajude!

O servidor de mensagens que você pode querer ir é o RabbitMQ. Erlang Folity, AMQP, Bom Ruby Libs.

http://www.bestechvideos.com/2008/12/09/rabbitmq-an-open-source-messaging-broker-that-justworks

Rany Keddo deu um Apresentação útil Sobre Starling + Trabalhando na Railsconf Europe no ano passado. Ele comparou as diferentes soluções disponíveis na época.

A última mudança do Twitter do Starling + Workling provavelmente não significa muito para o aplicativo Rails regular. Eles têm muito mais problemas de escala e provavelmente têm problemas herdados com o armazenamento de dados que os impede de escalar sua implementação atual.

BeansTalkd é uma boa alternativa, simplesmente porque é executada como daemon e tem invólucros em outros idiomas de script (se você mudar de direção no futuro ou tiver diferentes componentes escritos em outros idiomas).

este link Também possui uma boa comparação dos pros-consconários das várias soluções de Rails disponíveis.

eu uso Background_job o que gosta touched_job é uma fila baseada em banco de dados.

Um banco de dados faz uma fila OK, desde que você não esteja fazendo muito tráfego dentro e fora.

A razão pela qual eu gosto de fundo_job (e touched_job) é que eles não exigem um processo separado. Eles podem percorrer Cron. Para mim, isso é de importante importância, porque minhas necessidades de mensagens são ainda mais simples do que minhas escassas habilidades de sysadmin.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top