Pergunta

Eu estou perto de lançar um aplicativo de trilhos com as funcionalidades de rede comuns (mensagens, parede, etc.). Eu quero usar algum tipo de processamento em segundo plano (o mais provável Bj) para tarefas off-loading do ciclo pedido / resposta.

Isso aconteceria quando os usuários convidar amigos via e-mail para entrar e para as notificações de e-mail.

Eu não tenho certeza se eu deveria apenas deixar cair estes convida e notificações em meu banco de dados, usando um modelo e, em seguida, apenas processá-lo com um processo de trabalho a cada x minutos, ou se eu deveria ir para o Amazon SQS, armazenar as mensagens e os convites lá e deixar meu trabalhador recuperá-lo de Amazon SQS para o processamento (enviando os convites / notificações).

A abordagem Amazon iria receber carga fora de meu banco de dados, mas eu acho que é mais lento para recuperar mensagens de lá.

O que você acha?

Foi útil?

Solução

Seus membros do título que você tem um problema de desempenho Rails, mas você sabe isso com certeza? Do resto da sua pergunta, parece que você está tentando antecipar um possível problema de desempenho futuro. A única maneira de lidar de forma sensata com problemas de desempenho é fazer com que sua aplicação para a vida selvagem e perfil dele. Se o fizer, vai lhe dar dados empíricos, como o que os problemas de desempenho real são.

Dado que a Amazon SQS não é livre e o fato de que a usá-lo quase certamente irá adicionar complexidade para a sua aplicação, gostaria de migrar para ele se e quando carga de banco de dados torna-se um problema. Não tente adivinhar problemas antes que eles surjam, porque você vai achar que você provavelmente vai enfrentar diferentes problemas quando o seu aplicativo vai viver, alguns dos quais você provavelmente não ter considerado.

O ponto principal é que você já decidiu o processamento o uso do fundo, que é a decisão correta, uma vez que qualquer tipo de processamento que não é instantânea não pertence dentro do ciclo pedido / resposta as Rails', como ele blocos que o Rails processo. Você sempre pode escalar com a Amazon mais tarde, se você precisa.

Outras dicas

O seu aplicativo hospedado na Amazon EC2 já? Eu provavelmente não iria mover um aplicativo existente sobre a AWS só assim eu posso usar SQS, mas se você já está usando a infraestrutura da Amazon, SQS ia uma ótima escolha. Você certamente poderia criar o seu próprio sistema de mensagens (como RabbitMQ), mas indo com SQS que é menos uma coisa que você tem que se preocupar.

Há uma série de opções para adicionar o processamento de fundo para aplicações Rails, como delayed_job ou < a href = "http://codeforpeople.rubyforge.org/svn/bj/trunk/README" rel = "nofollow noreferrer"> background_job , mas o meu favorito é Workling . Dá-lhe uma camada agradável abstração que permite que você conecte em diferentes corredores de fundo sem ter que mudar a implementação efectiva dos seus postos de trabalho.

I manter um Workling garfo que acrescenta um cliente SQS. Existem algumas deficiências (ler os comentários ou meu blog para mais detalhes), mas no geral ele funcionou bem para nós na minha última inicialização.

Eu também usei SQS para um rubi separado (não-Rails) projeto e geralmente encontrada confiável e rápido o suficiente. Como James apontado acima, você pode ler até 10 mensagens de uma vez, então você definitivamente vai querer fazer isso (o meu cliente Workling SQS faz isso e buffers as mensagens localmente).

Eu concordo com John Topley que você não quer excesso de complicar a sua aplicação se você não precisa. Dito isto, há momentos em que é bom para fazer este tipo de decisão rápida, você pode antecipar alta carga desde o início? Você está rolando isso para uma base de usuários existentes ou é um site público que podem ou não podem decolar?

Se você sabe que vai precisar para lidar com uma grande quantidade de tráfego desde o início, em seguida, isso pode ser um bom passo. Se você não quer gastar o dinheiro para usar SQS dar uma olhada em algumas das soluções de fila livres lá fora, como RabbitMQ.

Actualmente, eu empurrar um casal milhões de mensagens por mês através SQS e ele funciona muito bem. Certifique-se de que você planeja para ele ser baixo ou lento ao longo do tempo, então você precisa trabalhar em algumas instalações de repetição e backoff exponencial. Uma das coisas boas é que você pode obter 10 mensagens de cada vez que acelera ser capaz de trabalho através da fila, você pode usar um pedido para obter as 10 mensagens e processá-los 1 por 1.

Amazon SQS é um serviço muito bem, exceto quando as seguintes coisas tornam-se importantes:

  • Desempenho
  • Legal
  • Reconhecimentos e Transações
  • Mensagens Idioms Propriedades Mensagem
  • Segurança, Autenticidade e Queue
  • Permissões

Se qualquer uma dessas coisas são importantes que você precisa olhar para um serviço MQ verdadeira empresa, como StormMQ, RabbitMQ, ou mesmo onlinemq.com.

Eu encontrei este interessante série blog como ele se compara Amazon SQS para StormMQ sem manter qualquer socos de volta: http://blog.stormmq.com/2011/01/ 06 / maçãs-e-laranja-performance /

Se você tiver problemas com o movimento para EC2, você pode usar outros serviços como onlinemq.com.

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