Besten Spring-batch-scaling-Strategie
Wir haben einfache batch-Prozesse, die funktionieren. Vor kurzem haben wir neue reqmnt die Umsetzung der neuen batch-Prozess, um Berichte zu generieren. Wir haben diff Quelle der Daten Lesen Sie zur Vorbereitung dieses reports. Speziell haben wir vielleicht einen Blick für jeden Bericht.
Nun wollen wir die Skala dieser Prozess in einer Weise, dass, es kann skaliert werden und abgeschlossen sein, so früh wie möglich.
Ich bin vertraut mit multithread-Schritt, aber nicht sicher über andere Strategie(Remote chunking und partition-Schritt) und was man Wann zu benutzen ist.
In unserem Fall Verarbeitung + schreiben in Datei resource Anreiz dann Lesen.
In solchen Fällen, welcher Ansatz am besten geeignet ist.
Oder wenn wir erfahren, dass Lesen von Daten aus db wird dieselbe Ressource Anreiz als schreiben + die Verarbeitung der Datei dann was ist die beste option, die wir haben zu verbessern/Maßstab dieser Prozess.
Du musst angemeldet sein, um einen Kommentar abzugeben.
TLDR;
Basierend auf Ihrer Beschreibung ich denke, Sie könnten versuchen, die Multi-threaded Schritt mit Synchronisierten Leser, da Sie erwähnen, verarbeiten und schreiben sind die teureren Teil von Ihrem Schritt.
Jedoch, zu sehen, wie Ihre Leser ist eine Datenbank, denke ich immer eine partitionierte Schritt konfiguriert und arbeitet, würde sich als sehr vorteilhaft. Es dauert ein wenig mehr Arbeit, aber wird so skaliert, dass auf lange Sicht besser.
Multi-threaded-Schritt
Verwenden Sie Für:
Nicht Verwenden Für:
Multi-threaded-Schritte zu nutzen, die chunk-orientierte Verarbeitung beschäftigt, die von Spring Batch. Wenn Sie die multi-thread-ein Schritt, der es ermöglicht, spring batch, die zur Ausführung eines gesamten chunk in einem eigenen thread. Beachten Sie, dass dies bedeutet, dass die gesamte lese-Prozess-write-Zyklus für Ihre Stücke von Daten erfolgt parallel. Dies bedeutet, dass es keine garantierte Reihenfolge, die für die Verarbeitung Ihrer Daten. Beachten Sie auch, dass dies nicht Arbeit mit stateful ItemReaders (JdbcCursorItemReader und JdbcPagingItemReader sind sowohl stateful).
Multi-threaded Schritt mit Synchronisiert Reader
Verwenden Sie Für:
Nicht Verwenden Für:
Es ist ein Weg, um die Einschränkung nicht in der Lage, die Verwendung von multi-threaded Schritte mit stateful Artikel die Leser. Sie können
synchronize
Ihreread()
Methode. Dies wird im wesentlichen verursachen liest geschehen Seriell (trotzdem keine Garantie auf Reihenfolge, obwohl), aber immer noch erlauben, - Verarbeitung und-schreiben parallel stattfinden. Dies kann eine gute option sein, wenn das Lesen ist nicht der Engpass, sondern die Verarbeitung oder schreiben ist.Partitionieren
Verwenden Sie Für:
Nicht Verwenden Für:
Partitionieren Schritt verhält sich etwas anders als eine multi-threaded-Schritt. Mit einer partitionierten Schritt, den Sie eigentlich haben komplett unterschiedliche StepExecutions. Jeder StepExecution Werke auf einer eigenen partition der Daten. Diese Weise der Leser nicht haben Probleme beim Lesen der gleichen Daten, da jeder Leser ist nur auf der Suche bei einem bestimmten Segment der Daten. Diese Methode ist extrem mächtig, aber auch komplizierter einzurichten als ein multi-threaded Schritt.
Remote-Chunking
Verwenden Sie Für:
Nicht Verwenden Für:
Remote-chunking ist sehr fortschrittlich, Spring Batch Einsatz. Es erfordert irgendeine form der dauerhaften middleware zum senden und empfangen von Nachrichten (z.B. JMS oder AMQP). Mit remote-chunking, das Lesen ist immer noch single-threaded, aber wie jeder chunk ist, Lesen Sie an einer anderen JVM für die Verarbeitung. In der Praxis ist dies sehr ähnlich wie eine multi-threaded Schritt funktioniert, aber remote chunking verwenden kann, mehr als eine Prozess im Gegensatz zu mehr als einem thread. Dies bedeutet, dass remote-chunking können Sie horizontal skalieren Sie Ihre Anwendung, im Gegensatz zu vertikal Skalierung. (TBH denke ich, wenn Sie denken über die Implementierung von remote-chunking, sollten Sie erwägen, einen Blick auf etwas wie Hadoop.)
Parallel Schritt
Verwenden Sie Für:
Nicht Verwenden Für:
Parallele Schritte sind nützlich, wenn Sie haben oder Schritte, die ausgeführt werden können, unabhängig. Spring batch können leicht ermöglichen, die Schritte auszuführen, die parallel in seperate threads.