Aracılığıyla paylaş


Durumsuz çalışan elemanlar

Varsayılan olarak, Orleans çalışma zamanı, küme içinde bir tane etkinleştirmeden fazlasını oluşturmaz. Bu, sanal aktör modelinin en sezgisel ifadesidir ve her bir dilim benzersiz bir türe/kimliğe sahip bir varlığa karşılık gelir. Ancak bazen bir uygulamanın sistemdeki belirli bir varlığa bağlı olmayan işlevsel durum bilgisi olmayan işlemler gerçekleştirmesi gerekir. Örneğin, bir istemci işlenmek üzere hedef dilime yönlendirmeden önce sıkıştırmayı kaldırması gereken sıkıştırılmış yüklere sahip istekler gönderirse, bu tür sıkıştırma/yönlendirme mantığı belirli bir varlığa bağlı değildir ve ölçeği kolayca genişletebilir.

StatelessWorkerAttribute öğesini bir tanecik sınıfına uyguladığınızda, bu sınıfa ait tanelerin çalışma zamanında durum bilgisi olmayan çalışan taneler olarak ele alınması gerektiğini Orleans çalıştırma ortamına belirtir. Durumsuz çalışan taneler, çalışma şekillerini standart tanecik sınıflarından çok farklı hale getiren aşağıdaki özelliklere sahiptir:

  1. Çalışma Orleans zamanı, kümedeki farklı silolarda durum bilgisi olmayan bir çalışan diliminin birden çok etkinleştirmesini oluşturabilir ve oluşturabilir.
  2. Durum bilgisine sahip olmayan çalışan birimler, silo uyumlu olduğu sürece istekleri yerel olarak yürütür, bu nedenle ağ veya serileştirme maliyetleri oluşmaz. Yerel silo uyumlu değilse istekler uyumlu bir siloya iletilir.
  3. Çalışma Orleans Zamanı, mevcut çalışanlar meşgulse durum bilgisi olmayan bir çalışan diliminde otomatik olarak ek etkinleştirmeler oluşturur. Silo başına maksimum etkinleştirme sayısı, isteğe bağlı maxLocalWorkers bağımsız değişkenini açıkça kullanmadığınız sürece makinedeki CPU çekirdeği sayısıyla varsayılan olarak sınırlıdır.
  4. 2 ve 3. maddeler nedeniyle, stateless çalışan tahıl aktivasyonları tek tek adreslenemez. Durum bilgisi olmayan bir çalışan taneciğine yönelik ardışık iki istek, farklı etkinleştirmelerle işleyebilir.

Durumsuz işçi tanecikleri, asıl yüke göre ölçeği otomatik olarak artırıp azaltan otomatik yönetilen bir tanecik etkinleştirme havuzu oluşturmanın kolay 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 bulduğu ilk boş yerel etkinleştirmeye iletir ve yalnızca önceki tüm etkinleştirmeler meşgulse son etkinleştirmeye geçer. 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ü 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 daha az sayıda etkinleştirme bunu işleyebilirse, listenin sonundaki etkinleştirmeler istek almaz. 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 sayısı sınırına sahip durum bilgisi olmayan bir işçi tahıl sınıfını MyStatelessWorkerGrain tanımlar.

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

Durum bilgisi olmayan bir çalışan grain'e çağrı yapmak, diğer grain'lere çağrı yapmakla aynıdır. Tek fark, çoğu durumda, örneğin 0 veya Guid.Empty gibi tek bir taneli kimlik kullanmanızdır. Durum bilgisi olmayan birden çok çalışan tane havuzuna (kimlik başına bir tane) sahip olmak istenirse, birden çok taneli kimlik kullanabilirsiniz.

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

Bu örnek, silo başına en fazla bir etkinleştirme içeren, durum bilgisi olmayan bir çalışan grain sınıfını tanımlar.

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

StatelessWorkerAttribute Hedef tanecik sınıfının yeniden giriş yeteneğini değiştirmediğini unutmayın. Diğer veri bileşenleri gibi, durum bilgisi olmayan çalışan bileşenler de varsayılan olarak yeniden girilebilir değildir. Tanecik sınıfına bir ReentrantAttribute ekleyerek bunları yeniden girişe uygun hale getirebilirsiniz.

Devlet

"Durum bilgisi olmayan çalışanın" "durum bilgisi olmayan" bölümü, durum bilgisi olmayan bir çalışanın durumu olamayacağı veya yalnızca işlevsel işlemleri yürütmekle sınırlı olduğu anlamına gelmez. 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. Ancak, kümedeki aynı ve farklı silolarda durumsuz çalışan tahılın birden fazla etkinleştirmesi yapılabildiğinden, farklı etkinleştirmeler tarafından tutulan durumu koordine etmek için kolay bir yol yoktur.

Çeşitli yararlı desenler, durum bilgisi olmayan çalışanların durumu tutmalarını içerir.

Ölçeklendirilen sık erişimli önbellek öğeleri

Yüksek aktarım hızına sahip sık erişimli önbellek öğeleri için her öğeyi durum bilgisi olmayan bir çalışan diliminde tutmak şu avantajları sağlar:

  1. Bir silo içinde ve kümedeki tüm silolar arasında otomatik olarak ölçeklendirme yapar.
  2. Verileri istemci ağ geçidi aracılığıyla istemci isteğini alan siloda her zaman yerel olarak kullanılabilir hale getirir ve isteklerin başka bir siloya ek bir ağ atlama olmadan yanıtlanması sağlanır.

Azaltma stili toplama

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 oyuncu sayısını veya VoIP çağrısının ortalama süresini bildirme verilebilir. Binlerce veya milyonlarca tanenin her biri ölçümlerini tek bir küresel toplayıcıya bildirse, toplayıcı hemen aşırı yüklenir ve rapor akışını işleyemez hale gelir. Alternatif yaklaşım, bu görevi iki aşamalı (veya daha fazla) azaltma stili toplamaya dönüştürmektir. Toplamanın ilk katmanı, raporlama taneciklerinin ölçümlerini durum bilgisi olmayan bir çalışan ön toplama dilimine göndermesini içerir. Çalışma Orleans zamanı, her siloda durum bilgisi olmayan çalışan diliminin birden çok etkinleştirmesini otomatik olarak oluşturur. Bu Orleans tür tüm çağrıları uzaktan aramalar veya ileti serileştirmesi olmadan yerel olarak işlediğinden, bu toplamanın maliyeti uzak bir durumdan önemli ölçüde daha düşüktür. Artık her toplama öncesi durum bilgisi olmayan çalışan dilimi etkinleştirmesi, bağımsız olarak veya diğer yerel etkinleştirmelerle eşgüdümlü olarak toplanmış raporunu aşırı yüklemeden genel son toplayıcıya (veya gerekirse başka bir azaltma katmanına) gönderebilir.