Reliable Actors Service Fabric platformunu nasıl kullanır?

Bu makalede Reliable Actors'ın Azure Service Fabric platformunda nasıl çalıştığı açıklanmaktadır. Reliable Actors, aktör hizmeti olarak adlandırılan durum bilgisi olan bir güvenilir hizmetin uygulamasında barındırılan bir çerçevede çalışır. Aktör hizmeti, aktörleriniz için yaşam döngüsünü ve ileti göndermeyi yönetmek için gereken tüm bileşenleri içerir:

  • Actor Runtime yaşam döngüsünü, çöp toplamayı yönetir ve tek iş parçacıklı erişimi zorlar.
  • Bir aktör hizmeti uzaktan iletişim dinleyicisi aktörlere uzaktan erişim çağrılarını kabul eder ve uygun aktör örneğine yönlendirmek için onları bir dağıtıcıya gönderir.
  • Aktör Durum Sağlayıcısı, durum sağlayıcılarını (Reliable Collections durum sağlayıcısı gibi) sarmalar ve aktör durum yönetimi için bir bağdaştırıcı sağlar.

Bu bileşenler Reliable Actor çerçevesini birlikte oluşturur.

Hizmet katmanı oluşturma

Aktör hizmetinin kendisi güvenilir bir hizmet olduğundan Reliable Services'in tüm uygulama modeli, yaşam döngüsü, paketleme, dağıtım, yükseltme ve ölçeklendirme kavramları aktör hizmetlerine de aynı şekilde uygulanır.

Aktör hizmeti katmanlama

Yukarıdaki diyagramda Service Fabric uygulama çerçeveleri ile kullanıcı kodu arasındaki ilişki gösterilmektedir. Mavi öğeler Reliable Services uygulama çerçevesini, turuncu Reliable Actor çerçevesini, yeşil ise kullanıcı kodunu temsil eder.

Reliable Services'ta hizmetiniz sınıfını StatefulService devralır. Bu sınıf kendisinden türetilir StatefulServiceBase (veya StatelessService durum bilgisi olmayan hizmetler için). Reliable Actors'da aktör hizmetini kullanırsınız. Aktör hizmeti, aktörlerinizin çalıştırıldığı aktör desenini uygulayan sınıfının farklı bir uygulamasıdır StatefulServiceBase . Aktör hizmetinin kendisi yalnızca uygulamasının StatefulServiceBasekendisi olduğundan, hizmetinden ActorService türetilen kendi hizmetinizi yazabilir ve hizmet düzeyi özelliklerini devralırken StatefulServiceuyguladığınız gibi uygulayabilirsiniz:

  • Hizmet yedekleme ve geri yükleme.
  • Devre kesici gibi tüm aktörler için paylaşılan işlevsellik.
  • Uzaktan yordam, aktör hizmetinin kendisini ve her bir aktörü çağırır.

Daha fazla bilgi için bkz. Aktör hizmetinizde hizmet düzeyi özellikleri uygulama.

Uygulama modeli

Aktör hizmetleri Reliable Services olduğundan uygulama modeli aynıdır. Ancak aktör çerçevesi derleme araçları sizin için bazı uygulama modeli dosyalarını oluşturur.

Hizmet bildirimi

Aktör çerçevesi derleme araçları, aktör hizmetinizin ServiceManifest.xml dosyasının içeriğini otomatik olarak oluşturur. Bu dosya şunları içerir:

  • Aktör hizmet türü. Tür adı, aktörünüzün proje adına göre oluşturulur. Aktörünüzün kalıcılık özniteliğine bağlı olarak HasPersistedState bayrağı da buna göre ayarlanır.
  • Kod paketi.
  • Yapılandırma paketi.
  • Kaynaklar ve uç noktalar.

Uygulama bildirimi

Aktör çerçevesi derleme araçları, aktör hizmetiniz için otomatik olarak bir varsayılan hizmet tanımı oluşturur. Derleme araçları varsayılan hizmet özelliklerini doldurur:

  • Çoğaltma kümesi sayısı aktörünüzün kalıcılık özniteliği tarafından belirlenir. Aktörünüzün kalıcılık özniteliği her değiştirildiğinde, varsayılan hizmet tanımındaki çoğaltma kümesi sayısı buna göre sıfırlanır.
  • Bölüm düzeni ve aralığı, tam Int64 anahtar aralığıyla Tekdüzen Int64 olarak ayarlanır.

Aktörler için Service Fabric bölüm kavramları

Aktör hizmetleri bölümlenmiş durum bilgisi olan hizmetlerdir. Bir aktör hizmetinin her bölümü bir dizi aktör içerir. Hizmet bölümleri, Service Fabric'teki birden çok düğüme otomatik olarak dağıtılır. Sonuç olarak aktör örnekleri dağıtılır.

Aktör bölümleme ve dağıtım

Reliable Services, farklı bölüm şemaları ve bölüm anahtarı aralıkları ile oluşturulabilir. Aktör hizmeti, aktörleri bölümlere eşlemek için int64 bölümleme düzenini tam Int64 anahtar aralığıyla birlikte kullanır.

Aktör Kimliği

Hizmette oluşturulan her aktörün kendisiyle ilişkilendirilmiş, sınıfıyla ActorId temsil edilen benzersiz bir kimliği vardır. ActorId , rastgele kimlikler oluşturarak aktörlerin hizmet bölümleri arasında tekdüzen dağıtımı için kullanılabilecek opak bir kimlik değeridir:

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

Her ActorId değeri bir Int64'e karma olarak eklenir. Bu nedenle aktör hizmetinin tam Int64 anahtar aralığına sahip bir Int64 bölümleme düzeni kullanması gerekir. Ancak, GUID'ler/UUID'ler, dizeler ve Int64'ler dahil olmak üzere bir ActorIDiçin özel kimlik değerleri kullanılabilir.

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

GUID'ler/UUID'ler ve dizeler kullanırken, değerler bir Int64'e karma olarak eklenir. Ancak, bir int64'e ActorIdaçıkça sağladığınızda, Int64 daha fazla karma oluşturma olmadan doğrudan bir bölüme eşlenir. Aktörlerin hangi bölüme yerleştirilebileceğini denetlemek için bu tekniği kullanabilirsiniz.

Sonraki adımlar