Microsoft Orleans
Orleans:
- Är ett plattformsoberoende ramverk för att skapa robusta, skalbara distribuerade appar. Distribuerade appar definieras som appar som sträcker sig över mer än en enda process, ofta utanför maskinvarugränserna med hjälp av peer-to-peer-kommunikation.
- Skalar från en enskild lokal server till tusentals distribuerade appar med hög tillgänglighet i molnet.
- Utökar välbekanta begrepp och C#-idiom till miljöer med flera servrar.
- Är utformad för att anpassa sig elastiskt. När en värd ansluter till ett kluster kan den acceptera nya aktiveringar. När en värd lämnar klustret återaktiveras de tidigare aktiveringarna på den värden på de återstående värdarna efter behov. En värd kan lämna ett kluster på grund av nedskalning eller ett datorfel. Ett Orleans kluster kan skalas ned till en enda värd. Samma egenskaper som möjliggör elastisk skalbarhet möjliggör feltolerans. Klustret identifierar automatiskt och återhämtar sig snabbt från fel.
- Förenklar komplexiteten i utveckling av distribuerade appar genom att tillhandahålla en gemensam uppsättning mönster och API:er.
- Gör det möjligt för utvecklare som är bekanta med apputveckling med en server att övergå till att skapa motståndskraftiga, skalbara molnbaserade tjänster och distribuerade appar.
- Kallas ibland "Distribuerad .NET".
- Är det ramverk som du kan välja när du skapar molnbaserade appar.
- Körs var som helst där .NET stöds. Detta omfattar värdtjänster i Linux, Windows och macOS.
- Appar kan distribueras till Kubernetes, virtuella datorer och PaaS-tjänster som Azure App Service och Azure Container Apps.
"Aktörsmodellen"
Orleans baseras på "aktörsmodellen". Aktörsmodellen har sitt ursprung i början av 1970-talet och är nu en kärnkomponent i Orleans. Aktörsmodellen är en programmeringsmodell där varje aktör är ett enkelt, samtidigt, oföränderligt objekt som kapslar in ett tillstånd och motsvarande beteende. Aktörer kommunicerar uteslutande med varandra med hjälp av asynkrona meddelanden. Orleans uppfann särskilt Virtual Actor abstraktion, där skådespelare existerar ständigt.
Note
Aktörer är rent logiska entiteter som alltid finns, i stort sett. En aktör kan inte skapas eller förstöras uttryckligen och dess virtuella existens påverkas inte av felet för en server som kör den. Eftersom skådespelare alltid finns är de alltid adresserbara.
Det här är en ny metod för att skapa en ny generation distribuerade appar för molntiden. Den Orleans programmeringsmodellen tämjer komplexiteten i mycket parallella distribuerade appar utan att begränsa funktioner eller införa begränsningar för utvecklaren.
Mer information finns i Orleans: Virtual Actors via Microsoft Research. En virtuell aktör representeras som ett Orleans korn.
Vad är Korn?
Kornet är ett av flera Orleans grundelement. När det gäller aktörsmodellen är ett korn en virtuell aktör. Den grundläggande byggstenen i alla Orleans program är ett korn. Grains är enheter som innehåller användardefinierad identitet, beteende och tillstånd. Överväg följande visuella representation av ett korn:
Grain-identiteter är användardefinierade identifikatorer som alltid gör grains tillgängliga för anrop. Korn kan anropas av andra korn eller av valfritt antal externa klienter. Varje korn är en instans av en klass som implementerar ett eller flera av följande gränssnitt:
-
IGrainWithGuidKey: Markörgränssnitt för korn med
Guid
nycklar. -
IGrainWithIntegerKey: Markörgränssnitt för korn med
Int64
nycklar. -
IGrainWithStringKey: Markörgränssnitt för korn med
string
nycklar. - IGrainWithGuidCompoundKey: Markörgränssnitt för korn med sammansatta nycklar.
- IGrainWithIntegerCompoundKey: Markörgränssnitt för korn med sammansatta nycklar.
Korn kan ha flyktiga eller beständiga tillståndsdata som kan lagras i valfritt lagringssystem. Genom detta ordnar grains implicit uppdelning av applikationstillstånd, vilket möjliggör automatisk skalbarhet och förenklar återhämtning från fel. Korntillståndet sparas i minnet medan kornet är aktivt, vilket leder till lägre svarstid och mindre belastning på datalager.
Instansiering av grains utförs automatiskt vid behov av Orleans runtime-miljö. Korn som inte används på ett tag tas automatiskt bort från minnet för att frigöra resurser. Detta är möjligt på grund av deras stabila identitet, vilket gör det möjligt att anropa korn oavsett om de redan har lästs in i minnet eller inte. Detta möjliggör även transparent återställning från fel eftersom anroparen inte behöver veta på vilken server ett korn instansieras vid någon tidpunkt. Korn har en hanterad livscykel med Orleans körning som ansvarar för aktivering/inaktivering och placering/placering av korn efter behov. På så sätt kan utvecklaren skriva kod som om alla korn alltid är minnesinterna.
Vad är Silos?
En silo är ett annat exempel på en Orleans primitiv. En silo rymmer en eller flera spannmål. Den Orleans-körtidsmiljön är det som implementerar programmeringsmodellen för applikationer.
Vanligtvis körs en grupp silor som ett kluster för skalbarhet och feltolerans. När de körs som ett kluster samordnar silor med varandra för att distribuera arbete och identifiera och återställa från fel. Körtiden möjliggör att grains som finns i klustret kan kommunicera med varandra som om de vore inom en enda process. Tänk på följande diagram för att visualisera relationen mellan kluster, silor och korn:
Föregående diagram visar relationen mellan kluster, silor och korn. Du kan ha valfritt antal kluster, varje kluster har en eller flera silor och varje silo har ett eller flera korn.
Utöver den grundläggande programmeringsmodellen tillhandahåller silor korn med en uppsättning runtime-tjänster som timers, påminnelser (beständiga timers), beständighet, transaktioner, strömmar med mera. Mer information finns i Vad kan jag göra med Orleans?.
Webbappar och andra externa klienter anropar korn i klustret med hjälp av klientbiblioteket, som automatiskt hanterar nätverkskommunikation. Klienter kan också samsys i samma process med silor för enkelhet.
Vad kan jag göra med Orleans?
Orleans är ett ramverk för att skapa molnbaserade appar och bör övervägas när du skapar .NET-appar som så småningom skulle behöva skalas. Det finns till synes oändliga sätt att använda Orleans, men följande är några av de vanligaste sätten; Spel, Bank, Chattappar, GPS-spårning, Aktiehandel, Kundvagnar, Röstningsappar med mera. Orleans används av Microsoft i Azure, Xbox, Skype, Halo, PlayFab, Gears of War och många andra interna tjänster. Orleans har många funktioner som gör det enkelt att använda för en mängd olika program.
Ståndaktighet
Orleans tillhandahåller en enkel permanensmodell som säkerställer att status är tillgänglig innan en begäran bearbetas och att dess konsistens bibehålls. Korn kan ha flera namngivna beständiga dataobjekt. Det kan till exempel finnas en som kallas "profil" för en användares profil och en som kallas "inventering" för deras inventering. Det här tillståndet kan lagras i valfritt lagringssystem.
När ett "grain" körs hålls tillståndet i minnet så att läsbegäranden kan hanteras utan att behöva åtkomst till lagring. När kornet uppdaterar sitt tillstånd säkerställer anropet IStorage.WriteStateAsync att lagringsplatsen uppdateras för hållbarhet och konsekvens.
Mer information finns i Grain persistence.
Timers och påminnelser
Påminnelser är en beständig schemaläggningsmekanism för korn. De kan användas för att säkerställa att en viss åtgärd slutförs vid en framtida tidpunkt, även om kornet för närvarande inte aktiveras vid den tidpunkten. Timers är den icke-varaktiga motsvarigheten till påminnelser och kan användas för händelser med hög frekvens, vilket inte kräver tillförlitlighet.
Mer information finns i tidsinställare och påminnelser.
Flexibel kornplacering
När ett korn aktiveras i Orleansavgör körningen vilken server (silo) som ska aktivera kornet på. Detta kallas kornplacering.
Placeringsprocessen i Orleans är helt konfigurerbar. Utvecklare kan välja mellan en uppsättning förinställda placeringsprinciper, såsom slumpmässig, föredra lokalt och belastningsbaserad, eller så kan anpassad logik konfigureras. Detta ger fullständig flexibilitet när du bestämmer var korn skapas. Till exempel kan korn placeras på en server nära resurser som de behöver arbeta mot eller andra korn som de kommunicerar med.
Mer information finns i Kornplacering.
Grain-versionering och heterogena kluster
Det kan vara svårt att uppgradera produktionssystem på ett sätt som tryggt beaktar förändringar, särskilt i tillståndsbaserade system. För att ta hänsyn till detta kan korngränssnitt i Orleans versionshanteras.
Klustret upprätthåller en mappning av vilka kornimplementeringar som är tillgängliga för vilka silor i klustret och versionerna av dessa implementeringar. Den här versionen av informationen används av körtiden tillsammans med placeringsstrategier för att fatta placeringsbeslut vid dirigering av anrop till grains. För att på ett säkert sätt uppdatera ett versionshanterat korn möjliggör detta även heterogena kluster, där olika silor har olika uppsättningar med kornimplementeringar tillgängliga.
Mer information finns i Grain Versionshantering.
Statslösa arbetare
Tillståndslösa arbetare är särskilt markerade korn som inte har något associerat tillstånd och som kan aktiveras på flera silor samtidigt. Detta möjliggör ökad parallellitet för tillståndslösa funktioner.
Mer information finns i tillståndslösa arbetskorn.
Filter för Grain-anrop
Ett kornigt anropsfilter är logik som är gemensam för många korn. Orleans stöder filter för både inkommande och utgående anrop. Filter för auktorisering, loggning och telemetri samt felhantering anses alla vara vanliga.
Begärandekontext
Metadata och annan information kan skickas med en serie begäranden med hjälp av begärandekontexten. Begärandekontext kan användas för att lagra distribuerad spårningsinformation eller andra användardefinierade värden.
Distribuerade ACID-transaktioner
Förutom den enkla beständighetsmodellen som beskrivs ovan kan korn ha ett transaktionstillstånd. Flera korn kan delta i ACID transaktioner tillsammans oavsett var deras tillstånd slutligen lagras. Transaktioner i Orleans distribueras och decentraliseras (det finns ingen central transaktionshanterare eller transaktionskoordinator) och har serialiserbar isolering.
Mer information om transaktioner finns i Transaktioner.
Strömmar
Strömmar hjälper utvecklare att bearbeta en serie dataobjekt nästan i realtid. Orleans strömmar hanteras ; strömmar behöver inte skapas eller registreras innan en grain eller en klient publicerar eller prenumererar på en ström. Detta möjliggör större avkoppling av strömproducenter och konsumenter från varandra och infrastrukturen.
Dataströmbearbetningen är tillförlitlig: grains kan lagra kontrollpunkter (markörer) och återställa till en lagrad kontrollpunkt under aktivering eller vid ett senare tillfälle. Strömmar stöder batchleverans av meddelanden till konsumenter för att förbättra effektiviteten och återställningsprestanda.
Strömmar backas upp av kötjänster som Azure Event Hubs, Amazon Kinesis och andra.
Ett godtyckligt antal strömmar kan multiplexeras till ett mindre antal köer och ansvaret för att bearbeta dessa köer balanseras jämnt över klustret.
Introduktion till Orleans video
Om du är intresserad av en videointroduktion till Orleanskan du titta på följande video: