Der Azure Service Fabric scheint sich auf Szenarien zu konzentrieren, in denen alle Daten in den Arbeitsspeicher passen und die Persistenz als Backing Store verwendet wird. Reliable Services speichern Informationen in Reliable Collections, die eine log-checkpoint system verwenden, in der protokollierte Informationen in den Arbeitsspeicher geschrieben werden. In der Zwischenzeit ist für zuverlässige Akteure der default actor state provider "der von der Service Fabric-Plattform bereitgestellte verteilte Schlüsselwertspeicher". Dies scheint darauf hinzudeuten, dass die gleichen Einschränkungen gelten würden.Übergang zwischen Stateful Service und externer Persistenz in Azure Service Fabric
Es kann jedoch Situationen geben, in denen man das Service Fabric für "heiße Daten" verwenden möchte, aber "kalte Daten" in eine Art permanenten Speicher schreibt. Was sind Best Practices für die Handhabung dieses Übergangs?
In Orleans scheint dies automatisch mit einem Persistenzspeicher wie Azure-Tabellen behandelt werden. Es scheint jedoch, dass ein Hauptzweck des Service Fabric und der Reliable Collections darin besteht, externe Services zu vermeiden, um die Datenlokalität zu verbessern. Die aktuelle Dokumentation nimmt die Möglichkeit vor, Daten in einen permanenten Speicher für disaster recovery and analytics zu verschieben, diskutiert jedoch nicht die Möglichkeit, Daten zwischen Persistenz-gestützten In-Memory-Aktoren und permanenteren Speicherformen hin- und herzubewegen.
Eine mögliche Antwort ist, dass das Service Fabric dies bereits tut. Vielleicht verfügt ein zuverlässiges Wörterbuch über einen eingebauten Mechanismus zum Umschalten zwischen persistent-gesichertem In-Memory-Speicher und permanentem Speicher.
Oder vielleicht ist die Antwort, dass man das selbst verwalten muss. Ein Ansatz könnte darin bestehen, dass ein Actor nachverfolgen kann, wie "heiß" er ist, und seinen Persistenzspeicher nach Bedarf wechseln. Dies opfert jedoch einen der Vorteile des Actor-Modells, der automatischen Zuweisung und Freigabe von Akteuren. Ebenso können wir regelmäßig Elemente aus dem zuverlässigen Wörterbuch entfernen und sie zu einem anderen Persistenzspeicher hinzufügen und sie dann wieder hinzufügen. Dies erfordert wiederum eine Kenntnis darüber, wann es sinnvoll ist, den Übergang zu machen.
Ein paar Beispiele helfen das kristallisieren kann: „Zimmer“
(1) Nehmen wir an, dass wir ein Multiplayer-Spiel mit vielen verschiedenen implementieren Wir brauchen nicht alle Räume in einem Speicher, aber wir müssen sie in den Speicher verschieben und die lokale Persistenz als Backup verwenden, sobald die Spieler sich ihnen anschließen.
(2) Angenommen, wir implementieren einen anhängigen B-Tree als Teil einer Datenbank. Die Versuchung wäre, jeden B-Tree-Knoten zu einem Stateful-Actor zu machen. Wir möchten, dass heiße B-Bäume im Gedächtnis bleiben, aber natürlich kann der gesamte Index nicht gespeichert werden. Es scheint, dass dies ein Kernszenario ist, das bereits für Dinge wie DocumentDB implementiert ist, aber es ist mir aus der Dokumentation nicht klar, wie man das machen würde.
Eine verwandte Frage, die ich fand, ist here. Diese Frage konzentriert sich jedoch auf die Verwendung von Azure Service Fabric und externen Services. Meine Frage ist, ob es notwendig ist, zwischen ihnen zu wechseln, oder ob Azure Service Fabric bereits alle erforderlichen Fähigkeiten hat.
Danke für die Klarstellung. Daher unterscheidet sich der KVS-Shop von den zuverlässigen Sammlungen dadurch, dass er nicht ständig den gesamten Status im Speicher behält. (Oder können die zuverlässigen Sammlungen manchmal auch ein- und ausgehen, trotz der Dokumentation, die etwas anderes vermuten lässt?) Das macht viel mehr Sinn. Natürlich würde der KVS-Speicher irgendwann nicht mehr genügend Speicher auf der Festplatte haben, aber ich nehme an, dass dies durch Überwachung vermieden werden kann. – user357783
Zuverlässige Sammlungen behalten ihren Zustand auf der Festplatte bei. Die Dokumentation auf dieser Seite erwähnt dies ausdrücklich. http://azure.microsoft.com/en-us/documentation/articles/service-fabric-reliable-services-reliable-collections/. "Bestanden: Die Daten werden auf der Festplatte gespeichert, um vor größeren Ausfällen geschützt zu sein (z. B. Stromausfall im Rechenzentrum)." Gab es in der Dokumentation irgendeinen Platz, der etwas anderes nahelegte? –
Um die Bedenken hinsichtlich des Speicherplatzmangels zu beheben, können Sie auch den Artikel zur Skalierbarkeit (http://azure.microsoft.com/en-us/documentation/articles/service-fabric-concepts-scalability/) lesen Strategien, um Ihren Service zu skalieren und diese Situation zu vermeiden. Monitoring ist auch eine gute Idee, wie Sie bereits hingewiesen haben. –