Frage

Ich bin in der Nähe einer Rails-Anwendung mit den gemeinsamen Netzwerkfunktionen (Messaging, Wand, etc.) zu veröffentlichen. Ich möchte eine Art von Hintergrundverarbeitung verwenden (höchstwahrscheinlich Bj) für Abladen Aufgaben aus dem Request / Response-Zyklus.

Dies würde passieren, wenn Benutzer E-Mail-Freunde über zur Teilnahme einladen und für E-Mail-Benachrichtigungen.

Ich bin mir nicht sicher, ob ich sollte nur diese einlädt und Mitteilungen in meiner Datenbank löschen, ein Modell und dann einfach alle x Minuten mit einem Arbeitsprozess verarbeiten oder wenn ich für Amazon SQS gehen sollte, um die Nachrichten zu speichern und lädt ein da und ließ meine Arbeiter es von Amazon SQS für die Verarbeitung abrufen (Senden der Einladungen / Mitteilungen).

Der Amazon Ansatz würde meine Datenbank erhalten lädt ab, aber ich denke, es ist langsamer Nachrichten abrufen von dort aus.

Was denken Sie?

War es hilfreich?

Lösung

Ihr Titel besagt, dass Sie ein Rails-Performance-Problem haben, aber wissen Sie, diese für sicher? Von dem Rest Ihrer Frage klingt es wie Sie eine mögliche zukünftige Performance-Problem zu antizipieren versuchen. Der einzige Weg, vernünftig mit Performance-Problemen zu behandeln ist Ihre Anwendung in die Wildnis zu erhalten und es profilieren. Dadurch wird man empirische Daten geben, was die wirklichen Performance-Probleme sind.

Da Amazon SQS nicht frei ist und die Tatsache, dass es mit an Sicherheit grenzender Wahrscheinlichkeit der Komplexität Ihrer Anwendung hinzufügen, ich sie wandern würde , wenn und , wenn Datenbanklast wird zu einem Problem. Versuchen Sie nicht, auf die zweite Vermutung Probleme, bevor sie entstehen, weil Sie, dass Sie wahrscheinlich haben unterschiedliche Probleme finden werden, wenn die App live geht, von denen einige Sie wahrscheinlich nicht in Betracht gezogen haben.

Der wichtigste Punkt ist, dass Sie bereits entschieden haben, die Hintergrundverarbeitung zu verwenden, was die richtige Entscheidung ist gegeben, dass jede Art von Verarbeitung, die nicht sofort ist gehört nicht innerhalb der Rails' Request / Response-Zyklus, wie es Blöcke, die Prozessschiene. Sie können jederzeit mit Amazon skalieren später, wenn Sie benötigen.

Andere Tipps

Ist Ihre App bereits auf Amazon EC2 gehostet? Ich würde wahrscheinlich nicht eine bestehende App über AWS bewegen nur so kann ich SQS verwenden, aber wenn Sie bereits Amazons Infrastruktur, SQS ia eine große Wahl. Sie könnten sicherlich Ihr eigenes Nachrichtensystem (wie RabbitMQ) eingerichtet, aber durch mit SQS gehen, dass man weniger, was Sie zu befürchten ist.

Es gibt eine Menge von Optionen Hintergrundverarbeitung zu Rails-Anwendungen, wie zum Beispiel delayed_job oder hinzufügen < a href = "http://codeforpeople.rubyforge.org/svn/bj/trunk/README" rel = "nofollow noreferrer"> background_job , aber mein persönlicher Favorit ist Workling . Es gibt Ihnen eine schöne Abstraktionsschicht, die Sie in anderen Hintergrund Läufern anschließen können, ohne die tatsächliche Umsetzung Ihrer Aufträge zu ändern.

Ich halte einen Workling Gabel, die eine SQS-Client hinzufügt. Es gibt einige Mängel (lesen Sie die Kommentare oder mein Blog-Post für weitere Details), aber insgesamt war es bei meinem letzten Start für uns gut.

Ich habe auch SQS für ein separaten Rubin (nicht-Rails) Projekt verwendet und in der Regel fand es zuverlässig und schnell genug. Wie James oben erwähnt, können Sie auf einmal zu 10 Nachrichten lesen, also sollten Sie auf jeden Fall tun, dass (mein Workling SQS-Client dies tut und puffert die Nachrichten lokal).

ich mit John Topley erklären, dass Sie nicht wollen Ihre Anwendung über komplizieren, wenn Sie nicht brauchen. That being said es Zeiten gibt, wenn es gut ist, diese Art von Entscheidung früh zu machen, haben Sie hohe Belastung von Anfang an antizipieren? Sind Sie das Ausrollen zu einem bestehenden Nutzerbasis oder ist es eine öffentliche Website, die nicht ausziehen kann oder?

Wenn Sie wissen, benötigen Sie eine große Menge an Datenverkehr von Anfang an zu handhaben, dann könnte dies ein guter Schritt. Wenn Sie möchten, dass das Geld nicht ausgeben SQS verwenden einen Blick auf einige der freien Warteschlange Lösungen gibt wie RabbitMQ.

ich zur Zeit schieben ein paar Millionen Nachrichten pro Monat durch SQS und es funktioniert ziemlich gut. Stellen Sie sicher, dass Sie planen, es zu sein oder langsam von Zeit zu Zeit, so müssen Sie würden in einigen Einrichtungen und exponentielles Backoff versuchen zu arbeiten. Eines der schönen Dinge ist, dass Sie 10 Nachrichten zu einer Zeit erhalten können, die durch die Warteschlange in der Lage, Geschwindigkeiten von bis zu arbeiten, können Sie eine Anfrage verwenden, um die 10 Nachrichten zu erhalten und ihnen 1 von 1

verarbeiten

Amazon SQS ist ein guter Service, es sei denn, folgende Dinge wichtig geworden:

  • Performance
  • Legal
  • Anerkennungen und Transaktionen
  • Messaging Idiom Nachrichteneigenschaften
  • Sicherheit, Authentizität und Queue
  • Berechtigungen

Wenn alle diese Dinge wichtig sind, müssen Sie in einem echten Unternehmen MQ-Service aussehen wie StormMQ, RabbitMQ oder sogar onlinemq.com.

Ich habe diese Blog-Serie interessant, da es Amazon SQS vergleicht mit harten Bandagen StormMQ zurück, ohne zu Halten: http://blog.stormmq.com/2011/01/ 06 / Äpfel-und-Orangen-Performance /

Wenn Sie Probleme mit Umzug nach EC2 haben, können Sie andere Dienste nutzen wie onlinemq.com.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top