Panoramica di Reliable ServicesReliable Services overview

Azure Service Fabric semplifica la scrittura e la gestione di Reliable Services con e senza stato.Azure Service Fabric simplifies writing and managing stateless and stateful Reliable Services. In questo argomento viene trattato quanto segue:This topic covers:

  • Il modello di programmazione Reliable Services per servizi con stato e senza stato.The Reliable Services programming model for stateless and stateful services.
  • Le opzioni disponibili durante lo sviluppo di un servizio Reliable Services.The choices you have to make when writing a Reliable Service.
  • Alcuni scenari ed esempi dell'uso di Reliable Services e della relativa modalità di sviluppo.Some scenarios and examples of when to use Reliable Services and how they are written.

Reliable Services è uno dei modelli di programmazione disponibili in Service Fabric.Reliable Services is one of the programming models available on Service Fabric. L'altro è il modello di programmazione Reliable Actors, che offre un modello di programmazione con attore virtuale sulla base del modello Reliable Services.The other is the Reliable Actor programming model, which provides a virtual Actor programming model on top of the Reliable Services model. Per altre informazioni sul modello di programmazione Reliable Actors, vedere Introduzione a Reliable Actors in Service Fabric.For more information on the Reliable Actors programming model, see Introduction to Service Fabric Reliable Actors.

Service Fabric gestisce il ciclo di vita dei servizi, dalle fasi di provisioning e distribuzione fino all'aggiornamento e all'eliminazione, usando gli strumenti di gestione delle applicazioni di Service Fabric.Service Fabric manages the lifetime of services, from provisioning and deployment through upgrade and deletion, via Service Fabric application management.

Informazioni su Reliable ServicesWhat are Reliable Services?

Reliable Services offre un modello di programmazione di alto livello, semplice e potente, per specificare gli elementi importanti per l'applicazione.Reliable Services gives you a simple, powerful, top-level programming model to help you express what is important to your application. Il modello di programmazione Reliable Services offre quanto indicato di seguito:With the Reliable Services programming model, you get:

  • Accesso alle restanti API di programmazione di Service Fabric.Access to the rest of the Service Fabric programming APIs. A differenza dei servizi di Service Fabric modellati come Eseguibili guest, Reliable Services può usare direttamente le restanti API di Service Fabric.Unlike Service Fabric Services modeled as Guest Executables, Reliable Services get to use the rest of the Service Fabric APIs directly. Questo consente ai servizi di:This allows services to:
    • eseguire query sul sistemaquery the system
    • segnalare l'integrità delle entità nel clusterreport health about entities in the cluster
    • ricevere notifiche sulle modifiche alla configurazione e al codicereceive notifications about configuration and code changes
    • individuare e comunicare con altri servizi,find and communicate with other services,
    • usare (scelta facoltativa) le raccolte Reliable(optionally) use the Reliable Collections
    • ... e dando loro accesso a molte altre funzionalità, tutte prese da un modello di programmazione di prima classe in diversi linguaggi....and giving them access to many other capabilities, all from a first class programming model in several programming languages.
  • Un modello semplice per l'esecuzione di codice personalizzato simile ai modelli di programmazione di uso comune.A simple model for running your own code that looks like programming models you are used to. Il codice ha un punto di ingresso ben definito e un ciclo di vita facile da gestire.Your code has a well-defined entry point and easily managed lifecycle.
  • Un modello di comunicazione modulare.A pluggable communication model. Usare il metodo di trasporto di propria scelta, ad esempio HTTP con API Web, WebSockets, protocolli TCP personalizzati e così via.Use the transport of your choice, such as HTTP with Web API, WebSockets, custom TCP protocols, or anything else. Reliable Services fornisce alcune interessanti opzioni predefinite, ma consente anche di usarne di personalizzate.Reliable Services provide some great out-of-the-box options you can use, or you can provide your own.
  • Per i servizi con stato, il modello di programmazione Reliable Services consente di archiviare lo stato in modo coerente e affidabile all'interno del servizio usando raccolte Reliable.For stateful services, the Reliable Services programming model allows you to consistently and reliably store your state right inside your service by using Reliable Collections. Le raccolte Reliable sono un semplice set di classi di raccolte Reliable a disponibilità elevata che risulterà familiare a chiunque abbia usato raccolte C#.Reliable Collections are a simple set of highly available and reliable collection classes that will be familiar to anyone who has used C# collections. In passato, per la gestione di uno stato affidabile i servizi dovevano contare su sistemi esterni.Traditionally, services needed external systems for Reliable state management. Le raccolte Reliable consentono di archiviare lo stato insieme ai calcoli effettuati con gli stessi livelli di disponibilità e affidabilità garantiti dagli archivi esterni a disponibilità elevata.With Reliable Collections, you can store your state next to your compute with the same high availability and reliability you've come to expect from highly available external stores. Questo modello riduce anche la latenza perché si condividono le risorse di calcolo e stato necessarie per il funzionamento.This model also improves latency because you are co-locating the compute and state it needs to function.

Vedere questo video di Microsoft Virtual Academy per una panoramica di Reliable Services:

Watch this Microsoft Virtual Academy video for an overview of Reliable services:

Caratteristiche distintive di Reliable ServicesWhat makes Reliable Services different?

Reliable Services in Service Fabric è diverso da eventuali servizi sviluppati in precedenza.Reliable Services in Service Fabric are different from services you may have written before. Service Fabric offre affidabilità, disponibilità, coerenza e scalabilità.Service Fabric provides reliability, availability, consistency, and scalability.

  • Affidabilità: il servizio rimane operativo anche in ambienti non affidabili in cui i computer si guastano o presentano errori di rete o in casi in cui i servizi stessi presentano errori o arresti anomali.Reliability - Your service stays up even in unreliable environments where your machines fail or hit network issues, or in cases where the services themselves encounter errors and crash or fail. Per i servizi con stato, lo stato viene mantenuto anche in presenza di errori di rete o di altro tipo.For stateful services, your state is preserved even in the presence of network or other failures.
  • Disponibilità: il servizio è raggiungibile e reattivo.Availability - Your service is reachable and responsive. Service Fabric mantiene il numero desiderato di copie in esecuzione.Service Fabric maintains your desired number of running copies.
  • Scalabilità: i servizi vengono separati dall'hardware specifico e possono essere aumentati o ridotti secondo necessità mediante l'aggiunta o la rimozione di risorse hardware o di altro tipo.Scalability - Services are decoupled from specific hardware, and they can grow or shrink as necessary through the addition or removal of hardware or other resources. I servizi, in particolare quelli con stato, possono essere partizionati facilmente. In questo modo, il servizio dispone di scalabilità per gestire gli errori parziali.Services are easily partitioned (especially in the stateful case) to ensure that the service can scale and handle partial failures. I servizi possono essere creati ed eliminati in modo dinamico tramite codice, consentendo di creare più istanze in base alle necessità, per esempio in caso di richieste dei clienti.Services can be created and deleted dynamically via code, enabling more instances to be spun up as necessary, say in response to customer requests. Infine, Service Fabric promuove l'uso di servizi leggeri.Finally, Service Fabric encourages services to be lightweight. Service Fabric permette il provisioning di migliaia di servizi con un unico processo, evitando così di richiedere o dedicare intere istanze o processi del sistema operativo a una singola istanza di un servizio.Service Fabric allows thousands of services to be provisioned within a single process, rather than requiring or dedicating entire OS instances or processes to a single instance of a service.
  • Coerenza: tutte le informazioni archiviate in questo servizio hanno coerenza garantita.Consistency - Any information stored in this service can be guaranteed to be consistent. Questo vale anche tra più raccolte Reliable in un servizio.This is true even across multiple reliable collections within a service. È possibile apportare modifiche nelle raccolte all'interno di un servizio con transazioni atomiche.Changes across collections within a service can be made in a transactionally atomic manner.

Ciclo di vita del servizioService lifecycle

Reliable Services fornisce un ciclo di vita semplice che consente di attivare rapidamente il codice e iniziare a usarlo.Whether your service is stateful or stateless, Reliable Services provide a simple lifecycle that lets you quickly plug in your code and get started. Per garantire l'operatività del servizio, è necessario implementare solo uno o due metodi.There are just one or two methods that you need to implement to get your service up and running.

  • CreateServiceReplicaListeners/CreateServiceInstanceListeners: questo metodo è dove il servizio definisce gli stack di comunicazione da usare.CreateServiceReplicaListeners/CreateServiceInstanceListeners - This method is where the service defines the communication stack(s) that it wants to use. Lo stack di comunicazione, ad esempio API Web, definisce l'endpoint di ascolto o gli endpoint per il servizio, ovvero il modo in cui i client potranno raggiungerlo.The communication stack, such as Web API, is what defines the listening endpoint or endpoints for the service (how clients reach the service). Definisce anche in che modo i messaggi visualizzati interagiscono con il resto del codice del servizio.It also defines how the messages that appear interact with the rest of the service code.
  • RunAsync: questo metodo è dove il servizio esegue la logica di business e dove avvierà attività in background da eseguire per tutta la durata del servizio.RunAsync - This method is where your service runs its business logic, and where it would kick off any background tasks that should run for the lifetime of the service. Il token di annullamento fornito indica quando l'operazione deve essere interrotta.The cancellation token that is provided is a signal for when that work should stop. Se, ad esempio, il servizio deve effettuare il pull dei messaggi da un oggetto Reliable Queue per elaborarli, questa è l'area in cui vengono eseguite tali attività.For example, if the service needs to pull messages out of a Reliable Queue and process them, this is where that work happens.

Se è la prima volta che si sente parlare di Reliable Services, è consigliabile continuare a leggere.If you're learning about reliable services for the first time, read on! Se si sta cercando una procedura dettagliata del ciclo di vita di Reliable Services, vedere questo articolo.If you're looking for a detailed walkthrough of the lifecycle of reliable services, you can head over to this article.

Servizi di esempioExample services

Per mostrare il funzionamento del modello di programmazione descritto, di seguito sono illustrati due differenti servizi.Knowing this programming model, let's take a quick look at two different services to see how these pieces fit together.

Reliable Services senza statoStateless Reliable Services

Un servizio senza stato non dispone di uno stato mantenuto tra le varie chiamate.A stateless service is one where there is no state maintained within the service across calls. Qualsiasi stato presente è interamente eliminabile e non richiede sincronizzazione, replica, persistenza o disponibilità elevata.Any state that is present is entirely disposable and doesn't require synchronization, replication, persistence, or high availability.

Si consideri ad esempio un servizio Calculator privo di memoria che riceve contemporaneamente tutti i termini e le operazioni da eseguire.For example, consider a calculator that has no memory and receives all terms and operations to perform at once.

In questo caso il metodo RunAsync() (C#) o runAsync() (Java) del servizio può essere vuoto, dal momento che il servizio non deve eseguire alcuna elaborazione di attività in background.In this case, the RunAsync() (C#) or runAsync() (Java) of the service can be empty, since there is no background task-processing that the service needs to do. Quando viene creato, il servizio Calculator restituisce un ICommunicationListener (C#) o un CommunicationListener (Java), ad esempio API Web, che apre un endpoint di ascolto su una porta.When the calculator service is created, it returns an ICommunicationListener (C#) or CommunicationListener (Java) (for example Web API) that opens up a listening endpoint on some port. L'endpoint di ascolto si collegherà ai diversi metodi, ad esempio di calcolo, ad esempio "Add(n1, n2)", che definiscono l'API pubblica del servizio Calculator.This listening endpoint hooks up to the different calculation methods (example: "Add(n1, n2)") that define the calculator's public API.

Quando viene effettuata una chiamata da un client, viene richiamato il metodo appropriato.When a call is made from a client, the appropriate method is invoked, and the calculator service performs the operations on the data provided and returns the result. Il servizio Calculator esegue le operazioni sui dati forniti e restituisce il risultato, senza archiviare alcuno stato.It doesn't store any state.

La mancata archiviazione di qualsiasi stato interno rende semplice il servizio Calculator di esempio.Not storing any internal state makes this example calculator simple. La maggior parte dei servizi non è però realmente senza stato.But most services aren't truly stateless. Al contrario, esternalizzano il proprio stato in un altro archivio.Instead, they externalize their state to some other store. Ad esempio, un'app Web che mantiene lo stato delle sessioni in una cache o in un archivio di backup non è senza stato.(For example, any web app that relies on keeping session state in a backing store or cache is not stateless.)

Un esempio comune di come i servizi senza stato vengono usati in Service Fabric è un servizio front-end che espone l'API pubblica di un'applicazione Web.A common example of how stateless services are used in Service Fabric is as a front-end that exposes the public-facing API for a web application. Il servizio front-end richiede quindi ai servizi con stato di completare la richiesta di un utente.The front-end service then talks to stateful services to complete a user request. In questo caso, le chiamate provenienti dai client vengono indirizzate a una porta conosciuta, ad esempio la porta 80, dove è in ascolto il servizio senza stato.In this case, calls from clients are directed to a known port, such as 80, where the stateless service is listening. Il servizio senza stato riceve la chiamata, determina se quest'ultima proviene da una parte attendibile e identifica il servizio a cui è destinata.This stateless service receives the call and determines whether the call is from a trusted party and which service it's destined for. Il servizio senza stato inoltra quindi la chiamata alla partizione corretta del servizio con stato e attende una risposta.Then, the stateless service forwards the call to the correct partition of the stateful service and waits for a response. Quando il servizio senza stato riceve una risposta, risponde al client originale.When the stateless service receives a response, it replies to the original client. Un esempio di tale servizio è disponibile in C# / Java.An example of such a service is in our samples C# / Java. Sono presentati anche altri modelli in altri esempi.This is only one example of this pattern in the samples, there are others in other samples as well.

Reliable Services con statoStateful Reliable Services

Un servizio con stato è un servizio che, per funzionare in modo corretto, deve avere una qualche porzione dello stato coerente e presente.A stateful service is one that must have some portion of state kept consistent and present in order for the service to function. Si consideri, ad esempio, un servizio che deve calcolare costantemente la media mobile di alcuni valori in base agli aggiornamenti ricevuti.Consider a service that constantly computes a rolling average of some value based on updates it receives. Per eseguire questa operazione, deve avere il set corrente di richieste in ingresso, oltre alla media corrente.To do this, it must have the current set of incoming requests it needs to process and the current average. Qualsiasi servizio che recupera, elabora e archivia informazioni in un archivio esterno, ad esempio un archivio tabelle o un BLOB di Azure, è un servizio con stato.Any service that retrieves, processes, and stores information in an external store (such as an Azure blob or table store today) is stateful. Conserva il proprio stato nell'archivio stati esterno.It just keeps its state in the external state store.

Attualmente la maggior parte dei servizi archivia il proprio stato esternamente, perché gli archivi esterni assicurano affidabilità, disponibilità, scalabilità e coerenza dello stato.Most services today store their state externally, since the external store is what provides reliability, availability, scalability, and consistency for that state. In Service Fabric, i servizi non devono necessariamente archiviare esternamente il proprio stato.In Service Fabric, services aren't required to store their state externally. Service Fabric si occupa di questi requisiti sia per il codice che per lo stato del servizio.Service Fabric takes care of these requirements for both the service code and the service state.

Nota

Il supporto per Reliable Services con stato non è ancora disponibile in Linux (per C# o Java).Support for Stateful Reliable Services is not available on Linux yet (for C# or Java).

Si supponga di voler scrivere un servizio di elaborazione immagini.Let's say we want to write a service that processes images. Per l'elaborazione, il servizio accetta un'immagine e la serie di conversioni da eseguire su di essa.To do this, the service takes in an image and the series of conversions to perform on that image. Il servizio restituisce un listener di comunicazione (si supponga che sia un'API Web) che espone un'API come ConvertImage(Image i, IList<Conversion> conversions).This service returns a communication listener (let's suppose it's a WebAPI) that exposes an API like ConvertImage(Image i, IList<Conversion> conversions). Quando riceve una richiesta, il servizio la memorizza in un IReliableQueue e restituisce alcun ID al client in modo da tracciare la richiesta.When it receives a request, the service stores it in a IReliableQueue, and returns some id to the client so it can track the request.

In questo servizio RunAsync() potrebbe essere più complesso.In this service, RunAsync() could be more complex. Il servizio dispone di un ciclo all'interno di relativo RunAsync() che effettua il pull delle richieste da IReliableQueue ed esegue le conversioni richieste.The service has a loop inside its RunAsync() that pulls requests out of IReliableQueue and performs the conversions requested. I risultati vengono memorizzati un IReliableDictionary in modo che, al ritorno del client, possano ottenere le immagini convertite.The results get stored in an IReliableDictionary so that when the client comes back they can get their converted images. Per garantire che anche in caso di problemi l'immagine non vada persa, questo servizio Reliable Services effettua il pull dalla coda, esegue le conversioni e archivia il risultato in una singola transazione.To ensure that even if something fails the image isn't lost, this Reliable Service would pull out of the queue, perform the conversions, and store the result all in a single transaction. In questo modo il messaggio viene rimosso dalla coda e i risultati vengono archiviati nel dizionario dei risultati solo dopo il completamento delle conversioni.In this case, the message is removed from the queue and the results are stored in the result dictionary only when the conversions are complete. In alternativa, il servizio potrebbe estrarre l'immagine dalla coda e memorizzarla immediatamente in un archivio remoto.Alternatively, the service could pull the image out of the queue and immediately store it in a remote store. Questo ridurrebbe la quantità di stato che il servizio deve gestire, ma aumenterebbe la complessità, poiché il servizio deve a quel punto conservare i metadati necessari per gestire l'archivio remoto.This reduces the amount of state the service has to manage, but increases complexity since the service has to keep the necessary metadata to manage the remote store. Con entrambi gli approcci, in caso di errori durante l'operazione, la richiesta rimane nella coda in attesa di elaborazione.With either approach, if something failed in the middle the request remains in the queue waiting to be processed.

Una delle caratteristiche di questo servizio è che ha l'aspetto di un normale servizio .NET.One thing to note about this service is that it sounds like a normal .NET service! L'unica differenza consiste nel fatto che le strutture dati usate, ovvero gli oggetti IReliableQueue e IReliableDictionary, sono fornite da Service Fabric e quindi offrono livelli di affidabilità, disponibilità e coerenza elevati.The only difference is that the data structures being used (IReliableQueue and IReliableDictionary) are provided by Service Fabric, and are highly reliable, available, and consistent.

Quando usare le API Reliable ServicesWhen to use Reliable Services APIs

È consigliabile considerare l'uso delle API Reliable Services se il servizio dell'applicazione presenta uno dei requisiti seguenti:If any of the following characterize your application service needs, then you should consider Reliable Services APIs:

  • Si desiderano codici (ed eventualmente stati) di servizio con disponibilità e affidabilità elevateYou want your service's code (and optionally state) to be highly available and reliable
  • Sono necessarie garanzie transazionali in più unità di stato multiple, ad esempio elementi di ordine e righe di ordine.You need transactional guarantees across multiple units of state (for example, orders and order line items).
  • Lo stato dell'applicazione può essere modellato naturalmente sotto forma di oggetti ReliableDictionary e ReliableQueue.Your application’s state can be naturally modeled as Reliable Dictionaries and Queues.
  • Il codice o lo stato delle applicazioni deve disporre di un'elevata disponibilità, con operazioni di lettura e scrittura a bassa latenza.Your applications code or state needs to be highly available with low latency reads and writes.
  • L'applicazione deve controllare la concorrenza o la granularità di operazioni transazionali su una o più raccolte Reliable Collections.Your application needs to control the concurrency or granularity of transacted operations across one or more Reliable Collections.
  • Si vogliono gestire le comunicazioni o controllare lo schema di partizionamento del servizio.You want to manage the communications or control the partitioning scheme for your service.
  • Il codice necessita di un ambiente di runtime a thread libero.Your code needs a free-threaded runtime environment.
  • L'applicazione deve creare o eliminare definitivamente in modo dinamico gli oggetti ReliableDictionary, ReliableQueue o interi servizi in fase di esecuzione.Your application needs to dynamically create or destroy Reliable Dictionaries or Queues or whole Services at runtime.
  • È necessario controllare a livello di codice i backup forniti da Service Fabric e ripristinare le funzionalità per lo stato del servizio.You need to programmatically control Service Fabric-provided backup and restore features for your service’s state.
  • L'applicazione deve gestire la cronologia delle modifiche per le unità di stato.Your application needs to maintain change history for its units of state.
  • Si vogliono utilizzare provider di stato di terze parti o svilupparne di personalizzati.You want to develop or consume third-party-developed, custom state providers.

Passaggi successiviNext steps