2013-08-16 11 views
9

Ich möchte sidekiq so einrichten, dass es auf einem separaten Host von meiner Rails-App ausgeführt wird, um den Webserver beim Ausführen speicherintensiver Hintergrundaufgaben nicht zu belasten.Kann sidekiq auf einem separaten Host vom Rails-Host ausgeführt werden?

Welche Konfigurationsdetails muss ich betrachten?

Gibt es dafür Best Practices oder Konfigurationen?

EDIT:

Um zu klären, was ich zu fragen, meine ist, wie konfiguriere ich Schienen, so dass sidekiq API-Aufrufe (MyWorker.perform_async) laufen würde, wenn der sidekiq Prozess nicht lokal ausgeführt wird?

+0

Bist du durch [dieses Wiki auf Sidekiqs Github-Seite] gegangen (https://github.com/mperham/sidekiq/wiki/Advanced-Options)? – Kashyap

+0

Ja, aber ich konnte nichts finden, was damit zusammenhängt. Bitte korrigieren Sie mich, falls ich falsch liege. – Ovesh

Antwort

13

bearbeiten

Vor alles anderen zu klären, sollten Sie verstehen, dass, wenn Sie perform_async laufen, es ist einfach die Jobs in eine Warteschlange Redis klebt. Sidekiq überwacht diese Warteschlange und führt Jobs aus, wenn sie eintreffen. Solange Ihre App und Ihr Sidekiq auf denselben Redis-Server (und natürlich dieselbe Datenbank) zugreifen, werden die Dinge funktionieren.

Ursprüngliche Antwort

Zuerst wird, wie Sie wahrscheinlich erraten kann, wird es ein Duplikat der Kasse des Codes benötigen, damit sie ausgeführt werden können. Keine große Sache.

Zweitens benötigt es Zugriff auf Ihre Datenbank und Redis-Server auf der anderen Box. Das bedeutet, dass diese Ports auf dem anderen Server offen sind. Das kann knifflig werden, b/c möchten Sie idealerweise nicht diejenigen, die dem offenen Internet ausgesetzt sind. Bei einem Multi-Box-Setup ist normalerweise nur eine Box für das offene Internet verfügbar. Er kommuniziert mit dem Rest Ihrer Frachten über privaten IPs:

öffentlichen Web-Server

Apache/Nginx Runs und vielleicht Ihre App-Servern.

Privat App Server (n) (optional)

Laufen Ihren App-Server, wenn sie auf dem öffentlichen Server nicht ausgeführt werden. Stellt eine Verbindung zu Ihrer Datenbank und Ihrem Redis-Server her.

Privat Sidekiq Server (n) (optional)

Läuft Sidekiq. Stellt eine Verbindung zu Ihrer Datenbank und Ihrem Redis-Server her.

Private Database/Redis Server

Läuft Datenbank und Redis. Natürlich können sie bei Bedarf auf verschiedene Server aufgeteilt werden.

+0

Ich denke, meine Frage war, wenn Sie 'MyWorker.perform_async' aufrufen, wie würde es funktionieren, wenn sidekiq nicht lokal läuft? Wie ist das konfiguriert? – Ovesh

+0

Es ist wie oben beschrieben konfiguriert. Zeigen Sie Sidekiq auf den Host, auf dem Redis läuft (anstelle von "localhost: 6379").Es ist wirklich nichts anderes daran. – bioneuralnet

+2

Anders gesagt: Statt Sidekiq lokal zu booten, haben Sie einen anderen Host erstellt, Ihre Rails-App installiert, auf den ursprünglichen Server auf die DB- und Redis-Konfiguration verwiesen und dann Sidekiq gebootet. Fertig, das ist alles was sich geändert hat. – bioneuralnet

Verwandte Themen