Share via


Hoe Reliable Actors het Service Fabric-platform gebruiken

In dit artikel wordt uitgelegd hoe Reliable Actors werken op het Azure Service Fabric-platform. Reliable Actors worden uitgevoerd in een framework dat wordt gehost in een implementatie van een stateful betrouwbare service genaamd de actorservice. De actorservice bevat alle onderdelen die nodig zijn voor het beheren van de levenscyclus en het verzenden van berichten voor uw actoren:

  • De Actor Runtime beheert de levenscyclus, garbagecollection en dwingt toegang met één thread af.
  • Een externe listener van een actorservice accepteert externe toegangsaanroepen naar actoren en stuurt deze naar een dispatcher om naar het juiste actorexemplaren te leiden.
  • De provider van de actorstatus verpakt statusproviders (zoals de statusprovider Reliable Collections) en biedt een adapter voor actorstatusbeheer.

Deze onderdelen vormen samen het Reliable Actor-framework.

Servicelagen

Omdat de actorservice zelf een betrouwbare service is, zijn alle toepassingsmodellen, levenscyclus, pakketten, implementatie, upgrades en schaalconcepten van Reliable Services op dezelfde manier van toepassing op actorservices.

Actor-servicelagen

In het voorgaande diagram ziet u de relatie tussen de Service Fabric-toepassingsframeworks en de gebruikerscode. Blauwe elementen vertegenwoordigen het Reliable Services-toepassingsframework, oranje vertegenwoordigt het Reliable Actor-framework en groen vertegenwoordigt gebruikerscode.

In Reliable Services neemt uw service de StatefulService klasse over. Deze klasse is zelf afgeleid van StatefulServiceBase (of StatelessService voor staatloze services). In Reliable Actors gebruikt u de actorservice. De actorservice is een andere implementatie van de StatefulServiceBase klasse die het actorpatroon implementeert waar uw acteurs worden uitgevoerd. Omdat de actorservice zelf slechts een implementatie is, StatefulServiceBasekunt u uw eigen service schrijven die is afgeleid van ActorService en functies op serviceniveau op dezelfde manier implementeren als bij het overnemen StatefulService, zoals:

  • Back-up en herstel van de service.
  • Gedeelde functionaliteit voor alle actoren, bijvoorbeeld een circuitonderbreker.
  • Externe procedure roept de actorservice zelf en op elke afzonderlijke actor aan.

Zie Functies op serviceniveau implementeren in uw actorservice voor meer informatie.

Toepassingsmodel

Actorservices zijn Reliable Services, dus het toepassingsmodel is hetzelfde. De buildhulpprogramma's van het actorframework genereren echter enkele toepassingsmodelbestanden voor u.

Servicemanifest

De buildhulpprogramma's voor actorframeworks genereren automatisch de inhoud van het ServiceManifest.xml-bestand van uw actorservice. Dit bestand bevat:

  • Actor-servicetype. De typenaam wordt gegenereerd op basis van de projectnaam van uw actor. Op basis van het persistentiekenmerk voor uw actor wordt de vlag HasPersistedState ook dienovereenkomstig ingesteld.
  • Codepakket.
  • Configuratiepakket.
  • Resources en eindpunten.

Manifest van de toepassing

Met de hulpprogramma's voor het bouwen van actorframeworks wordt automatisch een standaardservicedefinitie voor uw actorservice gemaakt. De buildhulpprogramma's vullen de standaardservice-eigenschappen in:

  • Het aantal replicasets wordt bepaald door het persistentiekenmerk van uw actor. Telkens wanneer het persistentiekenmerk voor uw actor wordt gewijzigd, wordt het aantal replicasets in de standaardservicedefinitie dienovereenkomstig opnieuw ingesteld.
  • Partitieschema en -bereik zijn ingesteld op Uniform Int64 met het volledige Int64-sleutelbereik.

Service Fabric-partitieconcepten voor actoren

Actorservices zijn gepartitioneerde stateful services. Elke partitie van een actorservice bevat een set actoren. Servicepartities worden automatisch verdeeld over meerdere knooppunten in Service Fabric. Actorinstanties worden als gevolg hiervan gedistribueerd.

Actor partitionering en distributie

Reliable Services kan worden gemaakt met verschillende partitieschema's en partitiesleutelbereiken. De actorservice maakt gebruik van het int64-partitioneringsschema met het volledige int64-sleutelbereik om actoren toe te wijzen aan partities.

Actor-id

Aan elke actor die in de service is gemaakt, is een unieke id gekoppeld, vertegenwoordigd door de ActorId klasse. ActorId is een ondoorzichtige id-waarde die kan worden gebruikt voor uniforme distributie van actoren in de servicepartities door willekeurige id's te genereren:

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

Elk ActorId is gehasht naar een Int64. Daarom moet de actorservice een Int64-partitioneringsschema gebruiken met het volledige Int64-sleutelbereik. Aangepaste id-waarden kunnen echter worden gebruikt voor een ActorID, inclusief GUID's/UUID's, tekenreeksen en 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));

Wanneer u GUID's/UUID's en tekenreeksen gebruikt, worden de waarden gehasht naar een Int64. Wanneer u echter expliciet een Int64 opgeeft aan een ActorId, wordt de Int64 rechtstreeks toegewezen aan een partitie zonder verdere hashing. U kunt deze techniek gebruiken om te bepalen in welke partitie de actoren worden geplaatst.

Volgende stappen