Dela via


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 skalas 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 och återställer 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 Orleans1970-talet och är nu en kärnkomponent i . 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 uppfunnit abstraktionen virtual actor , där aktörer ständigt existerar.

Kommentar

Aktörer är rent logiska entiteter som alltid finns, praktiskt taget. 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. Programmeringsmodellen Orleans 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 en av flera Orleans primitiver. 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. Korn är entiteter som består av användardefinierad identitet, beteende och tillstånd. Överväg följande visuella representation av ett korn:

Ett korn består av en stabil identitet, ett stabilt beteende och ett tillstånd.

Korniga identiteter är användardefinierade nycklar som alltid gör korn 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:

Korn kan ha flyktiga eller beständiga tillståndsdata som kan lagras i valfritt lagringssystem. Därför anges implicit partitionering av programtillstånd, vilket möjliggör automatisk skalbarhet och förenklar återställning från fel. Korntillståndet sparas i minnet medan kornet är aktivt, vilket leder till lägre svarstid och mindre belastning på datalager.

Den hanterade livscykeln för ett Orleans korn.

Instansiering av korn utförs automatiskt på begäran av körningen Orleans . 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, där körningen Orleans 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 är värd för ett eller flera korn. Körningen Orleans är det som implementerar programmeringsmodellen för program.

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örningen gör det möjligt för korn som finns i klustret att 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:

Ett kluster har en eller flera silor och en silo har ett eller flera 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å samhanteras i samma process med silor för enkelhetens skull.

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.

Bevarande

Orleans tillhandahåller en enkel beständighetsmodell som säkerställer att tillståndet är tillgängligt innan en begäran bearbetas och att dess konsekvens 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 korn körs sparas tillståndet i minnet så att läsbegäranden kan hanteras utan åtkomst till lagring. När kornet uppdaterar sitt tillstånd ser anropet IStorage.WriteStateAsync till att lagringsplatsen uppdateras för hållbarhet och konsekvens.

Mer information finns i Kornbeständighet.

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 Timers och påminnelser.

Flexibel kornig placering

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ärdiga placeringsprinciper, till exempel slumpmässig, hellre lokal och belastningsbaserad eller anpassad logik, kan 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.

Kornversionsversioner och heterogena kluster

Det kan vara svårt att uppgradera produktionssystem på ett sätt som på ett säkert sätt står för förändringar, särskilt i tillståndskänsliga 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örningen tillsammans med placeringsstrategier för att fatta placeringsbeslut vid routning av anrop till korn. 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 Kornversioner.

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 kornanrop

Ett kornanropsfilter ä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

Flöden hjälpa utvecklare att bearbeta en serie dataobjekt nästan i realtid. Orleansströmmar hanteras. Strömmar behöver inte skapas eller registreras innan ett korn eller en klient publicerar eller prenumererar på en dataström. Detta möjliggör större avkoppling av strömproducenter och konsumenter från varandra och infrastrukturen.

Dataströmbearbetningen är tillförlitlig: korn kan lagra kontrollpunkter (markörer) och återställa till en lagrad kontrollpunkt under aktiveringen eller vid någon senare tidpunkt. Flöden stöder batchleverans av meddelanden till konsumenter för att förbättra effektiviteten och återställningsprestandan.

Flöden 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:

Nästa steg