Il Fabric Service di Azure sembra focalizzato su scenari in cui tutti i dati possono essere contenuti nella RAM e la persistenza viene utilizzata come backing store. I servizi affidabili sono progettati per archiviare le informazioni in Raccolte affidabili, che utilizzano uno log-checkpoint system in cui le informazioni registrate vengono scritte nella RAM. Nel frattempo, per Reliable Actors, lo default actor state provider è "l'archivio di valori-chiave distribuiti fornito dalla piattaforma di Service Fabric". Ciò sembra indicare che si applicherebbero le stesse limitazioni.Transizione tra il servizio stateful e la persistenza esterna in Azure Service Fabric
Potrebbero tuttavia esserci situazioni in cui si vorrebbe utilizzare il Service Fabric per "hot data" ma scrivere "cold data" su una qualche forma di memorizzazione permanente. Quali sono le migliori pratiche per gestire questa transizione?
In Orleans, questo sembra essere gestito automaticamente, utilizzando un archivio di persistenza come le tabelle di Azure. Ma sembra che uno degli scopi principali del design del Service Fabric e delle Affidabili Collezioni sia quello di evitare di richiedere servizi esterni, migliorando così la localizzazione dei dati. L'attuale documentazione anticipa la possibilità che uno vorrebbe spostare i dati in qualche archivio permanente per disaster recovery and analytics, ma non discute la possibilità di spostare i dati avanti e indietro tra gli attori in memoria persistenti e più forme di archiviazione permanenti.
Una possibile risposta è che Service Fabric lo faccia già. Forse un dizionario affidabile ha un meccanismo integrato per il passaggio tra archiviazione in memoria persistente e memoria permanente.
Oppure, forse la risposta è che si deve gestire questo. Un approccio potrebbe essere per un attore tenere traccia di quanto è "caldo" e cambiare il suo archivio di persistenza se necessario. Ma questo sacrifica uno dei vantaggi del modello di attore, l'assegnazione automatica e la deallocazione degli attori. Allo stesso modo, potremmo rimuovere periodicamente gli elementi dal Dizionario affidabile e aggiungerli a un altro archivio di persistenza, quindi aggiungerli nuovamente. Di nuovo, tuttavia, ciò richiede la conoscenza di quando ha senso effettuare la transizione.
Un paio di esempi possono aiutare a cristallizzare questo: "camere"
(1) Supponiamo che stiamo attuando un gioco multiplayer con molte differenti Non abbiamo bisogno di tutte le stanze nella memoria in una volta, ma dobbiamo spostarle in memoria e usare la persistenza locale come backup una volta che i giocatori si uniscono a loro.
(2) Supponiamo che stiamo implementando un B-Tree append-only come parte di un database. La tentazione sarebbe quella di fare in modo che ogni nodo B-Tree sia un attore di stato. Vorremmo che gli hot b fossero conservati in memoria, ma ovviamente l'intero indice non può essere in memoria. Sembra che questo sia uno scenario principale che è già implementato per cose come DocumentDB, ma non mi è chiaro dalla documentazione come si farebbe questo.
Una domanda correlata che ho trovato è here. Ma quella domanda si concentra su quando utilizzare Azure Service Fabric rispetto ai servizi esterni. La mia domanda è se c'è bisogno di transitare tra di loro o se Azure Service Fabric ha già tutte le capacità necessarie qui.
Grazie per il chiarimento. Quindi, lo store KVS si differenzia dalle collezioni affidabili nel non cercare di mantenere tutto lo stato in memoria tutto il tempo. (O forse anche le collezioni affidabili a volte entrano e escono dalla memoria, nonostante la documentazione che sembra suggerire il contrario?) Questo ha molto più senso. Naturalmente, a un certo punto il negozio KVS esaurirà la memoria su disco, ma presumo che questo possa essere evitato attraverso il monitoraggio. – user357783
Le raccolte affidabili mantengono anche il loro stato su disco. La documentazione in questa pagina la menziona esplicitamente. http://azure.microsoft.com/en-us/documentation/articles/service-fabric-reliable-services-reliable-collections/. "Persistato: i dati vengono persi su disco per garantire la durabilità contro interruzioni su larga scala (ad esempio un'interruzione dell'alimentazione del datacenter).". C'era posto nella documentazione che suggeriva diversamente? –
Inoltre, per risolvere il problema relativo all'esaurimento dello spazio su disco, è possibile leggere l'articolo sulla scalabilità (http://azure.microsoft.com/en-us/documentation/articles/service-fabric-concepts-scalability/) per strategie per scalare il tuo servizio ed evitare questa situazione. Il monitoraggio è anche una buona idea, come già sottolineato. –