Wir starten Prozesse in großen Mengen (sagen wir 100 Instanzen) in JBPM5 gleichzeitig. Und jede Aufgabe des Prozesses wird von externen Programmen asynchron gestartet und abgeschlossen. In diesem Szenario benötigt die JBPM-Engine viel Zeit, um die nächste Aufgabe zu generieren, wodurch die Gesamtleistung beeinträchtigt wird. (ZB: Es dauert im Durchschnitt 45 Minuten, um 100 Prozessinstanzen abzuschließen.) Bitte schlagen Sie eine Möglichkeit vor, die Leistung der jbpm5-Engine zu optimieren.Optimierung der Leistung der JBPM5-Engine
Antwort
Jetzt ist es schneller. Nach Abschluss der Aufgabe von
client.complete()
ich bin andeutend/Signalisierung der Server den Befehl
ksession.getWorkItemManager().completeWorkItem(id, data);
mit diesem dem Motor unter Verwendung erzeugt die nachfolgenden Aufgaben schneller und ich in der Lage könnte es für meine Verarbeitung abrufen . Aber ist dies der ideale Weg, um Aufgaben zu erledigen ..?
Etwas muss falsch oder falsch konfiguriert sein, da 45 Minuten zum Abschluss von 100 Prozessinstanzen viel zu viel erscheinen, sollte jede Anforderung im Normalfall deutlich weniger als eine Sekunde dauern. Aber es ist schwer herauszufinden, was falsch ist. Haben Sie mehr Informationen zu Ihrer Einrichtung und was kostet eigentlich viel Zeit? Welche Arten von externen Diensten rufen Sie an? Haben Sie einen Prototyp zur Verfügung, den wir uns anschauen könnten?
Kris
Ja, das klingt, als Problem in Ihrer Domäne, und nicht in Ihrem Motor. Vor einiger Zeit haben wir einige Performance-Tests für Speicherprozesse und für DB-persistente Prozesse durchgeführt und die von der Engine eingeführte Latenz betrug weniger als 2 ms pro Aktivität (im Speicher) und 5 ms pro Aktivität (in der Datenbank beibehalten). Wie genau nennen Sie die Engine, wie hosten Sie sie? Was für Anrufe machst du? Haben Sie eine Möglichkeit zu messen, wie viel Zeit Ihre externen Dienste benötigen, um zu antworten?
Prost
Wir testen mit mysql db und jboss server. –
Threads, die im Hintergrund laufen, starten und vervollständigen die Aufgaben jedes Prozesses. In der mysql db haben wir erlebt, dass nach 100 abgeschlossenen Aufgaben die neue Taskgenerierung Zeit braucht und wir vermuten, dass die Engine langsam ist. –
Es sollte nicht. Was meinst du mit Threads, die in den Rücken laufen? Menschen sollen diese menschlichen Aufgaben richtig machen? Was machen diese Threads? Sehen Sie sich die SQL-Logs an, um zu sehen, was passiert. Wahrscheinlich töten Sie die Datenbank, indem Sie Tonnen von Abfragen mit diesen Hintergrundthreads senden. – salaboy
- 1. Optimierung der JSON-Serialisierung Leistung von .NET-POCOs
- 2. Optimierung der großen Listen
- 3. Optimierung der massiven Einsatzleistung ...?
- 4. Optimierung der Array-Verarbeitung Schleife
- 5. Optimierung der CSS-Selektor
- 6. Optimierung der SQL-Verbindungsleistung?
- 7. Optimierung der Array-Transponierungsfunktion
- 8. Optimierung der Dateisuche
- 9. Optimierung der baumartigen Kontrollstruktur
- 10. Optimierung der Symbolnutzung?
- 11. Optimierung der Groovy Performance
- 12. Optimierung der Speichernutzung
- 13. Verbesserung der Leistung der räumlichen MySQL-Abfrage
- 14. Leaflet.js- und JSON-Daten: Optimierung und Leistung
- 15. Regex Leistung Optimierung Tipps und Tricks
- 16. Optimierung der Stapelmatrixmultiplikation opencl code
- 17. C++ 0x Optimierung der Compiler-Qualität
- 18. Optimierung der Ressourcen auf der Website geladen
- 19. Optimierung der Gesamtsumme der gewichteten Intervalle
- 20. Hilfe bei der Optimierung der SQL-Abfrage
- 21. Optimierung der F # -String-Manipulation
- 22. Optimierung der Aufteilung in gcc
- 23. Optimierung der CGLayer-Methode drawRect
- 24. Optimierung der Erstellung eines Formulars
- 25. Geschwindigkeit Optimierung in der Codierung?
- 26. Optimierung der Warteschlange in mysql
- 27. Partikelschwarm-Optimierung - Aktualisieren der Partikelposition
- 28. Programmatische Steuerung der Python-Optimierung?
- 29. Mögliche Optimierung der Bytecode-Sequenz
- 30. Optimierung der SQL Server-Datenbank
Der Beispielworkflow enthält 8 menschliche Aufgaben und der Krieg wird in jboss Server- und Daemon-Threads im Hintergrund ausgeführt. Beim Start von 100 Prozessen startet der Thread alle reservierten Aufgaben und ein anderer Thread beendet die Inprogress-Aufgaben. Der Start und die Fertigstellung der ersten Aufgabe aller Prozesse ist schneller, aber die Erzeugung späterer Aufgaben ist langsamer und benötigt viel Zeit. –
Jetzt ist es schneller. Nach Abschluss der Aufgabe von client.complete() Ich bin/signalisieren den Server mit ksession.getWorkItemManager(). CompleteWorkItem (ID, Daten); mit diesem erzeugt die Engine die nachfolgenden Aufgaben schneller und ich konnte es für meine Verarbeitung abrufen. Aber ist dies der ideale Weg, um Aufgaben zu erledigen? –