Jak Reliable Actors používají platformu Service Fabric

Tento článek vysvětluje, jak reliable actors fungují na platformě Azure Service Fabric. Reliable Actors běží v architektuře, která je hostovaná v implementaci stavové spolehlivé služby označované jako služba actor. Služba actor obsahuje všechny komponenty potřebné ke správě životního cyklu a odesílání zpráv pro vaše aktéry:

  • Modul runtime actor spravuje životní cyklus, uvolňování paměti a vynucuje přístup s jedním vláknem.
  • Naslouchací proces vzdálené komunikace služby actor přijímá volání vzdáleného přístupu hercům a odesílá je dispečerovi za účelem směrování do příslušné instance objektu actor.
  • Zprostředkovatel stavu objektu Actor zabalí poskytovatele stavu (například zprostředkovatele stavu Reliable Collections) a poskytuje adaptér pro správu stavu objektu actor.

Tyto komponenty společně tvoří architekturu Reliable Actor.

Vrstvení služeb

Vzhledem k tomu, že samotná služba actor je spolehlivá služba, všechny koncepty aplikačního modelu, životního cyklu, balení, nasazení, upgradu a škálování Reliable Services platí stejným způsobem pro služby actor.

Vrstvení služby Actor

Předchozí diagram znázorňuje vztah mezi aplikačními architekturami Service Fabric a uživatelským kódem. Modré prvky představují architekturu aplikace Reliable Services, oranžová představuje architekturu Reliable Actor a zelená představuje uživatelský kód.

Ve službě Reliable Services vaše služba dědí StatefulService třídu . Tato třída je sama o sobě odvozena z StatefulServiceBase (nebo StatelessService pro bezstavové služby). V Reliable Actors použijete službu actor. Služba actor je jinou implementací StatefulServiceBase třídy, která implementuje vzor objektu actor, ve kterém běží vaši aktéři. Vzhledem k tomu, že samotná služba objektu actor je pouze implementací StatefulServiceBasenástroje , můžete napsat vlastní službu, která se odvozuje z ActorService funkcí na úrovni služby a implementuje je stejným způsobem jako při dědění StatefulService, například:

  • Zálohování a obnovení služby.
  • Sdílené funkce pro všechny aktéry, například jistič.
  • Vzdálená procedura volá samotnou službu objektu actor a každého jednotlivého aktéra.

Další informace najdete v tématu Implementace funkcí na úrovni služby objektu actor.

Aplikační model

Služby actor jsou Reliable Services, takže aplikační model je stejný. Nástroje pro sestavení architektury actor však za vás vygenerují některé soubory aplikačního modelu.

Manifest služby

Nástroje pro sestavení architektury actor automaticky generují obsah souboru ServiceManifest.xml služby objektu actor. Tento soubor obsahuje:

  • Typ služby actor. Název typu se vygeneruje na základě názvu projektu objektu actor. V závislosti na atributu trvalosti na objektu actor je také odpovídajícím způsobem nastaven příznak HasPersistedState.
  • Balíček kódu.
  • Konfigurační balíček.
  • Prostředky a koncové body.

Manifest aplikace

Nástroje pro sestavení architektury actor automaticky vytvoří výchozí definici služby objektu actor. Nástroje sestavení naplní výchozí vlastnosti služby:

  • Počet sad replik je určen atributem trvalosti ve vašem objektu actor. Při každé změně atributu trvalosti na objektu actor se odpovídajícím způsobem resetuje počet sad replik ve výchozí definici služby.
  • Schéma oddílů a rozsah jsou nastaveny na Uniform Int64 s úplným rozsahem klíčů Int64.

Koncepty oddílů Service Fabric pro aktéry

Služby actor jsou dělené stavové služby. Každý oddíl služby actor obsahuje sadu herců. Oddíly služby se v Service Fabric automaticky distribuují na několik uzlů. Instance objektu actor se proto distribuují.

Dělení a distribuce objektu actor

Reliable Services je možné vytvořit s různými schématy oddílů a rozsahy klíčů oddílů. Služba actor používá schéma dělení Int64 s úplným rozsahem klíčů Int64 k mapování herců na oddíly.

Actor ID

Každý objekt actor vytvořený ve službě má přiřazené jedinečné ID reprezentované ActorId třídou. ActorId je hodnota neprůshleného ID, která se dá použít k rovnoměrné distribuci herců napříč oddíly služby generováním náhodných ID:

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

Každý ActorId je hashován na Int64. Proto musí služba actor používat schéma dělení Int64 s úplným rozsahem klíčů Int64. Vlastní hodnoty ID však lze použít pro ActorID, včetně identifikátorů GUID/UUID, řetězců a int64.

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));

Pokud používáte identifikátory GUID/UUID a řetězce, hodnoty se zatřiďují do hodnoty Int64. Pokud však explicitně zadáte Int64 k ActorId, Int64 se mapuje přímo na oddíl bez dalšího hashování. Pomocí této techniky můžete určit, do kterého oddílu se aktéři umístí.

Další kroky