2016-09-23 3 views
1

Konzeptionell, ich habe die folgenden Objekte:Service-Stoff/Schauspieler Muster für Liste der Dinge

  • Item - (ItemId, Name, Color)
  • ItemGroup = (GroupId, Name, Item list)

wir Elemente vorgeben kann mehreren Gruppen angehören und diesem Artikel Identität und der ItemActor ist notwendig.

Für Stateful Schauspieler, ich habe dies:

  • ItemActor (ItemId) : Get() -> returns ItemContract { ItemId, Name, Color }
  • ItemGroupActor (GroupId) : Get() -> returns GroupContract { GroupId, Name, List<ItemContract> }

Hier die Fragen:

  1. Sollte der GroupActor nur die ItemIds behalten und jemanden dazu zwingen, jeden ItemActor (in einer Schleife) für ItemContracts aufzurufen?

  2. Oder behält der GroupActor alle Details zu den Elementen und lauscht auf Ereignisse bei der Änderung von Elementen, um seine Daten auf dem neuesten Stand zu halten (wie eine Ansicht)?

  3. Oder gibt es eine dritte „ViewActor“, die die Daten zusammen kompiliert, ItemActors (in einer Schleife) aufrufen und hören Ereignisse es die Daten auf dem neuesten Stand zu halten?

  4. Oder etwas anderes?

Keine dieser Optionen scheinen mir besonders attraktiv, weil sie entweder Schauspieler Anrufe erfordern Looping oder hohe Wartungsposition Management über Veranstaltungen.

Gibt es eine Richtlinie, um mich auf die eine oder andere Weise zu beruhigen oder einen allgemeinen Ansatz für dieses Szenario?

Antwort

1

1) Sie sollten einen ItemContract direkt vom entsprechenden Akteur über seine ID abrufen können. Und nehmen Sie Änderungen an diesen Elementen direkt über ihre Akteure vor, sonst verstehe ich die Entscheidung, Schauspieler für ItemContract zu verwenden, nicht.

2) Es ist möglich, aber sieht aus wie ein zuverlässiger Service ist eine bessere Sammlung hier. Actor wird auch für Ereignisse single-threaded sein, so dass Sie nicht gleichzeitig mit Updates arbeiten. Dies führt zu einer schlechten Leistung.

3) Lassen Sie einfach einen einzelnen Akteur für ItemContract aufrufen und verwenden, um Updates für ItemContracts zu liefern, und lassen Sie jeden einzelnen für ItemGroup verantwortlichen Akteur nur für die Arbeit mit Gruppen aufrufen und verwenden.

Denken Sie an Aufgaben - Sie müssen keine Schleifen verwenden, sondern können parallel mit Akteuren arbeiten (zumindest ihren Status abrufen).

Denken Sie an den dritten Dienst, der Gruppenakteure auf Elementdarsteller abbildet. Nur Mapping.Keine Statusaktualisierungen, keine Ereignisverfolgung. Ich möchte Sie jedoch davor warnen, dass das Speichern von Listen in jedem zuverlässigen Wörterbuch eine schlechte Idee ist.

+0

Vielen Dank für Ihre Antwort! Es ist einsam in Service Fabric Land :) Ich verstehe was du sagst. Ich habe diese Ansätze definitiv in Betracht gezogen. Mein Problem ist, dass die Gruppe viele Gegenstände referenziert. Würdest du vorschlagen, in diesem Fall jeden Gegenstandsdarsteller zu treffen? Ich könnte die Ergebnisse irgendwie pagen und die Anzahl begrenzen, die Sie ziehen können, vielleicht ... – TBone

+0

@Tbone hängt es ab. Wenn Sie diese Akteure fast immer am Leben brauchen und sich solche Clusterkapazitäten leisten können, um Partitionen effektiv zwischen Knoten zu verteilen, dann ist es in Ordnung, jeden Akteur aufzurufen, seinen Zustand abzurufen, wenn dieser Zustand relativ klein ist. Wahrscheinlich gibt es einen Platz für ein Cachesystem. Wenn Sie Ressourcen sparen möchten, dann sind Schauspieler nicht für Sie und Sie können versuchen, den Status des gesamten Schauspielers in einem zuverlässigen Wörterbuch zu speichern. Wenn Sie in diesem Fall Probleme mit dem Schreiben in den gleichen Zustand haben, dann ist SF nichts für Sie. – cassandrad

+0

Danke für die Eingabe. Die Microsoft-Dokumentation legt nahe, dass Sie eine ganze Reihe von Akteuren effizient (und parallel) abfragen können. Dies erfordert zum Teil einen Vertrauensvorschuss an meinem Ende, um meine Denkweise von der Art und Weise zu ändern, wie ich Service-Anrufe normalerweise als Overhead oder teuer betrachte. Ich denke immer noch, dass das Volumen, mit dem ich arbeite, hoch genug ist, um mehr Nachdenken zu rechtfertigen. Ich schätze die Hilfe! – TBone

Verwandte Themen