Reliable Actors hizmeti tarafından Service Fabric platformunun kullanımı
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önderimini 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.
- 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 bir dağıtıcıya gönderir.
- Aktör Durum Sağlayıcısı, durum sağlayıcılarını (Güvenilir Koleksiyonlar 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 birlikte Reliable Actor çerçevesini oluşturur.
Hizmet katmanı oluşturma
Aktör hizmetinin kendisi güvenilir bir hizmet olduğundan, Reliable Services'ın 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.
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'da hizmetiniz sınıfı devralır StatefulService
. Bu sınıf kendisinden türetilir StatefulServiceBase
(veya StatelessService
durum bilgisi olmayan hizmetler için). Reliable Actors'ta aktör hizmetini kullanırsınız. Aktör hizmeti, aktörlerinizin çalıştığı aktör desenini uygulayan sınıfının farklı bir uygulamasıdır StatefulServiceBase
. Aktör hizmetinin kendisi yalnızca uygulamasının StatefulServiceBase
kendisi olduğundan, öğesinden ActorService
türetilen kendi hizmetinizi yazabilir ve hizmet düzeyi özelliklerini devralırken StatefulService
uyguladığı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 uygulama modeli dosyalarından bazıları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. 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.
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 tam Int64 anahtar aralığıyla Int64 bölümleme düzenini kullanır.
Aktör Kimliği
Hizmette oluşturulan her aktör, sınıfı tarafından ActorId
temsil edilen, kendisiyle ilişkilendirilmiş benzersiz bir kimliğe sahiptir. ActorId
, rastgele kimlikler oluşturarak hizmet bölümleri arasında aktörlerin tekdüzen dağıtımı için kullanılabilecek bir opak 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ığıyla bir Int64 bölümleme düzeni kullanması gerekir. Ancak, GUID'ler/UUID'ler, dizeler ve Int64'ler dahil olmak üzere bir ActorID
iç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 ActorId
açıkça sağladığınızda, Int64 daha fazla karma oluşturma yapmadan doğrudan bir bölüme eşlenir. Aktörlerin hangi bölüme yerleştirilebileceğini denetlemek için bu tekniği kullanabilirsiniz.