Modalità d'uso della piattaforma Service Fabric da parte di Reliable ActorsHow Reliable Actors use the Service Fabric platform

Questo articolo descrive il funzionamento di Reliable Actors sulla piattaforma Service Fabric di Azure.This article explains how Reliable Actors work on the Azure Service Fabric platform. Reliable Actors viene eseguito in un framework ospitato in un'implementazione di un servizio Reliable Services con stato denominato servizio attore.Reliable Actors run in a framework that is hosted in an implementation of a stateful reliable service called the actor service. Il servizio attore contiene tutti i componenti necessari per gestire il ciclo di vita e l'invio di messaggi per gli attori:The actor service contains all the components necessary to manage the lifecycle and message dispatching for your actors:

  • Il runtime di Actors gestisce il ciclo di vita e la Garbage Collection e applica l'accesso a thread singolo.The Actor Runtime manages lifecycle, garbage collection, and enforces single-threaded access.
  • Un listener di comunicazione remota del servizio Actor accetta chiamate di accesso remoto per gli attori e le invia a un dispatcher per l'indirizzamento all'istanza d attore appropriata.An actor service remoting listener accepts remote access calls to actors and sends them to a dispatcher to route to the appropriate actor instance.
  • Il provider di stato degli attori esegue il wrapping dei provider di stato (come il provider di stato Reliable Collections) e fornisce un adattatore per la gestione dello stato degli attori.The Actor State Provider wraps state providers (such as the Reliable Collections state provider) and provides an adapter for actor state management.

Questi componenti insieme costituiscono il framework Reliable Actors.These components together form the Reliable Actor framework.

Livelli del servizioService layering

Dato che il servizio attore stesso è un servizio Reliable Services, tutti i concetti di modello applicativo, ciclo di vita, creazione pacchetti, distribuzione, aggiornamento e ridimensionamento validi per Reliable Services si applicano anche ai servizi attore.Because the actor service itself is a reliable service, all the application model, lifecycle, packaging, deployment, upgrade, and scaling concepts of Reliable Services apply the same way to actor services.

Livelli del servizio attore

Il diagramma precedente mostra la relazione tra i framework applicativi di Service Fabric e il codice utente.The preceding diagram shows the relationship between the Service Fabric application frameworks and user code. Gli elementi blu rappresentano il framework applicativo di Reliable Services, quelli arancioni il framework Reliable Actors e quelli verdi il codice utente.Blue elements represent the Reliable Services application framework, orange represents the Reliable Actor framework, and green represents user code.

In Reliable Services il servizio eredita la classe StatefulService.In Reliable Services, your service inherits the StatefulService class. Questa classe è a sua volta derivata da StatefulServiceBase (o StatelessService per i servizi senza stato).This class is itself derived from StatefulServiceBase (or StatelessService for stateless services). In Reliable Actors usare il servizio attore.In Reliable Actors, you use the actor service. Il servizio attore è un'implementazione diversa della classe StatefulServiceBase che implementa lo schema dell'attore in cui vengono eseguiti gli attori.The actor service is a different implementation of the StatefulServiceBase class that implements the actor pattern where your actors run. Dato che il servizio attore è semplicemente un'implementazione di StatefulServiceBase, si può scrivere il proprio servizio che deriva da ActorService e implementare le funzionalità a livello di servizio così come si farebbe quando si eredita StatefulService, ad esempio:Because the actor service itself is just an implementation of StatefulServiceBase, you can write your own service that derives from ActorService and implement service-level features the same way you would when inheriting StatefulService, such as:

  • Backup e ripristino del servizio.Service backup and restore.
  • Funzionalità condivisa per tutti gli attori, ad esempio un interruttore.Shared functionality for all actors, for example, a circuit breaker.
  • Chiamate di routine remote sul servizio attore stesso e su ogni singolo attore.Remote procedure calls on the actor service itself and on each individual actor.

Per altre informazioni, vedere Implementazione di funzionalità a livello di servizio nel servizio Actor.For more information, see Implementing service-level features in your actor service.

Modello di applicazioneApplication model

I servizi Actor sono servizi Reliable Services, per cui il modello applicativo è lo stesso.Actor services are Reliable Services, so the application model is the same. Tuttavia, gli strumenti di compilazione del framework attore generano automaticamente alcuni dei file del modello applicativo.However, the actor framework build tools generate some of the application model files for you.

Manifesto del servizioService manifest

Gli strumenti di compilazione del framework attore generano automaticamente il contenuto del file ServiceManifest.xml del servizio attore.The actor framework build tools automatically generate the contents of your actor service's ServiceManifest.xml file. Questo file include:This file includes:

  • Tipo del servizio attore.Actor service type. Il nome del tipo viene generato in base al nome del progetto attore.The type name is generated based on your actor's project name. In base all'attributo di persistenza nell'attore, viene impostato anche il flag HasPersistedState.Based on the persistence attribute on your actor, the HasPersistedState flag is also set accordingly.
  • Pacchetto di codice.Code package.
  • Pacchetto di configurazione.Config package.
  • Risorse ed endpoint.Resources and endpoints.

Manifesto dell'applicazioneApplication manifest

Gli strumenti di compilazione del framework attore creano automaticamente una definizione del servizio predefinito per il servizio Actor.The actor framework build tools automatically create a default service definition for your actor service. Gli strumenti di compilazione popolano le proprietà del servizio predefinito:The build tools populate the default service properties:

  • Il numero di set di repliche è determinato dall'attributo di persistenza sull'attore.Replica set count is determined by the persistence attribute on your actor. Ogni volta che viene modificato l'attributo di persistenza nell'attore, viene reimpostato di conseguenza il numero di set di repliche nella definizione del servizio predefinito.Each time the persistence attribute on your actor is changed, the replica set count in the default service definition is reset accordingly.
  • Lo schema e l'intervallo della partizione vengono impostati su Uniform Int64 con l'intervallo di chiavi Int64 completo.Partition scheme and range are set to Uniform Int64 with the full Int64 key range.

Concetti relativi alla partizione di Service Fabric per gli attoriService Fabric partition concepts for actors

I servizi Actor sono servizi con stato partizionati.Actor services are partitioned stateful services. Ogni partizione di un servizio Actor contiene un set di attori.Each partition of an actor service contains a set of actors. Le partizioni del servizio vengono distribuite automaticamente su più nodi in Service Fabric.Service partitions are automatically distributed over multiple nodes in Service Fabric. Le istanze degli attori vengono distribuite di conseguenza.Actor instances are distributed as a result.

Partizionamento e distribuzione degli attori

È possibile creare servizi Reliable Services con schemi di partizione e intervalli di chiavi di partizione diversi.Reliable Services can be created with different partition schemes and partition key ranges. Il servizio attore usa lo schema di partizionamento Int64 con l'intervallo di chiavi Int64 completo per mappare gli attori alle partizioni.The actor service uses the Int64 partitioning scheme with the full Int64 key range to map actors to partitions.

ID attoreActor ID

A ogni attore creato nel servizio è associato un ID univoco, rappresentato dalla classe ActorId .Each actor that's created in the service has a unique ID associated with it, represented by the ActorId class. ActorId è un valore ID opaco che può essere usato per la distribuzione uniforme degli attori nelle partizioni del servizio mediante la generazione di ID casuali:ActorId is an opaque ID value that can be used for uniform distribution of actors across the service partitions by generating random IDs:

ActorProxy.Create<IMyActor>(ActorId.CreateRandom());
ActorProxyBase.create<MyActor>(MyActor.class, ActorId.newId());

Di ogni ActorId viene eseguito l'hashing in un Int64.Every ActorId is hashed to an Int64. Per questo motivo il servizio attore deve usare uno schema di partizionamento Int64 con l'intervallo di chiavi Int64 completo.This is why the actor service must use an Int64 partitioning scheme with the full Int64 key range. È comunque possibile usare valori ID personalizzati per un ActorID, tra cui GUID/UUID, stringhe e Int64.However, custom ID values can be used for an ActorID, including GUIDs/UUIDs, strings, and Int64s.

ActorProxy.Create<IMyActor>(new ActorId(Guid.NewGuid()));
ActorProxy.Create<IMyActor>(new ActorId("myActorId"));
ActorProxy.Create<IMyActor>(new ActorId(1234));
ActorProxyBase.create(MyActor.class, new ActorId(UUID.randomUUID()));
ActorProxyBase.create(MyActor.class, new ActorId("myActorId"));
ActorProxyBase.create(MyActor.class, new ActorId(1234));

Quando si usano GUID/UUID e stringhe, viene eseguito l'hashing dei valori in un Int64.When you're using GUIDs/UUIDs and strings, the values are hashed to an Int64. Quando invece si fornisce esplicitamente un Int64 a un ActorId, l'Int64 verrà mappato direttamente a una partizione senza ulteriore hashing.However, when you're explicitly providing an Int64 to an ActorId, the Int64 will map directly to a partition without further hashing. È possibile usare questa tecnica per controllare in quale partizione vengono inseriti gli attori.You can use this technique to control which partition the actors are placed in.

Passaggi successiviNext steps