Megosztás a következőn keresztül:


Állapot nélküli feldolgozói szemcsék

Alapértelmezés szerint a Orleans futtatókörnyezet nem hoz létre egynél több mag aktiválását a fürtön belül. Ez a virtuális aktormodell legértelmesebb kifejezése, amelynek minden szemcséje egyedi típusú/identitású entitásnak felel meg. Vannak azonban olyan esetek is, amikor egy alkalmazásnak olyan funkcionális állapot nélküli műveleteket kell végrehajtania, amelyek nem kapcsolódnak a rendszer egy adott entitásához. Ha például az ügyfél olyan tömörített hasznos adatokkal rendelkező kéréseket küld, amelyeket le kell bontani, mielőtt a célszemponthoz irányíthatná őket feldolgozás céljából, az ilyen dekompressziós/útválasztási logika nincs az alkalmazás egy adott entitásához kötve, és könnyen felskálázható.

Amikor a rendszer egy StatelessWorkerAttribute szemcseosztályra alkalmazza, az azt jelzi a futtatókörnyezetnek, hogy az Orleans osztály szemcséit állapot nélküli feldolgozó szemcsékként kell kezelni. Az állapot nélküli feldolgozó szemcsék a következő tulajdonságokkal rendelkeznek, amelyek végrehajtásának végrehajtása nagyon eltér a normál szemcsés osztályokétól.

  1. A Orleans futtatókörnyezet több aktiválást is képes létrehozni az állapot nélküli feldolgozói szemcsékről a fürt különböző silóiban.
  2. Az állapot nélküli feldolgozói szemcsékre irányuló kérések helyileg lesznek végrehajtva, amíg a siló kompatibilis, ezért nem járnak hálózati vagy szerializálási költségekkel. Ha a helyi siló nem kompatibilis, a rendszer a kérelmeket egy kompatibilis silónak továbbítja.
  3. A Orleans futtatókörnyezet automatikusan további aktiválásokat hoz létre az állapot nélküli feldolgozói szemcsékről, ha a már meglévők foglaltak. A futtatókörnyezet által silónként létrehozott állapot nélküli feldolgozói szemcse aktiválásainak maximális számát alapértelmezés szerint a gépen lévő processzormagok száma korlátozza, kivéve, ha az opcionális maxLocalWorkers argumentum kifejezetten meg van adva.
  4. 2 és 3 miatt az állapot nélküli feldolgozói szemcse aktiválások nem egyenként kezelhetők. Az állapot nélküli feldolgozó szemcsékre irányuló két további kérést különböző aktiválásokkal lehet feldolgozni.

Az állapot nélküli feldolgozói szemcsék egyszerű módot biztosítanak egy automatikusan felügyelt gabonaaktiválási készlet létrehozására, amely automatikusan fel- és leskálázódik a tényleges terhelés alapján. A futtatókörnyezet mindig azonos sorrendben ellenőrzi a rendelkezésre álló állapot nélküli feldolgozói szemcseaktiválásokat. Emiatt mindig az első tétlen helyi aktiválásra küld kéréseket, amelyeket megtalálhat, és csak akkor jut el az utolsóhoz, ha az összes korábbi aktiválás foglalt. Ha az összes aktiválás foglalt, és az aktiválási korlátot nem érte el, a lista végén még egy aktiválást hoz létre, és elküldi neki a kérést. Ez azt jelenti, hogy ha az állapot nélküli feldolgozói szemcsére irányuló kérések száma nő, és a meglévő aktiválások mind jelenleg foglaltak, a futtatókörnyezet az aktiválások készletét a korlátig bővíti. Ezzel szemben, ha a terhelés csökken, és az állapot nélküli feldolgozó szemcse kisebb számú aktiválásával kezelhető, a lista végén lévő aktiválások nem kapják meg a hozzájuk küldött kéréseket. Ezek tétlenné válnak, és végül inaktiválódnak a szokásos aktiválási gyűjtési folyamattal. Ezért az aktiválások készlete végül a terhelésnek megfelelően zsugorodik.

Az alábbi példa egy állapot nélküli feldolgozói szemcseosztályt MyStatelessWorkerGrain határoz meg az alapértelmezett maximális aktiválási számkorláttal.

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

Az állapot nélküli feldolgozói szemcse hívása ugyanaz, mint bármely más gabona. Az egyetlen különbség az, hogy a legtöbb esetben egyetlen szemcsés azonosítót használnak, például 0 vagy Guid.Empty. Több szemcsés azonosító használható több állapot nélküli feldolgozói gabonakészlet esetén, amelyek azonosítónként egy-egynek a használata kívánatos.

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

Ez egy állapot nélküli feldolgozói szemcseosztályt határoz meg, amely silónként legfeljebb egyszemcsés aktiválással rendelkezik.

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

Vegye figyelembe, hogy StatelessWorkerAttribute nem változtatja meg a cél szemcsés osztály újbóli beszűkítését. A többi szemhez hasonlóan az állapot nélküli feldolgozó szemcsék alapértelmezés szerint nem lesznek újraküldve. Explicit módon újrakenthetőek a szemcsés osztályhoz adással ReentrantAttribute .

Állapot

Az állapot nélküli feldolgozó "állapot nélküli" része nem jelenti azt, hogy az állapot nélküli feldolgozó nem rendelkezhet állapotmal, és csak funkcionális műveletek végrehajtására korlátozódik. Mint minden más gabona, az állapot nélküli feldolgozó szemcsék is betölthetők és a memóriában tarthatók, bármilyen szükséges állapotban. Csak azért, mert egy állapot nélküli feldolgozó szemcse több aktiválását is létrehozhatja a fürt ugyanazon és különböző silóin, nincs egyszerű mechanizmus a különböző aktiválások által tartott állapot koordinálására.

Számos hasznos minta magában foglalja az állapot nélküli feldolgozó állapotát.

Gyorsgyorsítótár-elemek felskálázása

A magas átviteli sebességet tapasztaló gyorsgyorsítótár-elemek esetében az egyes elemeket állapot nélküli feldolgozói szemcsében tartva a következőt teszi:

  1. Automatikus vertikális felskálázás egy silóban és a fürt összes silójában, és;
  2. Az adatokat mindig helyben elérhetővé teszi azon a silón, amely az ügyfél-átjárón keresztül kapta meg az ügyfélkérést, hogy a kérések megválaszolhatók legyenek anélkül, hogy egy további hálózati ugrással egy másik silóba kellene ugraniuk.

Stílusösszesítés csökkentése

Bizonyos esetekben az alkalmazásoknak ki kell számítaniuk bizonyos metrikákat a fürt egy adott típusának összes szemcséjén, és rendszeresen jelenteni kell az összesítéseket. Ilyen például a játéktérképen több játékos jelentése, egy VoIP-hívás átlagos időtartama stb. Ha a több ezer vagy több millió szem mindegyike egyetlen globális összesítőnek jelenti a metrikáit, a gyűjtő azonnal túlterhelődik, és nem tudja feldolgozni a jelentések elárasztását. A másik módszer a feladat 2 (vagy több) lépéssé alakítása a stílusösszesítés csökkentése érdekében. Az aggregáció első rétege úgy történik, hogy jelentéskészítési szemcsék küldik a metrikáikat egy állapot nélküli feldolgozói elő-aggregációs szemcsének. A Orleans futtatókörnyezet automatikusan több aktiválást hoz létre az állapot nélküli feldolgozói szemcsékről minden silóval. Mivel minden ilyen hívás helyileg lesz feldolgozva távoli hívások vagy az üzenetek szerializálása nélkül, az ilyen összesítés költsége jelentősen alacsonyabb lesz, mint egy távoli esetben. Most az összesítés előtti állapot nélküli feldolgozói szemcse aktiválások függetlenül vagy más helyi aktiválásokkal összehangolva elküldhetik összesített jelentéseiket a globális végső összesítőnek (vagy szükség esetén egy másik csökkentési rétegnek) anélkül, hogy túlterhelné őket.