2010-12-14 19 views
0

Ich muss gleichzeitig eine große Anzahl von Dateien (Tausende von verschiedenen Dateien mit einer durchschnittlichen Größe von 2 MB pro Datei) verarbeiten.Mehrere Maschinen - mehrere Dateien gleichzeitig verarbeiten?

Alle Informationen werden auf einer (1,5 TB) Netzwerkfestplatte gespeichert und von ungefähr 30 verschiedenen Maschinen abgerufen (gelesen). Aus Effizienzgründen wird jede Maschine verschiedene Dateien lesen (und verarbeiten) (es gibt Tausende von Dateien, die verarbeitet werden müssen).

Jede Maschine - nach dem Lesen einer Datei aus dem Ordner "incoming" auf der 1,5 TB Festplatte - wird die Informationen verarbeiten und bereit sein, die verarbeiteten Informationen zurück in den 'verarbeiteten' Ordner auf der 1,5 TB Laufwerk. Die verarbeiteten Informationen für jede Datei haben ungefähr die gleiche durchschnittliche Größe wie die Eingabedateien (ungefähr ~ 2 MB pro Datei).

Gibt es "do" und "donts" wenn man eine solche Operation baut? ist es ein Problem, wenn 30 Maschinen gleichzeitig Informationen auf demselben Netzlaufwerk lesen (oder schreiben)? (Hinweis: vorhandene Dateien werden nur gelesen, nicht angehängt/geschrieben; neue Dateien werden von Grund auf neu erstellt, so dass es keinen Problem mit Mehrfachzugriff auf die gleiche Datei gibt ...). Gibt es Engpässe, die ich erwarten sollte?

(ich bin benutze Linux, Ubuntu 10.04 LTS auf allen Maschinen, wenn es alle Angelegenheiten)

+2

Es hängt wirklich davon ab, wie viel Verarbeitung Sie für jede Datei tun - zu wenig und Festplattenzugriff ist Ihr Engpass. –

Antwort

1

Dinge, die Sie denken sollten:

Wenn die Verarbeitung für jede Datei zu tun ist einfach, dann echte Engpass ist nicht die Menge paralleler Dateien, die Sie lesen, sondern die Fähigkeiten des Festplattenlaufwerks.

Wenn die Verarbeitung nicht lange dauert (z. B. einige Sekunden pro Datei), werden Sie über einen Punkt hinausgehen, bei dem das Hinzufügen von mehr Prozessen nur einen Crawl verlangsamt, da jeder Prozess Ergebnisse liest und schreibt Festplatte kann nur so viel tun.

Versuchen Sie, den Festplattenzugriff zu minimieren: Laden Sie z. B. Dateien herunter und produzieren Sie Ergebnisse lokal, während andere Prozesse heruntergeladen werden, und senden Sie die Ergebnisse zurück, wenn die Auslastung der Festplatte sinkt.

Je mehr ich schreibe, desto mehr läuft es darauf hinaus, wie viel Verarbeitung für jede Datei gemacht werden muss. Wenn es einfach zu analysieren ist, wird etwas, das Millisekunden dauert, 1 Maschine oder 30 wenig ausmachen.

+0

Vielen Dank für Ihre Antwort. Es ist ein Engpass, die 30 Maschinen gleichzeitig "lesen" zu lassen (ohne "schreiben")? wie viele Maschinen könnte ich (grob) betreiben, ohne einen Engpass zu verursachen? – user3262424

+0

Ohne Systemdetails nicht zu sagen. Führen Sie einen Test aus, lassen Sie Prozesse gleichzeitig vom Laufwerk anfordern und sehen Sie, wie die Leistung skaliert wird. – slezica

+0

Danke. Gibt es Tools, mit denen ich die Netzwerkleistung überwachen kann? – user3262424

0

Sie müssen darauf achten, dass zwei Worker-Prozesse nicht die gleiche Arbeit zur gleichen Zeit aufnehmen (und versuchen).

Leider haben NFS-Dateisysteme keine Semantik, mit denen Sie dies leicht tun können.

Also, was ich empfehlen würde, ist etwas wie Gearman und ein Hersteller/Verbraucher-Modell zu verwenden, wo ein Prozess Arbeit gibt, wer verfügbar ist, es zu tun.

Eine andere Möglichkeit besteht darin, eine Datenbank (z. B. mysql) mit einer Tabelle aller Aufgaben zu haben, und die Prozesse automatisch Aufgaben für sich selbst "zu beanspruchen".

Aber das alles lohnt sich nur, wenn Ihre Prozesse meist CPU-gebunden sind. Wenn Sie versuchen, mit mehreren Clients mehr E/A-Bandbreite (oder -Operationen) aus Ihrem NAS zu holen, wird es nicht funktionieren.

Ich gehe davon aus, dass Sie hier mindestens Gigabit-Ethernet betreiben (oder es ist es wahrscheinlich nicht wert).

Haben Sie versucht, mehrere Prozesse auf demselben Computer auszuführen?

+0

Danke. Ich habe (noch) nicht versucht, mehrere Prozesse auf dem gleichen Rechner laufen. Können Sie abschätzen, wie viele Maschinen ich (grob) fahren könnte, ohne einen Engpass zu verursachen? – user3262424

Verwandte Themen