Školení
Modul
Vytvoření první aplikace Orleans pomocí ASP.NET Core 8.0 - Training
Naučte se vytvářet aplikace nativní pro cloud s distribuovanými aplikacemi pomocí Orleans.
Tento prohlížeč se už nepodporuje.
Upgradujte na Microsoft Edge, abyste mohli využívat nejnovější funkce, aktualizace zabezpečení a technickou podporu.
Modul runtime ve výchozím nastavení Orleans nevytáčí více než jednu aktivaci agregace v rámci clusteru. Jedná se o nejtuitivnější výraz modelu virtuálního objektu actor s každým agregačním intervalem odpovídajícím entitě s jedinečným typem nebo identitou. Existují však také případy, kdy aplikace potřebuje provádět funkční bezstavové operace, které nejsou svázané s konkrétní entitou v systému. Pokud například klient odesílá požadavky s komprimovanými datovými částmi, které je potřeba dekompresi před tím, než je možné je směrovat do cílového agregačního intervalu pro zpracování, není taková logika dekomprimace nebo směrování svázaná s konkrétní entitou v aplikaci a může snadno škálovat kapacitu.
StatelessWorkerAttribute Při použití na třídu zrnitosti označuje Orleans modul runtime, že zrnka této třídy by měla být považována za bezstavová pracovní zrnka. Bezstavová zrnka pracovních procesů mají následující vlastnosti, které jejich provádění velmi liší od normálních tříd zrn.
maxLocalWorkers
argument.Bezstavová zrnka pracovních procesů poskytují jednoduchý způsob, jak vytvořit automaticky spravovaný fond aktivací zrnitosti, který automaticky vertikálně navyšuje a snižuje kapacitu na základě skutečného zatížení. Modul runtime vždy vyhledává dostupné aktivace bezstavového pracovního procesu ve stejném pořadí. Z tohoto důvodu vždy odesílá požadavky na první nečinnou místní aktivaci, kterou může najít a dostane se k poslední aktivaci pouze v případě, že všechny předchozí aktivace jsou zaneprázdněné. Pokud jsou všechny aktivace zaneprázdněné a limit aktivace nebyl dosažen, vytvoří na konci seznamu další aktivaci a odešle do ní požadavek. To znamená, že když se zvýší rychlost požadavků na bezstavový agregační interval pracovních procesů a všechny stávající aktivace jsou momentálně zaneprázdněné, modul runtime rozšíří fond svých aktivací až do limitu. Naopak, když zatížení klesne a lze ho zpracovat menším počtem aktivací bezstavového pracovního intervalu, aktivace na konci seznamu nebudou dostávat žádosti o odeslání. Stanou se nečinné a nakonec se deaktivují standardním procesem shromažďování aktivace. Fond aktivací se proto nakonec zmenší tak, aby odpovídal zatížení.
Následující příklad definuje třídu MyStatelessWorkerGrain
bezstavového pracovního intervalu s výchozím limitem maximálního počtu aktivačních čísel.
[StatelessWorker]
public class MyStatelessWorkerGrain : Grain, IMyStatelessWorkerGrain
{
// ...
}
Volání bezstavového pracovního intervalu je stejné jako jakékoli jiné agregační.
Jediným rozdílem je, že ve většině případů se používá jedno ID agregačního intervalu, například 0
Guid.Empty.
Pokud máte více bezstavových fondů agregačních intervalů, je žádoucí použít několik ID jednotlivých intervalů.
var worker = GrainFactory.GetGrain<IMyStatelessWorkerGrain>(0);
await worker.Process(args);
Tato třída definuje bezstavovou třídu zrnitého pracovního procesu, která nemá více než jednu aktivaci na silo.
[StatelessWorker(1)] // max 1 activation per silo
public class MyLonelyWorkerGrain : ILonelyWorkerGrain
{
//...
}
Všimněte si, že StatelessWorkerAttribute nemění reentrancy cílové třídy agregace. Stejně jako jakékoli jiné zrno jsou bezstavová pracovní zrna ve výchozím nastavení neopakována. Je možné je explicitně vytvořit znovu přidáním ReentrantAttribute třídy zrnitosti.
Bezstavová část "bezstavového pracovního procesu" neznamená, že bezstavový pracovní proces nemůže mít stav a je omezen pouze na provádění funkčních operací. Stejně jako jakékoli jiné zrnitost může bezstavový pracovní interval načíst a udržovat v paměti libovolný stav, který potřebuje. Je to jen proto, že na stejném a jiném sila clusteru lze vytvořit více aktivací bezstavového pracovního intervalu, neexistuje žádný snadný mechanismus pro koordinaci stavu uchovávaného různými aktivacemi.
Několik užitečných vzorů zahrnuje bezstavové pracovní proces držící stav.
U položek horké mezipaměti, u nichž dochází k vysoké propustnosti, je uchovávání každé takové položky v bezstavovém pracovním intervalu:
V některých scénářích musí aplikace počítat určité metriky napříč všemi zrnky konkrétního typu v clusteru a pravidelně hlásit agregace. Příklady hlásí několik hráčů na mapu hry, průměrnou dobu trvání hovoru VoIP atd. Pokud by každý z mnoha tisíců nebo milionů zrn měl hlásit metriky jednomu globálnímu agregátoru, agregátor by se okamžitě přetížil a nemohl zpracovat záplavu sestav. Alternativním přístupem je převést tento úkol na 2 (nebo více) kroků, aby se snížila agregace stylu. První vrstva agregace se provádí tak, že vykazuje agregační agregaci, která odesílá metriky do bezstavového pracovního procesu. Modul Orleans runtime automaticky vytvoří více aktivací bezstavového pracovního intervalu s každým silem. Vzhledem k tomu, že všechna taková volání budou zpracována místně bez vzdálených volání nebo serializace zpráv, náklady na takovou agregaci budou výrazně nižší než ve vzdáleném případě. Nyní může každá aktivace bezstavového agregace bezstavového pracovního procesu nezávisle nebo v koordinaci s jinými místními aktivacemi odesílat agregované sestavy globálnímu konečnému agregátoru (nebo do jiné vrstvy redukce v případě potřeby) bez přetížení.
Zpětná vazba k produktu .NET
.NET je open source projekt. Vyberte odkaz pro poskytnutí zpětné vazby:
Školení
Modul
Vytvoření první aplikace Orleans pomocí ASP.NET Core 8.0 - Training
Naučte se vytvářet aplikace nativní pro cloud s distribuovanými aplikacemi pomocí Orleans.