2009-04-23 5 views
2

Windows Workflow Foundation weist ein langsames Problem auf, wenn WF-Instanzen persistent bleiben. Ich plane, ein Projekt zu machen, dessen Business-Layer auf WF-exponierten WCF-Services basieren wird. Das Projekt wird jeden Monat 20.000 neue Workflow-Instanzen erstellen. Jede Instanz kann bis zu zwei Monate dauern. Was ich dazu gebracht habe zu glauben, dass die gegebene WF in der Perversität langsamer wird, wäre mein gegebenes Problem aus Leistungsgründen unerreichbar. Ich habe die folgenden Fragen:WF-Leistung mit neuen 20.000 persistenten Workflowinstanzen pro Monat

  1. Ist das wahr? Wird meine Leistung mit dieser Last Mist sein (gegeben WF persitative Geschwindigkeitsbegrenzungen)
  2. Wie kann ich das Problem lösen?

Wir haben derzeit zwei mögliche Lösungen: 1. Jede neue buisiness Prozessanforderung (zB Geben Sie mir einen neuen Führerschein) wird eine neue WF-Instanz, und die Anzahl der persistance Operationen werden durch Weiterleiten alle Status begrenzt Anfordern von Operationen zum Speichern von Statuswerten in einer separaten Datenbank. 2. Lassen Sie nur eine kleine Anzahl von Workflow-Instanzen zu jeder gegebenen Zeit ohne jegliche Persistenz (nur im Falle von Systemabstürzen usw.) laufen, indem Sie jeden Workflow-Stack in eine separate Arbeitsumgebung und diesen Workflow für jeden Geschäftsprozess auflösen Anforderungsinstanz in dem System, das sich in diesem aktuellen Schritt befindet (z. B. gebe ich mein Führerscheinanforderungsformular ein, was Schritt 1 ist ... wir haben 100 Fälle davon und mein Schritt-Eins-Workflow wird jeden Fall gleichzeitig bearbeiten).

Ich bin sehr interessiert an der Lösung für dieses Problem. Wenn Sie dieses Problem diskutieren möchten, bitte frei sein, mich unter [email protected] zu mailen

Antwort

2

Die Anzahl der hydratisiert Ausführen von Wokflows wird durch Umweltfaktoren Speicherserver durch setzen usw. Persistenz Problem wirklich nur ins Spiel kommen, wenn Sie Laden und Entladen Arbeitsabläufe die ganze Zeit aka reale (ish) Zeit in diesem Fall Workflow ist möglicherweise nicht die beste Lösung.

+1

Seien Sie auch vorsichtig mit der Ebene der Ereignisse, die Sie im Transaktionslog verfolgen. Ihre Datenbank kann sehr schnell sehr voll werden. – Wedge

2

In meinem aktuellen Projekt verwenden wir auch WF mit Persistenz. Wir haben nicht das gleiche Volumen (vielleicht ~ 2000 Instanzen/Monat), und sie sind normalerweise nicht so lang zu vervollständigen (sie sind normalerweise innerhalb von 5 Minuten, in einigen Fällen ein paar Tage). Wir haben uns entschieden, den Hauptworkflow in zwei Teile aufzuteilen, wo der normale Wartezustand sein würde. Ich kann nicht sagen, dass ich dadurch irgendwelche Leistungsunterschiede im System bemerkt habe, aber es hat es vereinfacht, da unser System manchmal Probleme hatte eingehende Signale mit der korrekten Workflow - Instanz zu verbinden (das war ein Problem in unserem Code; nicht in WF).

Ich denke, wenn ich ein neues Projekt basierend auf WF starten würde, würde ich lieber kleinere Arbeitsabläufe wählen, die nacheinander aufgerufen werden, als große Arbeitsabläufe zu haben, die den gesamten Prozess handhaben.

2

Um ehrlich zu sein, untersuche ich immer noch die Leistungsmerkmale von Workflow-Grundlagen.

jedoch, wenn es hilft, ich habe die WF-Team gehört haben viele Leistungsverbesserungen mit der neuen Version von WF 4.

ein paar Links Hier sind gemacht, die helfen könnten (wenn man sie havn't bereits scheinen

) ein Leistungsproblem

A Developer's Introduction to Windows Workflow Foundation (WF) in .NET 4 (discusses performance improvements)

Performance Characteristics of Windows Workflow Foundation (applies to WF 3.0)

1

WF auf 3,5 hatte. WF4 nicht - 20000 WF Instanzen pro Monat ist nichts.Wenn du pro Minute sprichst, wäre ich besorgt.

+0

Update: Ich habe eine WF 4 StateMachine mit Zehntausenden von Instanzen gleichzeitig und hatte keine Leistungsprobleme. Es gibt jedoch Punkte, auf die Sie bei der Verwendung von Warteschlangen achten müssen. Wenn Sie beispielsweise Nachrichten an Tausende von WF-Instanzen senden, können Sie die Standardeinstellungen für ADO.NET-Verbindungspools (100) und andere Dinge nutzen. – Sentinel

Verwandte Themen