Durum bilgisi olmayan çalışan taneleri

Varsayılan olarak, Orleans çalışma zamanı küme içindeki bir dilimin birden fazla etkinleştirmesini oluşturmaz. Bu, benzersiz bir türe/kimliğe sahip bir varlığa karşılık gelen her bir taneli sanal aktör modelinin en sezgisel ifadesidir. Ancak, bir uygulamanın sistemdeki belirli bir varlığa bağlı olmayan işlevsel durum bilgisi olmayan işlemler gerçekleştirmesi gereken durumlar da vardır. Örneğin, istemci, işlenmek üzere hedef dilime yönlendirilmeden önce sıkıştırılması gereken sıkıştırılmış yükleri olan istekler gönderirse, bu tür sıkıştırma/yönlendirme mantığı uygulamadaki belirli bir varlığa bağlı değildir ve kolayca ölçeği genişletebilir.

StatelessWorkerAttribute bir tanecik sınıfına uygulandığında, çalışma zamanına Orleans bu sınıfın tanelerinin durum bilgisi olmayan çalışan taneleri olarak ele alınması gerektiğini belirtir. Durum bilgisi olmayan çalışan taneleri, yürütmelerini normal tanecik sınıflarından çok farklı hale getiren aşağıdaki özelliklere sahiptir.

  1. Çalışma Orleans zamanı, kümenin farklı silolarında durum bilgisi olmayan bir çalışan diliminin birden çok etkinleştirmesini oluşturabilir ve oluşturur.
  2. Durum bilgisi olmayan çalışan taneciklerine yapılan istekler silo uyumlu olduğu sürece yerel olarak yürütülür ve bu nedenle ağ veya serileştirme maliyetleri oluşmaz. Yerel silo uyumlu değilse istekler uyumlu bir siloya iletilir.
  3. Çalışma Orleans Zamanı, zaten mevcut olanlar meşgulse durum bilgisi olmayan bir çalışan diliminde otomatik olarak ek etkinleştirmeler oluşturur. Çalışma zamanının silo başına oluşturduğu durum bilgisi olmayan bir çalışanın etkinleştirme sayısı, isteğe bağlı maxLocalWorkers bağımsız değişken tarafından açıkça belirtilmediği sürece, varsayılan olarak makinedeki CPU çekirdeği sayısıyla sınırlıdır.
  4. 2 ve 3 nedeniyle durum bilgisi olmayan çalışan dilimi etkinleştirmeleri ayrı ayrı ele alınamaz. Durum bilgisi olmayan bir çalışan dilimine yönelik sonraki iki istek, farklı etkinleştirmelerle işlenebilir.

Durum bilgisi olmayan çalışan tanecikleri, gerçek yüke göre ölçeği otomatik olarak artırıp azaltan otomatik olarak yönetilen bir tane etkinleştirme havuzu oluşturmanın basit bir yolunu sağlar. Çalışma zamanı her zaman kullanılabilir durum bilgisi olmayan çalışan dilimi etkinleştirmelerini aynı sırada tarar. Bu nedenle, istekleri her zaman bulabileceği ilk boşta yerel etkinleştirmeye iletir ve yalnızca önceki tüm etkinleştirmeler meşgulse sonuncuya ulaşır. Tüm etkinleştirmeler meşgulse ve etkinleştirme sınırına ulaşılmamışsa, listenin sonunda bir etkinleştirme daha oluşturur ve isteği ona iletir. Bu, durum bilgisi olmayan bir çalışana yönelik istek oranı arttığında ve mevcut etkinleştirmelerin tümü şu anda meşgul olduğunda çalışma zamanının etkinleştirme havuzunu sınıra kadar genişlettiği anlamına gelir. Buna karşılık, yük düştüğünde ve durum bilgisi olmayan çalışan diliminin daha az sayıda etkinleştirmesi tarafından işlenebilirse, listenin sonundaki etkinleştirmeler onlara istek gönderilmez. Bunlar boşta kalır ve sonunda standart etkinleştirme toplama işlemi tarafından devre dışı bırakılır. Bu nedenle, etkinleştirme havuzu sonunda yükle eşleşecek şekilde küçülür.

Aşağıdaki örnek, varsayılan maksimum etkinleştirme numarası sınırına sahip durum bilgisi olmayan bir çalışan dilimi sınıfını MyStatelessWorkerGrain tanımlar.

[StatelessWorker]
public class MyStatelessWorkerGrain : Grain, IMyStatelessWorkerGrain
{
    // ...
}

Durum bilgisi olmayan bir çalışan dilimine çağrı yapmak, diğer tahıllar ile aynıdır. Tek fark, çoğu durumda veya Guid.Emptygibi 0 tek bir tanecik kimliğinin kullanılmasıdır. Durum bilgisi olmayan birden çok çalışan hub'ı havuzu olduğunda birden fazla tane kimlik kullanılabilir. Kimlik başına bir tane tercih edilir.

var worker = GrainFactory.GetGrain<IMyStatelessWorkerGrain>(0);
await worker.Process(args);

Bu, silo başına en fazla bir taneli etkinleştirmeye sahip durum bilgisi olmayan bir çalışan tahıl sınıfı tanımlar.

[StatelessWorker(1)] // max 1 activation per silo
public class MyLonelyWorkerGrain : ILonelyWorkerGrain
{
    //...
}

StatelessWorkerAttribute Hedef tanecik sınıfının yeniden girişini değiştirmediğini unutmayın. Diğer tahıllar gibi durum bilgisi olmayan çalışan taneleri de varsayılan olarak yeniden giriş içermez. Bunlar, tanecik sınıfına bir ReentrantAttribute eklenerek açıkça yeniden giriş yapılabilir.

Durum

"Durum bilgisi olmayan çalışanın" "durum bilgisi olmayan" bölümü, durum bilgisi olmayan bir çalışanın durumu olamayacağı anlamına gelmez ve yalnızca işlevsel işlemleri yürütmekle sınırlıdır. Diğer tüm tahıllar gibi durum bilgisi olmayan bir çalışan dilimi de ihtiyaç duyduğu herhangi bir durumu yükleyip bellekte tutabilir. Bunun nedeni, durum bilgisi olmayan bir çalışanın birden çok etkinleştirmesinin kümenin aynı ve farklı silolarında oluşturulabilmesidir; farklı etkinleştirmeler tarafından tutulan durumu koordine etmek kolay bir mekanizma değildir.

Çeşitli yararlı desenler durum bilgisi olmayan çalışan tutma durumunu içerir.

Ölçeği genişletilen sık erişimli önbellek öğeleri

Yüksek aktarım hızına sahip sık erişimli önbellek öğeleri için bu tür öğelerin her birinin durum bilgisi olmayan bir çalışan diliminde tutulması şunları sağlar:

  1. Bir silo içinde ve kümedeki tüm silolar arasında otomatik olarak ölçeği genişletir ve;
  2. İstemci isteğini istemci ağ geçidi üzerinden alan siloda verilerin her zaman yerel olarak kullanılabilir olmasını sağlar, böylece istekler başka bir siloya ek ağ atlamadan yanıtlanabilir.

Stil toplamayı azaltma

Bazı senaryolarda uygulamaların kümedeki belirli bir türün tüm dilimlerinde belirli ölçümleri hesaplaması ve toplamaları düzenli aralıklarla raporlaması gerekir. Örnek olarak oyun haritası başına birkaç oyuncu raporlama, VoIP çağrısının ortalama süresi vb. verilebilir. Binlerce veya milyonlarca taneden her biri ölçümlerini tek bir küresel toplayıcıya raporlasaydı, toplayıcı hemen aşırı yüklenir ve rapor taşması işlenemezdi. Alternatif yaklaşım, stil toplamayı azaltmak için bu görevi 2 (veya daha fazla) adıma dönüştürmektir. Toplamanın ilk katmanı, ölçümlerini durum bilgisi olmayan bir çalışan ön toplama dilimine gönderen tanecik bildirilerek gerçekleştirilir. Çalışma Orleans zamanı, her silo ile durum bilgisi olmayan çalışan diliminin birden çok etkinleştirmesini otomatik olarak oluşturur. Bu tür tüm çağrılar uzaktan çağrı yapılmadan veya iletilerin seri hale getirilmesi olmadan yerel olarak işlenecek olduğundan, bu toplamanın maliyeti uzak bir durumdan önemli ölçüde daha az olacaktır. Artık, bağımsız olarak veya diğer yerel etkinleştirmelerle eşgüdümlü olarak, önceden toplama durum bilgisi olmayan çalışan dilimi etkinleştirmelerinin her biri, toplanmış raporlarını aşırı yüklemeden genel son toplayıcıya (veya gerekirse başka bir azaltma katmanına) gönderebilir.