2012-03-24 8 views
0

Ich arbeite derzeit an einem College-Projekt, in dem wir einen Content Extractor für das World Wide Web erstellen. Dafür haben wir bisher zwei Module: einen Web-Crawler und einen Indexer, der auf zwei separaten Rechnern läuft. Wir planen, weitere Module hinzuzufügen, während unsere Arbeit fortschreitet, aber im Moment brauchen wir einige Kommunikationsmittel zwischen den 2, irgendeine Form der Nachrichtenübergabe.Java Distributed Application - Message Passing

Was wir unsicher sind, ist die folgende:

(i) Wir glauben, dass unsere Anwendung nicht synchrone Nachricht benötigt vorbei. Grundsätzlich crawlt das Crawler-Modul die Webseiten und ruft das Indexer-Modul auf, wenn es eine bestimmte Seite besucht. Also sollten wir weiter gehen und ein asynchrones Protokoll (wie JMS) wählen oder gibt es einen Vorteil, stattdessen ein synchrones Protokoll zu verwenden?

(ii) Wir denken derzeit über die Verwendung von JMS nach, vielleicht mit Google-Protokoll-Puffern, um die notwendigen Daten (URLs) zwischen den beiden Rechnern zu übermitteln. Wäre das angemessen oder gibt es bessere Möglichkeiten?

Unser Hauptkriterium für ein geeignetes Protokoll wäre Skalierbarkeit, gefolgt von Geschwindigkeit.

Dies ist das erste Mal, dass wir an einer verteilten Anwendung jeglicher Art arbeiten. So würde jede mögliche Hilfe geschätzt :)

Danke :)

Antwort

1

ich auf ein ähnliches System arbeitete für die Echt vor ein paar Jahren, wo der Web-Crawler war auf der Suche nach Malware-Websites auf eine Liste von schwarzen hinzufügen aufgelistet Websites (es war eine Sicherheitsfirma).

Unsere Crawler arbeiteten unabhängig von den Arbeitern. Dies ermöglichte bessere Skalierbarkeit und Leistung.

Die Crawler legen Daten in einen DB. Ein Job würde dann in regelmäßigen Abständen starten und unverarbeitete Datensätze abrufen (ich denke, wir hatten eine Statusspalte) und dann an die Worker-Threads zur parallelen Verarbeitung übergeben.

Wenn ich dies heute tun würde, würde ich eine nosql DB wie mongodb und einige Karte reduzieren Algorithmus verwenden.

hoffe, das ist nützlich.

Rakesh

+0

Vielen Dank :) Das Indexer-Modul verwendet derzeit mongodb. Was sind die Vorteile von Map-Reduce gegenüber einfacher Nachrichtenübergabe? Derzeit beschäftigen wir uns nicht mit Maschinenclustern, sondern nur mit einzelnen Computern pro Modul. Ich dachte, dass map-reduce später benötigt würde, wenn wir die Arbeit eines einzelnen Moduls über mehrere Maschinen verteilen, habe ich recht? – arya