Uso avanzato del modello di programmazione Reliable ServicesAdvanced usage of the Reliable Services programming model

Service Fabric di Azure semplifica la scrittura e la gestione di servizi affidabili con e senza stato.Azure Service Fabric simplifies writing and managing reliable stateless and stateful services. Questa guida illustra gli utilizzi avanzati di Reliable Services per ottenere più controllo e flessibilità sui servizi.This guide talks about advanced usages of Reliable Services to gain more control and flexibility over your services. Prima di leggere questa guida, acquisire familiarità con il modello di programmazione Reliable Services.Prior to reading this guide, familiarize yourself with the Reliable Services programming model.

Sia i servizi con stato che i servizi senza stato hanno due punti di ingresso principali per il codice utente:Both stateful and stateless services have two primary entry points for user code:

  • RunAsync(C#) / runAsync(Java) è un punto di ingresso generico per il codice del servizio.RunAsync(C#) / runAsync(Java) is a general-purpose entry point for your service code.
  • CreateServiceReplicaListeners(C#) e CreateServiceInstanceListeners(C#) / createServiceInstanceListeners(Java) vengono usati per l'apertura di listener di comunicazione per le richieste client.CreateServiceReplicaListeners(C#) and CreateServiceInstanceListeners(C#) / createServiceInstanceListeners(Java) is for opening communication listeners for client requests.

Per la maggior parte dei servizi questi due punti di ingresso sono sufficienti.For most services, these two entry points are sufficient. In rari casi, quando è necessario un maggiore controllo sul ciclo di vita del servizio, sono disponibili eventi del ciclo di vita aggiuntivi.In rare cases when more control over a service's lifecycle is required, additional lifecycle events are available.

Ciclo di vita dell'istanza di servizio senza statoStateless service instance lifecycle

Il ciclo di vita di un servizio senza stato è molto semplice.A stateless service's lifecycle is very simple. Un servizio senza stato può solo essere aperto, chiuso o interrotto.A stateless service can only be opened, closed, or aborted. RunAsync viene eseguito in un servizio senza stato quando viene aperta un'istanza del servizio e viene annullato quando viene chiusa o interrotta un'istanza del servizio.RunAsync in a stateless service is executed when a service instance is opened, and canceled when a service instance is closed or aborted.

Anche se RunAsync dovrebbe essere sufficiente nella maggior parte dei casi, in un servizio senza stato sono disponibili anche eventi di apertura, chiusura e interruzione:Although RunAsync should be sufficient in almost all cases, the open, close, and abort events in a stateless service are also available:

  • Task OnOpenAsync(IStatelessServicePartition, CancellationToken) - C# / CompletableFuture<String> onOpenAsync(CancellationToken) - Java OnOpenAsync viene chiamato quando l'istanza del servizio senza stato sta per essere usata.Task OnOpenAsync(IStatelessServicePartition, CancellationToken) - C# / CompletableFuture<String> onOpenAsync(CancellationToken) - Java OnOpenAsync is called when the stateless service instance is about to be used. In questo momento è possibile avviare attività estese di inizializzazione del servizio.Extended service initialization tasks can be started at this time.
  • Task OnCloseAsync(CancellationToken) - C# / CompletableFuture onCloseAsync(CancellationToken) - Java OnCloseAsync viene chiamato quando l'istanza del servizio senza stato sta per essere arrestata normalmente.Task OnCloseAsync(CancellationToken) - C# / CompletableFuture onCloseAsync(CancellationToken) - Java OnCloseAsync is called when the stateless service instance is going to be gracefully shut down. Ciò può verificarsi quando il codice del servizio viene aggiornato, l'istanza del servizio viene spostata a causa del bilanciamento del carico o viene rilevato un errore temporaneo.This can occur when the service's code is being upgraded, the service instance is being moved due to load balancing, or a transient fault is detected. OnCloseAsync può essere usato per chiudere in modo sicuro tutte le risorse, arrestare qualsiasi elaborazione in background, completare il salvataggio dello stato esterno o chiudere le connessioni esistenti.OnCloseAsync can be used to safely close any resources, stop any background processing, finish saving external state, or close down existing connections.
  • void OnAbort() - C# / void onAbort() - Java OnAbort viene chiamato quando l'istanza del servizio senza stato viene arrestata in modo forzato.void OnAbort() - C# / void onAbort() - Java OnAbort is called when the stateless service instance is being forcefully shut down. Questo metodo in genere viene chiamato quando viene rilevato un errore permanente sul nodo o quando Service Fabric non è in grado di gestire in modo affidabile il ciclo di vita dell'istanza del servizio a causa di errori interni.This is generally called when a permanent fault is detected on the node, or when Service Fabric cannot reliably manage the service instance's lifecycle due to internal failures.

Ciclo di vita della replica del servizio con statoStateful service replica lifecycle

Nota

Reliable Services con stato non è ancora supportato in Java.Stateful reliable services are not supported in Java yet.

Il ciclo di vita di una replica del servizio con stato è molto più complesso rispetto a quello di un'istanza del servizio senza stato.A stateful service replica's lifecycle is much more complex than a stateless service instance. Oltre agli eventi di apertura, chiusura e interruzione, una replica del servizio con stato è soggetta a modifiche dei ruoli durante il ciclo di vita.In addition to open, close, and abort events, a stateful service replica undergoes role changes during its lifetime. Quando una replica del servizio con stato cambia ruolo, viene attivato l'evento OnChangeRoleAsync :When a stateful service replica changes role, the OnChangeRoleAsync event is triggered:

  • Task OnChangeRoleAsync(ReplicaRole, CancellationToken) : OnChangeRoleAsync viene chiamato quando il servizio con stato cambia ruolo, ad esempio primario o secondario.Task OnChangeRoleAsync(ReplicaRole, CancellationToken) OnChangeRoleAsync is called when the stateful service replica is changing role, for example to primary or secondary. Alle repliche primarie viene assegnato lo stato di scrittura (sono autorizzate a creare raccolte Reliable Collections e a scrivervi).Primary replicas are given write status (are allowed to create and write to Reliable Collections). Alle repliche secondarie viene assegnato lo stato di lettura (possono solo leggere da raccolte Reliable Collections esistenti).Secondary replicas are given read status (can only read from existing Reliable Collections). La maggior parte delle operazioni in un servizio con stato viene eseguita nella replica primaria.Most work in a stateful service is performed at the primary replica. Le repliche secondarie possono eseguire la convalida di sola lettura, la generazione di report, il data mining o altri processi di sola lettura.Secondary replicas can perform read-only validation, report generation, data mining, or other read-only jobs.

In un servizio con stato solo la replica primaria ha accesso in scrittura allo stato ed è in genere il momento in cui il servizio esegue il lavoro effettivo.In a stateful service, only the primary replica has write access to state and thus is generally when the service is performing actual work. Il metodo RunAsync in un servizio con stato viene eseguito solo quando la replica del servizio con stato è primaria.The RunAsync method in a stateful service is executed only when the stateful service replica is primary. Il metodo RunAsync viene annullato quando il ruolo della replica primaria non è più primario, nonché durante gli eventi di chiusura e interruzione.The RunAsync method is canceled when a primary replica's role changes away from primary, as well as during the close and abort events.

L'uso dell'evento OnChangeRoleAsync permette di eseguire un lavoro a seconda del ruolo della replica e in risposta alla modifica del ruolo.Using the OnChangeRoleAsync event allows you to perform work depending on replica role as well as in response to role change.

Un servizio con stato garantisce anche gli stessi quattro eventi del ciclo di vita di un servizio senza stato, con la stessa semantica e gli stessi casi d'uso:A stateful service also provides the same four lifecycle events as a stateless service, with the same semantics and use cases:

* Task OnOpenAsync(IStatefulServicePartition, CancellationToken)
* Task OnCloseAsync(CancellationToken)
* void OnAbort()

Passaggi successiviNext steps

Per argomenti più avanzati relativi a Service Fabric, vedere gli articoli seguenti:For more advanced topics related to Service Fabric, see the following articles: