Introduzione alle Reliable Collections nei servizi con stato di Service Fabric

Reliable Collections consente di sviluppare applicazioni cloud a disponibilità elevata, scalabili e a bassa latenza nello stesso modo in cui si sviluppano applicazioni per singoli computer. Le classi nello spazio dei nomi Microsoft.ServiceFabric.Data.Collections forniscono un set di raccolte che assicurano automaticamente la disponibilità elevata dello stato. Gli sviluppatori devono solo programmare le API Reliable Collections e consentire a queste raccolte di gestire lo stato replicato e locale.

La differenza principale tra le raccolte Reliable Collections e altre tecnologie a disponibilità elevata, ad esempio Redis e i servizi tabelle e code di Azure, consiste nel fatto che lo stato viene mantenuto in locale nell'istanza del servizio e ne viene assicurata al tempo stesso la disponibilità elevata. Ciò significa che:

  • Tutte le operazioni di lettura sono locali, assicurando quindi bassa latenza e velocità effettiva elevata.
  • Tutte le operazioni di scrittura eseguono il numero minimo di operazioni di IO di rete, assicurando quindi bassa latenza e velocità effettiva elevata.

Image of evolution of collections.

Le raccolte Reliable Collections possono essere considerate l'evoluzione naturale delle classi System.Collections , ovvero un nuovo set di raccolte progettate per le applicazioni per il cloud e più computer che non aumentano le complessità per gli sviluppatori. Come tali, le raccolte Reliable Collections sono:

  • Replicate: le modifiche apportate allo stato vengono replicate per assicurare disponibilità elevata.
  • Asincrone: le API sono asincrone per assicurare che i thread non vengano bloccati durante le operazioni di IO.
  • Transazionali: le API utilizzano l'astrazione delle transazioni per consentire all'utente di gestire facilmente più raccolte Reliable Collections all'interno di un servizio.
  • Persistente o volatile: i dati possono essere salvati in modo permanente su disco per durabilità in caso di interruzioni su larga scala, ad esempio un'interruzione dell'alimentazione del data center. Alcune raccolte Reliable Collections supportano anche una modalità volatile (con avvertenze) in cui tutti i dati vengono mantenuti in memoria, ad esempio una cache replicata in memoria.

Le raccolte Reliable Collections offrono garanzie predefinite di coerenza assoluta, per facilitare la definizione della logica relativa allo stato delle applicazioni. La coerenza assoluta è ottenuta assicurando che i commit delle transazioni siano completati solo dopo che l'intera transazione è stata registrata su un quorum di repliche di maggioranza, inclusa quella primaria. Per ottenere una coerenza più debole, le applicazioni possono rinviare un acknowledgement al client/richiedente prima della restituzione del commit asincrono.

Le API Reliable Collections sono un'evoluzione delle API delle raccolte disponibili nello spazio dei nomi System.Collections.Concurrent :

  • Asincrone: restituiscono un'attività dal momento che, a differenza delle raccolte Concurrent Collections, le operazioni vengono replicate e rese persistenti.
  • Nessun parametro out: usa ConditionalValue<T> per restituire un bool e un valore anziché parametri out. ConditionalValue<T> è come Nullable<T> ma non richiede una T per essere una struttura.
  • Transazioni: usano un oggetto transazione per consentire all'utente di raggruppare azioni su più raccolte Reliable Collections in una transazione.

Attualmente Microsoft.ServiceFabric.Data.Collections include tre raccolte:

  • ReliableDictionary: rappresenta una raccolta replicata, transazionale e asincrona di coppie chiave/valore. Simile a ConcurrentDictionary, sia la chiave che il valore possono essere di qualsiasi tipo.
  • ReliableQueue: rappresenta una coda FIFO (First-In First-Out) replicata, transazionale e asincrona. Simile a ConcurrentQueue, il valore può essere di qualsiasi tipo.
  • ReliableConcurrentQueue: rappresenta una coda di ordinamento ottimale replicata, transazionale e asincrona per la velocità effettiva elevata. Simile a ConcurrentQueue, il valore può essere di qualsiasi tipo.

Passaggi successivi