Microsoft Orleans
Orleans:
- Je multiplatformní architektura pro vytváření robustních a škálovatelných distribuovaných aplikací. Distribuované aplikace se definují jako aplikace, které přesahují více než jeden proces, často přes hranice hardwaru pomocí komunikace mezi dvěma účastníky.
- Škáluje se z jednoho místního serveru na tisíce distribuovaných a vysoce dostupných aplikací v cloudu.
- Rozšiřuje známé koncepty a idiomy jazyka C# do prostředí s více servery.
- Je navržená pro elastické škálování. Když se hostitel připojí ke clusteru, může přijímat nové aktivace. Když hostitel opustí cluster, předchozí aktivace na daném hostiteli se podle potřeby znovu aktivuje na zbývajících hostitelích. Hostitel může opustit cluster kvůli zmenšení rozsahu nebo selhání počítače. Cluster Orleans lze vertikálně snížit na jednoho hostitele. Stejné vlastnosti, které umožňují elastickou škálovatelnost, umožňují odolnost proti chybám. Cluster automaticky rozpozná a rychle se zotaví z výpadků.
- Zjednodušuje složitost vývoje distribuovaných aplikací tím, že poskytuje společnou sadu vzorů a rozhraní API.
- Umožňuje vývojářům, kteří znají vývoj jednoserverových aplikací, přechod na vytváření odolných, škálovatelných cloudových nativních služeb a distribuovaných aplikací.
- Někdy se nazývá "Distributed .NET".
- Je zvolená architektura při vytváření aplikací nativních pro cloud.
- Spustí se kdekoli, kde se podporuje .NET. To zahrnuje hostování v Systémech Linux, Windows a macOS.
- Aplikace je možné nasadit do kubernetes, virtuálních počítačů a služeb PaaS, jako jsou Azure App Service a azure Container Apps.
Model aktorů
Orleans je založen na hereckém modelu. Aktorový model vznikl na počátku 70. let a je nyní základní součástí Orleans. Model actor je programovací model, ve kterém je každý actor lehký, souběžný, neměnný objekt, který zapouzdřuje část stavu a odpovídající chování. Aktéři vzájemně komunikují výhradně pomocí asynchronních zpráv. Orleans zejména vynalezl abstrakci virtuálního herce, kde herci existují neustále.
Poznámka
Aktéři jsou čistě logické entity, které vždy existují prakticky. Objekt actor nelze explicitně vytvořit ani zničit a jeho virtuální existence není ovlivněna selháním serveru, který ho spustí. Vzhledem k tomu, že aktéři vždy existují, jsou vždy adresovatelní.
Jedná se o nový přístup k vytváření nové generace distribuovaných aplikací pro cloudovou éru. Programovací model Orleans zkrotí složitost, která je součástí vysoce paralelních distribuovaných aplikací, bez omezení nebo omezení pro vývojáře.
Další informace najdete v tématu Orleans: Virtual Actors prostřednictvím microsoft Research. Virtuální herec je reprezentován jako "Orleans grain."
Co jsou zrnka?
Zrno je jedním z několika Orleans primitivů. Z hlediska modelu objektu actor je zrnko virtuálním aktérem. Základním stavebním blokem v každé aplikaci Orleans je zrno. Zrna jsou entity, které zahrnují uživatelem definovanou identitu, chování a stav. Zvažte následující vizuální znázornění zrna:
Identity grán jsou uživatelem definované klíče, které grány vždy zpřístupňují pro vyvolání. Zrna lze vyvolat jinými zrny nebo libovolným počtem vnějších klientů. Každé z nich je instance třídy, která implementuje jedno nebo více následujících rozhraní:
-
IGrainWithGuidKey: Rozhraní značky pro zrnka s klíči
Guid
. -
IGrainWithIntegerKey: Rozhraní značky pro zrnka s klíči
Int64
. -
IGrainWithStringKey: Rozhraní značky pro zrnka s klíči
string
. - IGrainWithGuidCompoundKey: Rozhraní značky pro zrnka s složenými klíči.
- IGrainWithIntegerCompoundKey: Rozhraní značky pro zrnka s složenými klíči.
Zrnka můžou mít nestálá nebo trvalá data stavu, která mohou být uložena v jakémkoli úložném systému. Zrna implicitně rozdělují stavy aplikací, což umožňuje automatickou škálovatelnost a zjednodušení obnovení při selhání. Stav zrnitosti se uchovává v paměti, zatímco je zrnitost aktivní, což vede k nižší latenci a menšímu zatížení úložišť dat.
Vytvoření instance zrn se automaticky provádí na vyžádání Orleans modulem runtime. Zrna, která nejsou po nějakou dobu používána, se automaticky odstraní z paměti, aby se uvolnily prostředky. Je to možné kvůli stabilní identitě, která umožňuje vyvolání zrn bez ohledu na to, jestli jsou už načtené do paměti, nebo ne. To také umožňuje transparentní obnovení ze selhání, protože volající nemusí vědět, na kterém serveru je v libovolném okamžiku vytvořeno zrno. Zrnka mají spravovaný životní cyklus s Orleans runtime zodpovědným za aktivaci/deaktivaci a umístěním/umístěním zrn podle potřeby. Vývojář tak může psát kód, jako by byla všechna zrnka vždy v paměti.
Co jsou silo systémy?
To make the sentence slightly more explicit, we can propose: "Silo je dalším příkladem primitiva Orleans." Silo obsahuje jedno nebo více zrní. Modul runtime Orleans implementuje programovací model pro aplikace.
Skupina sila se obvykle spouští jako cluster pro zajištění škálovatelnosti a odolnosti proti chybám. Když běží jako cluster, sila se vzájemně koordinují, aby distribuovala práci a detekovala a obnovila se při selhání. Modul runtime umožňuje vzájemné komunikaci zrn hostovaných v clusteru, jako by byla v rámci jednoho procesu. Pokud chcete pomoct vizualizovat vztah mezi shluky, silami a zrnky, zvažte následující diagram:
Předchozí diagram znázorňuje vztah mezi shluky, silami a zrnky. Můžete mít libovolný počet shluků, každý shluk má jedno nebo více sila a každé silo má jedno nebo více zrn.
Vedle základního programovacího modelu poskytují silám zrna sadu služeb runtime, jako jsou časovače, připomenutí (trvalé časovače), trvalost, transakce, proudy a další. Další informace najdete v tématu Co můžu dělat s Orleans?.
Webové aplikace a další externí klienti volají grains v clusteru pomocí klientské knihovny, která automaticky spravuje síťovou komunikaci. Klienti mohou být také spolu hostovaní ve stejném procesu s silami pro zjednodušení.
Co můžu dělat s Orleans?
Orleans je architektura pro vytváření aplikací nativních pro cloud a měla by se zvážit při vytváření aplikací .NET, které by nakonec potřebovaly škálovat. Existují zdánlivě nekonečné způsoby použití Orleans, ale následující jsou některé z nejběžnějších způsobů; Hry, bankovnictví, chatovací aplikace, GPS sledování, burzovní obchodování, nákupní košíky, hlasovací aplikace a další. Orleans používá Microsoft v Azure, Xboxu, Skypu, Halo, PlayFabu, Gears of War a mnoha dalších interních službách. Orleans má mnoho funkcí, které usnadňují použití pro různé aplikace.
Perzistence
Orleans poskytuje jednoduchý model trvalosti, který zajišťuje dostupnost stavu před zpracováním požadavku a zachování konzistence. Zrna můžou mít více pojmenovaných trvalých datových objektů. Může se například jednat o profil uživatele s názvem "profile" a jeden s názvem "inventory" pro svůj inventář. Tento stav lze uložit v libovolném systému úložiště.
Zatímco je spuštěn úkol, stav je uchováván v paměti, aby se žádosti o čtení mohly obsluhovat bez přístupu k úložišti. Když grain aktualizuje svůj stav, volání IStorage.WriteStateAsync zajistí aktualizaci trvalého úložiště pro trvanlivost a konzistenci.
Další informace najdete v tématu Trvalost zrnitosti.
Časovače a připomenutí
Připomenutí jsou trvalým plánovacím mechanismem pro zrnka. Dají se použít k zajištění toho, aby se některá akce dokončila v budoucnu, i když ten objekt v té době není aktivován. Časovače jsou dočasné protějšky připomenutí a lze je použít pro události s vysokou frekvencí, které nejsou závislé na spolehlivosti.
Další informace najdete v tématu Časovače a Připomenutí.
Flexibilní umístění zrnitosti
Když se v Orleansaktivuje zrnko, modul runtime rozhodne, na kterém serveru (silu) by se mělo toto zrnko aktivovat. Tomu se říká umístění zrna.
Proces umístění v Orleans je plně konfigurovatelný. Vývojáři si můžou vybrat ze sady předpřipravených zásad umístění, jako jsou náhodná, upřednostňované místní a zásady založené na zatížení, nebo si mohou nakonfigurovat vlastní logiku. To umožňuje plnou flexibilitu při rozhodování o tom, kde se zrna vytvářejí. Například zrnka se dají umístit na server blízko prostředků, se kterými potřebují pracovat nebo s jinými zrnky, se kterými komunikují.
Další informace naleznete v tématu umístění zrna.
Verzování Grain a heterogenní clustery
Upgrade produkčních systémů způsobem, který bezpečně odpovídá změnám, může být náročný, zejména ve stavových systémech. Aby se to zohlednilo, rozhraní zrna v Orleans mohou být verziována.
Cluster udržuje mapování toho, které implementace zrna jsou k dispozici na kterých silech v rámci clusteru a verze těchto implementací. Tato verze informací je používána modulem runtime ve spojení se strategiemi umístění k rozhodování o umístění při směrování volání zrn. Kromě toho, že je možné bezpečně aktualizovat verze zrn, umožňuje to také heterogenní clustery, kde různá sila mají k dispozici různé sady implementací zrn.
Další informace naleznete v tématu Grain Versioning.
Bezstavové pracovníky
Bezstavoví pracovníci jsou speciálně označené jednotky, které nemají žádný přidružený stav a lze je aktivovat na více silech současně. To umožňuje větší paralelismus pro bezstavové funkce.
Další informace najdete v tématu bezstavových pracovních zrn.
Filtry volání grainu
filtr volání je logika, která je společná pro mnoho zrn. Orleans podporuje filtry příchozích i odchozích hovorů. Všechny filtry pro autorizaci, protokolování a telemetrii a zpracování chyb jsou považovány za běžné.
Kontext požadavku
Metadata a další informace lze předat řadou požadavků prostřednictvím kontextu požadavku . Kontext požadavku lze použít k uchovávání distribuovaných trasovacích informací nebo jakýchkoli jiných uživatelem definovaných hodnot.
Distribuované transakce ACID
Kromě jednoduchého modelu trvalosti popsaného výše mohou zrnka mít transakční stav. Více zrn se mohou společně účastnit ACID transakcí bez ohledu na to, kde je nakonec jejich stav uložen. Transakce v Orleans jsou distribuované a decentralizované (neexistuje žádný centrální správce transakcí ani koordinátor transakcí) a mají serializovatelnou izolaci.
Další informace o transakcích naleznete v tématu Transakce.
Proudy
Streamy pomáhají vývojářům zpracovávat řadu datových položek téměř v reálném čase. Orleans streamy jsou spravované; Datové proudy není nutné vytvářet ani registrovat před publikováním agregačního nebo klientského streamu nebo přihlášením k odběru datového proudu. To umožňuje větší oddělení výrobců datových proudů a spotřebitelů od sebe a infrastruktury.
Zpracování datových proudů je spolehlivé: zrnka může ukládat kontrolní body (kurzory) a během aktivace nebo kdykoli později obnovit do uloženého kontrolního bodu. Streamy podporují dávkové doručování zpráv příjemcům za účelem zlepšení efektivity a výkonu obnovení.
Streamy jsou podporovány službami ve frontě, jako jsou Azure Event Hubs, Amazon Kinesis a další.
Libovolný počet datových proudů lze multiplexovat na menší počet front a odpovědnost za zpracování těchto front je rovnoměrně vyvážena napříč clusterem.
Úvod k videu Orleans
Pokud vás zajímá úvod k Orleans, podívejte se na následující video: