Aracılığıyla paylaş


Reliable Actors durum yönetimi

Reliable Actors, hem mantığı hem de durumu kapsülleyebilecek tek iş parçacıklı nesnelerdir. Aktörler Reliable Services üzerinde çalıştığından, aynı kalıcılık ve çoğaltma mekanizmalarını kullanarak durumu güvenilir bir şekilde koruyabilirler. Bu şekilde, aktörler hatalardan sonra, çöp toplamadan sonra yeniden etkinleştirildikten sonra veya kaynak dengeleme veya yükseltmeler nedeniyle kümedeki düğümler arasında taşındığında durumlarını kaybetmez.

Durum kalıcılığı ve çoğaltma

Her aktör örneği benzersiz bir kimliğe eşlediğinden tüm Güvenilir Aktörler durum bilgisi olarak kabul edilir. Bu, aynı aktör kimliğine yapılan yinelenen çağrıların aynı aktör örneğine yönlendirildiğini gösterir. Durum bilgisi olmayan bir sistemde ise istemci çağrılarının her seferinde aynı sunucuya yönlendirileceği garanti edilmiyor. Bu nedenle aktör hizmetleri her zaman durum bilgisi olan hizmetlerdir.

Aktörlerin durum bilgisi olduğu düşünülse de, bu durum güvenilir bir şekilde depolanmaları gerektiği anlamına gelmez. Aktörler, veri depolama gereksinimlerine göre durum kalıcılığı ve çoğaltma düzeyini seçebilir:

  • Kalıcı durum: Durum diskte kalıcı hale getirilir ve üç veya daha fazla çoğaltmaya çoğaltılır. Kalıcı durum, durumun tam küme kesintisi yoluyla kalıcı olabileceği en dayanıklı durum depolama seçeneğidir.
  • Geçici durum: Durum üç veya daha fazla çoğaltmaya çoğaltılır ve yalnızca bellekte tutulur. Geçici durum, düğüm hatasına ve aktör hatasına karşı, yükseltmeler ve kaynak dengeleme sırasında dayanıklılık sağlar. Ancak, durum diskte kalıcı değildir. Bu nedenle tüm çoğaltmalar aynı anda kaybolursa durum da kaybolur.
  • Kalıcı durum yok: Durum diske çoğaltılmaz veya yazılmaz, yalnızca durumu güvenilir bir şekilde koruması gerekmeyen aktörler için kullanılır.

Her kalıcılık düzeyi, hizmetinizin farklı bir durum sağlayıcısı ve çoğaltma yapılandırmasıdır. Durumun diske yazıp yazılmayacağı durum sağlayıcısına bağlıdır. Bu bileşen, durumu depolayan güvenilir bir hizmettedir. Çoğaltma, bir hizmetin kaç çoğaltmayla dağıtılacağına bağlıdır. Reliable Services'da olduğu gibi, hem durum sağlayıcısı hem de çoğaltma sayısı el ile kolayca ayarlanabilir. Aktör çerçevesi, bir aktörde kullanıldığında otomatik olarak bir varsayılan durum sağlayıcısı seçen ve bu üç kalıcılık ayarından birini elde etmek için çoğaltma sayısı için ayarları otomatik olarak oluşturan bir öznitelik sağlar. StatePersistence özniteliği türetilmiş sınıf tarafından devralınmıyor, her Aktör türünün StatePersistence düzeyini sağlaması gerekir.

Kalıcı durum

[StatePersistence(StatePersistence.Persisted)]
class MyActor : Actor, IMyActor
{
}
@StatePersistenceAttribute(statePersistence = StatePersistence.Persisted)
class MyActorImpl  extends FabricActor implements MyActor
{
}

Bu ayar, diskte veri depolayan ve hizmet çoğaltma sayısını otomatik olarak 3 olarak ayarlayan bir durum sağlayıcısı kullanır.

Geçici durum

[StatePersistence(StatePersistence.Volatile)]
class MyActor : Actor, IMyActor
{
}
@StatePersistenceAttribute(statePersistence = StatePersistence.Volatile)
class MyActorImpl extends FabricActor implements MyActor
{
}

Bu ayar yalnızca bellek içi durum sağlayıcısı kullanır ve çoğaltma sayısını 3 olarak ayarlar.

Kalıcı durum yok

[StatePersistence(StatePersistence.None)]
class MyActor : Actor, IMyActor
{
}
@StatePersistenceAttribute(statePersistence = StatePersistence.None)
class MyActorImpl extends FabricActor implements MyActor
{
}

Bu ayar yalnızca bellek içi durum sağlayıcısı kullanır ve çoğaltma sayısını 1 olarak ayarlar.

Varsayılanlar ve oluşturulan ayarlar

özniteliğini StatePersistence kullanırken, aktör hizmeti başlatıldığında çalışma zamanında sizin için otomatik olarak bir durum sağlayıcısı seçilir. Ancak çoğaltma sayısı, Visual Studio aktör derleme araçları tarafından derleme zamanında ayarlanır. Derleme araçları, ApplicationManifest.xml'da aktör hizmeti için otomatik olarak bir varsayılan hizmet oluşturur. En düşük çoğaltma kümesi boyutu ve hedef çoğaltma kümesi boyutu için parametreler oluşturulur.

Bu parametreleri el ile değiştirebilirsiniz. Ancak öznitelik her StatePersistence değiştirildiğinde, parametreler seçilen StatePersistence öznitelik için varsayılan çoğaltma kümesi boyut değerlerine ayarlanır ve önceki değerler geçersiz kılınabilir. Başka bir deyişle, ServiceManifest.xml'de ayarladığınız değerler yalnızca öznitelik değerini değiştirdiğinizde StatePersistence derleme zamanında geçersiz kılınabilir.

<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="Application12Type" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <Parameters>
      <Parameter Name="MyActorService_PartitionCount" DefaultValue="10" />
      <Parameter Name="MyActorService_MinReplicaSetSize" DefaultValue="3" />
      <Parameter Name="MyActorService_TargetReplicaSetSize" DefaultValue="3" />
   </Parameters>
   <ServiceManifestImport>
      <ServiceManifestRef ServiceManifestName="MyActorPkg" ServiceManifestVersion="1.0.0" />
   </ServiceManifestImport>
   <DefaultServices>
      <Service Name="MyActorService" GeneratedIdRef="77d965dc-85fb-488c-bd06-c6c1fe29d593|Persisted">
         <StatefulService ServiceTypeName="MyActorServiceType" TargetReplicaSetSize="[MyActorService_TargetReplicaSetSize]" MinReplicaSetSize="[MyActorService_MinReplicaSetSize]">
            <UniformInt64Partition PartitionCount="[MyActorService_PartitionCount]" LowKey="-9223372036854775808" HighKey="9223372036854775807" />
         </StatefulService>
      </Service>
   </DefaultServices>
</ApplicationManifest>

Eyalet yöneticisi

Her aktör örneğin kendi durum yöneticisi vardır: anahtar/değer çiftlerini güvenilir bir şekilde depolayan sözlük benzeri bir veri yapısı. Durum yöneticisi, durum sağlayıcısı çevresinde bir sarmalayıcıdır. Hangi kalıcılık ayarının kullanıldığına bakılmaksızın verileri depolamak için bunu kullanabilirsiniz. Çalışan bir aktör hizmetinin geçici (yalnızca bellek içi) durum ayarından verileri korurken sıralı yükseltme yoluyla kalıcı bir durum ayarına değiştirilebileceğine ilişkin hiçbir garanti sağlamaz. Ancak, çalışan bir hizmetin çoğaltma sayısını değiştirmek mümkündür.

Durum yöneticisi anahtarları dize olmalıdır. Değerler geneldir ve özel türler de dahil olmak üzere herhangi bir tür olabilir. Durum yöneticisinde depolanan değerler, çoğaltma sırasında ağ üzerinden diğer düğümlere iletilebileceği ve bir aktörün durum kalıcılığı ayarına bağlı olarak diske yazılabilen veri sözleşmesi serileştirilebilir olmalıdır.

Durum yöneticisi, Reliable Dictionary'de bulunanlara benzer şekilde, durumu yönetmek için ortak sözlük yöntemlerini kullanıma sunar.

Aktör durumunu yönetme örnekleri için Reliable Actors durumuna erişme, kaydetme ve kaldırma konusuna bakın.

En iyi yöntemler

Aktör durumunuzu yönetmeye yönelik bazı önerilen uygulamalar ve sorun giderme ipuçları aşağıdadır.

Aktör durumunu mümkün olduğunca ayrıntılı hale getirme

Bu, uygulamanızın performansı ve kaynak kullanımı için kritik önem taşır. Bir aktörün "adlandırılmış durumunda" herhangi bir yazma/güncelleştirme olduğunda, bu "adlandırılmış duruma" karşılık gelen değerin tamamı serileştirilir ve ağ üzerinden ikincil çoğaltmalara gönderilir. İkinciller bunu yerel diske yazar ve birincil çoğaltmayı yanıtlar. Birincil, ikincil çoğaltmaların bir çekirdeğinden onaylar aldığında, durumu yerel diskine yazar. Örneğin, değerin 20 üyesi ve boyutu 1 MB olan bir sınıf olduğunu varsayalım. 1 KB boyutunda sınıf üyelerinden yalnızca birini değiştirseniz bile, serileştirme ve ağ ve disk yazma maliyetlerini 1 MB'ın tamamı için ödersiniz. Benzer şekilde, değer bir koleksiyon (liste, dizi veya sözlük gibi) ise, üyelerinden birini değiştirseniz bile koleksiyonun tamamının maliyetini ödersiniz. Aktör sınıfının StateManager arabirimi bir sözlük gibidir. Bu sözlüğün üzerinde her zaman aktör durumunu temsil eden veri yapısını modellemeniz gerekir.

Aktörün yaşam döngüsünü doğru bir şekilde yönetme

Bir aktör hizmetinin her bölümünde durum boyutunu yönetme hakkında net bir ilkeniz olmalıdır. Aktör hizmetinizin sabit sayıda aktörü olmalı ve bunları mümkün olduğunca yeniden kullanmalıdır. Sürekli yeni aktörler oluşturursanız, işlerini tamamladıktan sonra bunları silmeniz gerekir. Aktör çerçevesi, var olan her aktörle ilgili bazı meta verileri depolar. Bir aktörün tüm durumunun silinmesi, söz konusu aktörle ilgili meta verileri kaldırmaz. Sistemde depolanan tüm bilgileri kaldırmak için aktörü silmeniz gerekir (bkz . aktörleri ve durumlarını silme). Ek denetim olarak, aktör sayısının beklenen aralıkta olduğundan emin olmak için aktör hizmetini (bkz . aktörleri listeleme) bir kez sorgulamanız gerekir.

Aktör Hizmetinin veritabanı dosya boyutunun beklenen boyuttan daha fazla arttığını görürseniz, önceki yönergeleri izlediğinize emin olun. Bu yönergeleri izliyorsanız ve veritabanı dosya boyutu sorunları yaşamaya devam ediyorsanız yardım almak için ürün ekibiyle birlikte bir destek bileti açmanız gerekir.

Sonraki adımlar

Reliable Actors'da depolanan durum, diske yazılmadan ve yüksek kullanılabilirlik için çoğaltılmadan önce seri hale getirilmelidir. Aktör türü serileştirmesi hakkında daha fazla bilgi edinin.

Ardından Aktör tanılama ve performans izleme hakkında daha fazla bilgi edinin.