2010-05-01 10 views
5

Ich möchte eine Art verteiltes Setup erstellen, um eine Tonne kleiner/einfacher REST-Webabfragen in einer Produktionsumgebung auszuführen. Für jede 5-10 verwandte Abfrage, die von einem Knoten ausgeführt wird, erzeuge ich eine sehr kleine Menge abgeleiteter Daten, die in einer relationalen Standarddatenbank (wie PostgreSQL) gespeichert werden müssen.Lösung für die Verteilung VIELE einfache Netzwerkaufgaben?

Welche Plattformen sind für diese Art von Problemsatz gebaut? Die Natur, Datengrößen und Mengen scheinen der Denkweise von Hadoop zu widersprechen. Es gibt auch mehr Gitter-basierte Architekturen wie Condor und Sun Grid Engine, die ich erwähnt habe. Ich bin mir nicht sicher, ob diese Plattformen irgendeine Wiederherstellung von Fehlern haben (Überprüfung, ob ein Job erfolgreich ist).

Was ich wirklich gerne eine FIFO-Art Warteschlange wäre, der ich Jobs hinzufügen könnte, mit dem Endergebnis meiner Datenbank aktualisiert wird.

Irgendwelche Vorschläge für das beste Werkzeug für den Job?

+0

Klingt ziemlich ähnlich zu einem (proprietären) Überwachungsprogramm Ich bin am Ende. Es lädt regelmäßig in konfigurierbaren Intervallen von mehreren URLs herunter, analysiert und speichert die Ergebnisse in einer PostgreSQL-Datenbank. Ich habe dies als ein einzelnes C++ - Programm implementiert, das eine Prioritätswarteschlange von Download-Jobs verwaltet (eigentlich eine std :: map, weil Jobs entfernt werden müssen, wenn die Überwachung deaktiviert ist) und libcurl verwendet, um das Herunterladen durchzuführen. Ich habe mich nicht damit befasst, die Ergebnisse zu bündeln, hauptsächlich weil das Überwachungsprogramm und die Datenbank auf demselben Server leben. Ich habe nicht wirklich eine Plattform benutzt, also +1 :-) –

Antwort

1

Haben Sie sich Celery angesehen?

+0

Das Projekt sieht interessant aus, obwohl es ziemlich jung ist. Ich bin mir auch nicht sicher über seine Robustheit, basierend auf den FAQ: "Ein Grund, dass die Warteschlange nie geleert wird, könnte sein, dass du einen abgestandenen Sellerieprozess hast, der die Nachrichten als Geisel nimmt. Das könnte passieren, wenn Selleryd nicht richtig heruntergefahren wird." Auch die Django-Abhängigkeit ist irgendwie ärgerlich: "Obwohl es möglich ist, Sellerie von außerhalb von Django zu verwenden, brauchen wir Django selbst, um zu laufen, dies ist die Verwendung des ORM- und Cache-Frameworks." – EmpireJones

+0

@empirejones Eigentlich ist dieser FAQ-Eintrag nicht mehr relevant. Hier ging es darum, gerade wartende Jobs in der Warteschlange zu löschen. Ein Worker kann einige Jobs im Voraus reservieren (aufgrund der Prefetch-Zählung). Wenn der Worker die Brokerverbindung löscht, werden die Jobs an anderer Stelle gesendet (oder an denselben Worker, wenn die Verbindung wieder hergestellt wird). Die damit verbundenen Bugs sind nun behoben, es stellte sich heraus, dass es ein Problem mit Multiprocessing und Forking war. – asksol

Verwandte Themen