Ich habe einen Stapeljob, von dem erwartet wird, dass er etwa 1k-Tasks gleichzeitig verarbeitet. Und jede Aufgabe dauert durchschnittlich etwa 12 - 16 Minuten.Entwurfsansätze für die Stapelverarbeitung paralleler Tasks
In der aktuellen Implementierung werden alle Aufgaben in eine blockierende Warteschlange geschoben. Es gibt einen Thread, der eine Aufgabe aus dieser Warteschlange aufruft und verarbeitet. Für die Aufgabe verwenden wir den Java-Executor-Dienst für die gleichzeitige Ausführung und sobald alle seine Unteraufgaben verarbeitet sind, markieren wir diese Aufgabe als abgeschlossen und lesen eine andere Aufgabe aus der Warteschlange. Wir können die Verarbeitungszeit der Aufgabe nicht optimieren, da sie die native Bibliothek aufruft und nicht weiß, was sie intern tut.
Mit der aktuellen Implementierung sind wir in der Lage, rund 300 Aufgaben in mehr als 24 Stunden zu bearbeiten.
Ich bin auf der Suche nach einer geeigneten Plattform oder einem Framework, das helfen könnte, die Verarbeitungszeit zu reduzieren.
Ich bin mit Java 1.7, OSGi und Apache Karaf als Container
PS: Die Aufgabe hier ist Abbau bestimmter Bilder von 500 MB bis hin - 4 GB in kleine Stücke und in JPEG-Format
Speicherung
Haben Sie an einem Punkt 100% CPU-Last oder HDD-Last? – Jeroen
ja beide CPU und Netzwerk (da wir aus dem Netzwerk verarbeiten) zeigen 100% Auslastung – Sandeep
über die vollen 24 Stunden? Wenn ja, würde ich annehmen, dass die native lib einfach so lange dauert. –