2010-03-06 11 views
12

Wir entwickeln eine Webanwendung, bei der wir bei etwa 50% der Schreibanforderungen Daten an mehrere Datenspeicher übertragen und eine beträchtliche Anzahl von Datensätzen in diesen Datenspeichern einfügen und aktualisieren . Um die Antwortzeit zu verbessern, möchten wir solche Anfragen asynchron im Hintergrund bearbeiten.Resque oder Gearman - Auswahl des richtigen Tools für Hintergrundjobs

Unsere Webanwendung wird in Ruby on Rails geschrieben.

Zwei Lösungen, denen ich geneigt bin, sind Resque und Gearman.

Resque: Weitere Informationen hier: http://github.com/blog/542-introducing-resque Resque scheint sehr gut geeignet für Ruby, und es ist speziell für die Verarbeitung von Hintergrundjobs gedacht. "Hintergrund-Jobs können jede Ruby-Klasse oder jedes Ruby-Modul sein, die/das reagiert. Ihre vorhandenen Klassen können problemlos in Hintergrundjobs umgewandelt werden, oder Sie können neue Klassen erstellen, um gezielt zu arbeiten."

Gearman: Es ist nicht speziell nur für Hintergrundjobs für asynchrone Verarbeitung gedacht, aber das ist etwas, was es definitiv tun kann. Anscheinend robuster, oder so scheint es. Ein weiterer Vorteil von Gearman besteht darin, dass der Code des Clients zwar in Ruby enthalten ist, der Worker-Code jedoch in PHP. Obwohl wir gerade eine Ruby-on-Rails-App sind, wissen wir, ob wir in Zukunft vielleicht PHP oder etwas anderes verwenden wollen, je nachdem, welche Aufgabe gerade erledigt wird.

Was würden Sie empfehlen? Hast du Erfahrung mit einem der beiden? Welche Produktionsprobleme im richtigen Leben sollte ich bei der Wahl zwischen den beiden berücksichtigen? Und vergleiche ich hier sogar Apfel zu Apfel?

+2

Ich bin mit dem geschlossenen Status nicht einverstanden. Das Q ist gut formatiert und mit genügend Details versehen, um eine richtige Antwort zu liefern. Debatten sind willkommen und sollten mehr als eine Sichtweise auf die Lösung bieten. – michaelbn

Antwort

2

Ich habe einige Erfahrung mit Gearman, als ich nach einem verteilten Forking-Mechanismus suchte, der eine Workload-Verteilung für Async anbieten könnte. Verarbeitung in einer Clusterumgebung.

Ich kann Ihnen sagen, dass in einem "simulierten" Fall, in dem asynchrone Verarbeitung auf 2 Maschinen (2 Arbeiter auf jeder Maschine = 4 Arbeiter) versandt wurde gearbeitet wird. Nicht in einem realen Fall (was immer dir das sagt). Das reale Szenario wird implementiert, wenn die "Simulationen" nützliche Informationen liefern. Der von Ihnen gewählte Mechanismus ist nur ein Faktor bei der Verteilung der Arbeitslast. Stellen Sie also sicher, dass Sie keine beschädigten oder ungültigen Daten erhalten, wenn die verteilten "Worker", die parallel arbeiten, mit dem Schreiben auf den Datenspeichern beginnen .

Ich würde empfehlen, den "Simulations" -Ansatz zu nehmen, den ich gemacht habe, und Ihre Tests zu machen, bevor Sie entscheiden, welche zu verwenden.

grüße,

+0

Danke Andreas. Ich stimme zu, wir würden eine Zeit lang in der Entwicklungs-/Simulationsumgebung arbeiten, bevor wir es in der Produktion einsetzen würden. – Nishith

Verwandte Themen