Orleans grain dizini
Taneler kararlı mantıksal kimliklere sahiptir ve uygulamanın ömrü boyunca birçok kez etkinleştirilebilir (örneği oluşturulur) ve devre dışı bırakılabilir, ancak zaman içinde en fazla bir tane etkinleştirmesi vardır. Bir tane her etkinleştirildiğinde kümedeki farklı bir siloya yerleştirilebilir. Kümede bir tane etkinleştirildiğinde, genel kayıt defteri olan grain dizinine kaydedilir. Bu, söz konusu dilimin sonraki çağrılarının söz konusu dilimin etkinleştirilmesine teslim edilmesini ve bu dilimin başka hiçbir etkinleştirmesinin (örneğinin) oluşturulmamasını sağlar. Grain dizini, bir taneli kimlik ile geçerli etkinleştirmesinin bulunduğu (silo) arasında eşleme tutmakla sorumludur.
Varsayılan olarak, Orleans yerleşik bir dağıtılmış bellek içi dizini kullanır. Bu dizin sonunda tutarlıdır ve kümedeki tüm silolar arasında dağıtılmış karma tablo biçiminde bölümlenmiştir.
3.2.0'dan başlayarak grain Orleans dizininin takılabilir uygulamalarını da destekler.
3.2.0 sürümüne bu tür iki eklenti dahildir:
- Azure Tablo uygulaması: Microsoft.Orleans. GrainDirectory.AzureStorage
- Redis deposu uygulaması: Microsoft..Orleans. GrainDirectory.Redis
Hangi taneli dizin uygulamasının tahıl türü temelinde kullanılacağını yapılandırabilir ve hatta uygulamanızı da ekleyebilirsiniz.
Hangi taneli dizini kullanmalısınız?
Her zaman varsayılan değerle (yerleşik bellek içi dağıtılmış dizin) başlamanızı öneririz. Sonunda tutarlı olsa ve küme kararsız olduğunda zaman zaman yinelenen etkinleştirmeye izin vermesine rağmen, yerleşik dizin dış bağımlılıklar olmadan kendi kendine yeterlidir, herhangi bir yapılandırma gerektirmez ve tüm zaman boyunca üretimde kullanılmıştır.
Daha güçlü tek etkinleştirme garantisine sahip bir taneli dizin için biraz deneyiminiz Orleans varsa ve/veya kümedeki bir silo kapatıldığında devre dışı bırakılan tanecik sayısını en aza indirmek istediğinizde, Redis uygulaması gibi grain dizininin depolama tabanlı bir uygulamasını kullanmayı göz önünde bulundurun. Uzun ömürlü ve önemli miktarda durum veya pahalı bir başlatma işlemine sahip olanlardan başlayarak, önce bir veya birkaç tane türü için kullanmayı deneyin.
Yapılandırma
Varsayılan olarak hiçbir şey yapmanız gerekmez; bellek içi grain dizini otomatik olarak kullanılır ve küme genelinde bölümlenir. Varsayılan olmayan bir tanecik dizin yapılandırması kullanmak istiyorsanız, kullanılacak dizin eklentisinin adını belirtmeniz gerekir. Bu, grain sınıfındaki bir öznitelik aracılığıyla ve silo yapılandırması sırasında bağımlılık ekleme ve bu ada sahip dizin eklentisi ile yapılabilir.
Taneli yapılandırma
ile grain directory eklenti adını GrainDirectoryAttributebelirtme:
[GrainDirectory(GrainDirectoryName = "my-grain-directory")]
public class MyGrain : Grain, IMyGrain
{
// ...
}
Silo yapılandırması
Burada Redis grain dizin uygulamasını yapılandıracağız:
siloBuilder.AddRedisGrainDirectory(
"my-grain-directory",
options => options.ConfigurationOptions = redisConfiguration);
Azure grain dizini aşağıdaki gibi yapılandırılır:
siloBuilder.AddAzureTableGrainDirectory(
"my-grain-directory",
options => options.ConnectionString = azureConnectionString);
Farklı tanecik sınıfları için kullanılacak farklı adlara sahip birden çok dizin yapılandırabilirsiniz:
siloBuilder
.AddRedisGrainDirectory(
"redis-directory-1",
options => options.ConfigurationOptions = redisConfiguration1)
.AddRedisGrainDirectory(
"redis-directory-2",
options => options.ConfigurationOptions = redisConfiguration2)
.AddAzureTableGrainDirectory(
"azure-directory",
options => options.ConnectionString = azureConnectionString);