Question

Je suis proche de libérer une application de rails avec les fonctions de réseau commun (messagerie, mur, etc.). Je veux utiliser une sorte de traitement de fond (très probablement Bj) pour les tâches hors chargement de la demande / cycle de réponse.

Ce serait le cas lorsque les utilisateurs inviter des amis par courrier électronique à rejoindre et pour les notifications par e-mail.

Je ne sais pas si je devrais laisser tomber ces invitations et des notifications dans ma base de données, en utilisant un modèle, puis traiter simplement avec un processus de travail toutes les x minutes ou si je dois aller pour Amazon SQS, stocker les messages et les invitations là-bas et que mon travailleur le récupérer d'Amazon SQS pour le traitement (envoi des notifications / Invite).

L'approche Amazon obtiendriez charger de ma base de données, mais je suppose qu'il est plus lent à récupérer des messages à partir de là.

Que pensez-vous?

Était-ce utile?

La solution

Votre titre indique que vous avez un problème de performance Rails, mais savez-vous pour certains? Du reste de votre question, il semble que vous essayez d'anticiper un problème de performance future. La seule façon de traiter judicieusement les problèmes de performance est d'obtenir votre application dans la nature et le profil il. Cela vous donnera des données empiriques à ce que les problèmes réels de performance sont.

Étant donné que Amazon SQS est pas libre et le fait que l'utiliser ajoutera certainement la complexité à votre application, je migrer vers elle si et lorsque charge de base de données devient un problème. Ne pas essayer de deviner les problèmes de deuxième avant qu'ils ne surviennent, parce que vous vous rendrez compte que vous faites face probablement différents problèmes lorsque votre application va vivre, que certains d'entre vous ont probablement pas pris en considération.

Le point principal est que vous avez déjà décidé d'utiliser le traitement de fond, ce qui est la bonne décision, étant donné que toute sorte de traitement qui n'est pas instantanée n'appartient pas dans la demande de Rails / cycle de réponse, comme blocs processus rails. Vous pouvez toujours l'échelle avec Amazon plus tard si vous avez besoin.

Autres conseils

est votre application hébergé sur Amazon EC2 déjà? Je ne serais probablement pas déplacer une application existante vers AWS juste que je peux utiliser SQS, mais si vous utilisez déjà l'infrastructure d'Amazon SQS ia un excellent choix. Vous pouvez certainement mettre en place votre propre système de messagerie (comme RabbitMQ), mais en allant avec SQS qui est une chose de moins vous avez à vous soucier.

Il y a beaucoup d'options pour ajouter un traitement de fond à des applications Rails, comme delayed_job ou < a href = "http://codeforpeople.rubyforge.org/svn/bj/trunk/README" rel = "nofollow noreferrer"> background_job , mais mon préféré est workling . Il vous donne une belle couche d'abstraction qui vous permet de brancher différents coureurs de fond sans avoir à changer la mise en œuvre effective de vos travaux.

Je maintiens un Workling fourche qui ajoute un client SQS . Il y a quelques lacunes (lire les commentaires ou mon blog pour plus de détails), mais dans l'ensemble il a bien fonctionné pour nous à mon dernier démarrage.

J'ai aussi utilisé SQS pour un projet distinct Ruby (non-Rails) et généralement trouvé fiable et assez rapide. Comme James a souligné ci-dessus, vous pouvez lire jusqu'à 10 messages à la fois, vous aurez certainement envie de le faire (mon Workling SQS client le fait et les tampons des messages localement).

Je suis d'accord avec John Topley que vous ne voulez pas si vous n'avez pas besoin trop compliquer votre application. Cela étant dit, il y a des moments où il est bon de faire ce genre de décision rapide, anticipez-vous une charge élevée depuis le début? Est-ce que vous rouler ceci à une base d'utilisateurs existants ou est un site public qui peuvent ou peuvent ne pas enlever?

Si vous savez que vous devrez gérer une grande quantité de trafic depuis le début, alors ce pourrait être une bonne étape. Si vous ne voulez pas dépenser l'argent pour utiliser SQS jeter un oeil à quelques-unes des solutions libres de file d'attente là-bas comme RabbitMQ.

Je pousse actuellement deux millions de messages par mois par SQS et il fonctionne assez bien. Assurez-vous de planifier étant en panne ou lent de temps en temps, donc vous devez travailler dans certains équipements et nouvelles tentatives backoff exponentielle. L'une des belles choses est que vous pouvez obtenir 10 messages à un moment qui accélère pouvoir travailler dans la file d'attente, vous pouvez utiliser une requête pour obtenir les 10 messages et de les traiter 1 par 1.

Amazon SQS est un service bien, sauf si les choses suivantes deviennent importantes:

  • Performance
  • juridique
  • Remerciements et transactions
  • Messagerie idiomes Propriétés du message
  • Sécurité, authenticité et file d'attente
  • Autorisations

Si l'une de ces choses sont importantes dont vous avez besoin de regarder un vrai service MQ d'entreprise comme StormMQ, RabbitMQ, ou même onlinemq.com.

J'ai trouvé cette série de blog intéressant car il compare Amazon SQS à StormMQ sans tenir des coups de poing en arrière: http://blog.stormmq.com/2011/01/ 06 / pommes et des oranges performance /

Si vous avez des problèmes avec le déplacement à EC2, vous pouvez utiliser d'autres services comme onlinemq.com.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top