2017-10-17 1 views
0

Ich entwickle eine Service-Fabric-basierte Handelsplattform, die hunderte von verschiedenen Long-Running-Trading-Algorithmen hosten wird, die alle einer gemeinsamen Schnittstelle entsprechen und viel gemeinsamen Code teilen aber kann in ihren internen Spezifika sehr unterschiedlich sein. Ich könnte jedes der verschiedenen Algos als Anwendungstyp (die ich dynamisch laden würde) modellieren, aber angesichts der großen Anzahl von verschiedenen Algos frage ich mich, ob es sinnvoller ist, einen einzelnen Plugin Runner-Anwendungstyp zu erstellen und dann die Algos als zu implementieren Plugins.Service Fabric: Plugins vs. Anwendungstypen

In einer verwandten Frage, ich verstehe, wie eine Plugin-Architektur im Allgemeinen implementieren, aber ich bin nicht ganz sicher, wo man die tatsächlichen Plugins platzieren würde, um von einer Instanz auf Service Fabric erkennbar sein.

Trotzdem, vielen Dank für Ihre Hilfe ....

Antwort

2
  1. Beide Ansätze können ich denke, arbeiten. Durch die Verwendung vieler Anwendungstypen wird der (erhebliche) Aufwand für die Ausführung vieler Prozesse erhöht, Sie können jedoch mehrere Versionen desselben Algorithmus gleichzeitig verwenden und aktualisieren. Die Verwendung des Plugin-Ansatzes erfordert, dass Sie selbst mit der Versionierung arbeiten.

    Die Verwendung der Anwendung erfordert wahrscheinlich eine Art Request-Router, während die Plugin-Service kann seine eigenen Entscheidungen treffen (wenn es zustandslos ist).

  2. Sie können einen Stateful-Dienst erstellen, der als Plugin-Repository fungiert, oder eine Dateifreigabe bereitstellen oder eine Datenbank verwenden, ohne Einschränkungen von der Plattform hier. Sie können Namenskonventionen verwenden, um das richtige Plugin zu finden.

+0

Danke für die schnelle und hilfreiche Antwort. Gibt es eine Idee, wo/wie die Plugins platziert werden, damit sie zur Laufzeit vom Azure Service Fabric gefunden werden können? Ich denke an die DevOps der Sache ... –

+1

Vielleicht so etwas: Wenn du algo "A v1" anforderst, suche nach einer Assembly mit diesem Namen: "A" und Version "1". Laden Sie die Assembly aus einem Repository herunter (wie in 2. oben), legen Sie sie in Ihr Arbeitsverzeichnis und laden Sie sie mit Assembly.Load ("A, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089"); Verwenden Sie Reflektion, um es zu finden und zu instantiieren. – LoekD

+0

Ich habe den Plugin-Stil versucht und es hat super funktioniert. Das ist der Weg, den ich gehen werde ... –