- Pipeline Modell
- Pooling
Und an Stelle der ThreadLocal Variable kannst du ja einfach eine
"CallId" in den Nachrichten Mitgeben und dann das Join selbst
entscheiden lassen,
wann ein Join vollständig ist. Führt natürlich zu einem Bottle-Neck in
den Joins.
Gruß,
Patrick
On 7 Dez., 02:49, Tilmann Kuhn <goo...@tkuhn.de> wrote:
> Hi EBC-Community,
>
> Zur Zeit entwickle ich Teile eines Servers, der RPC-Anfragen von Clients
> beantwortet. Teile davon habe ich mit Flow Design entworfen und mit der
> Übersetzung in Methoden implementiert wie von Ralf im Cheat Sheet
> beschrieben:http://geekswithblogs.net/theArchitectsNapkin/archive/2011/03/20/flow...
>
> Prinzipiell finde ich (aus verschiedenen Gründen) aber die Übersetzung in
> EBCs sinnvoller und wollte sie diese Woche ausprobieren, wobei mir schon
> bei den ersten Versuchen klar geworden ist, dass das so nicht funktionieren
> kann, wie ich das gerne hätte:
>
> Das Problem, dass sich auf tut ist, dass mein Flow parallel von
> verschiedenen Threads angestoßen wird, was aus Performance-Gründen auch so
> gewollt und erforderlich ist. Die Logik in den einzelnen Funktionseinheiten
> ist zustandsfrei und führt daher nicht zu Schwierigkeiten. Problem sind
> vielmehr die Joins im Flow, da diese Zustand halten während sie auf
> weiteren Input warten. Und hier geht das ganze in einem nebenläufigen
> Szenario schief. Bei der Übersetzung nach Methoden klappt alles, da hier
> der Zustand auf dem Thread-Stack statt in einem Objekt gehalten wird. Bei
> der EBC-Variante stellt sich jetzt die Frage, wie man das in den Griff
> bekommen kann. Spontan sind mir folgende Varianten eingefallen, die mir
> alle nicht so richtig gefallen möchten:
>
> 1. Die komplette Flow-Abarbeitung synchronisieren, so dass immer nur ein
> Thread gleichzeitig im Flow ist. Geht in meinem Fall aus
> Performance-Gründen nicht.
> 2. Für jede Flow-Abarbeitung eine eigene Instanz des kompletten Flows
> erstellen. Will ich in meinem Fall eigentlich auch nicht machen, da der
> Flow, wenn er dann komplett fertig implementiert ist aus über 500 EBCs
> bestehen wird.
> 3. Die Joins so anpassen dass sie ihren Zustand nicht in der EBC selbst,
Wenn ich in Joins für eine "Transaktions"-ID gemapped die Inputs speichere und der komplette Flow für diese "Transaktion" zu Ende ist, muss ich allen Joins die ich irgendwo im Flow habe mitteilen, dass die "Transaktion" mit der ID zu Ende ist und sie den für diese ID-Gespeicherten Zustand vergessen sollen. Sonst habe ich ein Memory-Leak.