2016-04-06 6 views
2

Im Moment haben wir einen genetischen Algorithmus (GA), der eine ganze Weile läuft, und ich dachte, wir könnten es unter Verwendung Fabric verteilen, weil es theoretisch gut als microservice passt. Dies ist mein erster Versuch bei Fabric.Gewebe zuverlässiger Dienst gegen Schauspieler, um zu lösen GA

Wie sollen wir das machen? Sollten wir eine stateful service haben, die andere actors Aufgaben ausführt und aggregiert? Es ist diesem Projekt ein bisschen ähnlich: https://github.com/Azure-Samples/service-fabric-dotnet-data-streaming-websockets

Ich bin nicht wirklich sicher, wie man geht und es gibt nicht viel dokumentiert zu diesem Thema. Diese GA ist sehr umfangreich und unser Ziel ist es, ihre Berechnungen zu verteilen.

Antwort

1

Ich implementierte eine grundlegende genetische Algorithmus App mit Service Fabric als App-Building-Übung. Ich bin mir nicht sicher, ob mein Ansatz der beste Weg ist, Dinge für Ihr Szenario zu tun, aber ich kann beschreiben, was ich getan habe.

Meine App bestand nur aus Akteuren, sowohl zustandsbehaftet als auch staatenlos. Ich hatte einen Prozessor Stateful Akteur, der alle Verwaltungsaufgaben zur Verfügung gestellt und den Algorithmus gesteuert hat. Weil es zustandsbehaftet war, behielt es die Geschichte des gesamten genetischen Zustands in jeder Generation bei. Ich hatte auch einen FitnessEvalTask ​​statuslosen Schauspieler. Diese Aufgabe war einfach verantwortlich für die Bewertung der Fitness eines Unternehmens. Sein Input war die Gendarstellung und seine Ausgabe war der Fitnesswert. Die Idee war, dass Sie Instanzen dieses Schauspielers mit einer hohen Rate hochtreiben würden und sie angemessen verteilt würden. Die Prozessor-App, die für die Steuerung des Algorithmus verantwortlich ist, erstellt die erforderlichen Instanzen der FitnessEvalTask-Akteure und stellt ihre Eingaben bereit, lässt sie mit ihren Fitnesswerten zurückmelden und führt anschließend die erforderliche Verarbeitung durch. Mein Client-Prozess, nur eine einfache Konsolen-App, würde mit dem Prozessor-Akteur kommunizieren, um den Algorithmus zu initiieren und alle erforderlichen Verwaltungsaufgaben durchzuführen.

+0

Awesome, ich denke, ich werde genau das tun. Wie hast du die Async-Natur aller Schauspieler gehandhabt? Auch, wie gibst du Input für einen Schauspieler? – serj

+0

Auch wäre es wunderbar, wenn du mir das schicken kannst Projekt, [email protected] – serj

+1

Ich habe gerade eine Async-Methode auf meiner Akteurschnittstelle herausgestellt, die die Eignung auswertet: 'Aufgabe EvaluateFitnessAsync (Schnurgene);' Folgen Sie einfach dem gleichen Muster, das in der Standardprojektschablone für ein Schauspielerprojekt mit besteht seine GetCountAsync-Methode.Der Prozessoralgorithmus, der die EvaluateFitnessAsync-Methode für alle Akteure ausführt, wartet nur darauf, dass alle Aufgaben abgeschlossen sind (Task.WhenAll-Methode), bevor Sie fortfahren. –

1

Im Allgemeinen denke ich, dass Service Fabric einen lang laufenden, verteilten genetischen Algorithmus unterstützen kann, wie Sie ihn beschreiben, und wäre eine vernünftige Lösung.

Sie wahrscheinlich SF Schauspieler verwenden würden Kandidatenlösungen in Ihrer Bevölkerung zu vertreten, und auch einen SF zuverlässigen Service (wie Sie beschreiben) Datenaggregation ausführen, verwalten die Bevölkerung und Generationen usw.

Die Wahl, ob Die Verwendung zustandsabhängiger vs. staatenloser Akteure/Dienste hängt weitgehend davon ab, ob Sie den Status selbst verwalten möchten (z. B. wenn Sie in einen benutzerdefinierten Datenspeicher integriert sind) oder ob SF in Ihrem Auftrag den Status verwaltet. Ein "zustandsloser" SF-Dienst kann immer noch einen dauerhaften Zustand haben ... Sie sind lediglich dafür verantwortlich, ihn selbst zu verwalten.

Das Schöne an der Verwendung von SF ist, dass es den Logikstatus Ihrer Lösung formal von der Ressourcenverwaltung auf niedriger Ebene trennt, die für die Ausführung benötigt wird. Sie definieren Ihre Anwendung im Code und konfigurieren separat einen SF-Cluster mit beliebigen Ressourcen, und SF kümmert sich darum, die Arbeit effizient und zuverlässig im Cluster zu verteilen. Natürlich können Sie das selbst tun, aber es ist schwierig, es richtig zu machen.

Klingt wie ein Spaßproblem ... viel Glück!

+0

Danke, jetzt bin ich zuversichtlicher, dass es Sinn macht :) – serj

Verwandte Themen