Dela via


Microsoft Orleans

Orleans är ett plattformsoberoende ramverk som är utformat för att förenkla skapandet av distribuerade appar. Oavsett om skalning från en enskild server till tusentals molnbaserade appar ger Orleans verktyg för att hantera komplexiteten i distribuerade system. Det utökar välbekanta C#-begrepp till miljöer med flera servrar, så att utvecklare kan fokusera på appens logik.

Här är vad som Orleans erbjuder:

  • Den är utformad för att skalas elastiskt. Lägg till eller ta bort servrar och Orleans justeras i enlighet med detta för att upprätthålla feltolerans och skalbarhet.
  • Det förenklar utvecklingen av distribuerade appar med en gemensam uppsättning mönster och API:er, vilket gör den tillgänglig även för de nya distribuerade systemen.
  • Den är molnbaserad och körs på plattformar där .NET stöds – Linux, Windows, macOS med mera.
  • Den stöder moderna distributionsalternativ som Kubernetes, Azure App Service och Azure Container Apps.

Orleans kallas ofta "Distributed .NET" på grund av dess fokus på att skapa motståndskraftiga, skalbara molnbaserade tjänster. Nu ska vi utforska aktörsmodellen.

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 . I aktörsmodellen är varje aktör ett enkelt, samtidigt, oföränderligt objekt som kapslar in ett tillstånd och motsvarande beteende. Aktörer kommunicerar uteslutande med asynkrona meddelanden. Orleans uppfann framför allt abstraktionen virtual actor , där skådespelare finns ständigt.

Anmärkning

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.

Den här nya metoden hjälper dig 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.

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:

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

Identiteter för grains är användardefinierade nycklar, vilket gör att grains alltid är tillgängliga för anrop. Andra grain eller ett valfritt antal externa klienter kan anropa grains. 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 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. Orleans håller korntillståndet 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.

Körningen Orleans instansierar automatiskt korn på begäran. Korn som inte används på ett tag tas automatiskt bort från minnet för att frigöra resurser. Den här borttagningen är möjlig tack vare deras beständiga identitet, vilket möjliggör anrop av grains oavsett om de är laddade 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 när som helst. Korn har en hanterad livscykel, där runtime-miljön Orleans ansvarar för att aktivera och inaktivera samt placera och hitta korn efter behov. På så sätt kan du skriva kod som om alla korn alltid finns i minnet.

Vad är silor?

En silo är ett annat exempel på en Orleans primitiv. En silo rymmer en eller flera spannmål. Körningen Orleans 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 för att distribuera arbete och identifiera och återställa från fel. Exekveringsmiljön möjliggör för korn som är lagrade i klustret att kommunicera precis som om de befinner sig i 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. Det kan finnas 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 instanser med runtime-tjänster som tidsräknare, beständiga påminnelser (timers), persistens, transaktioner, strömmar och mer. Mer information finns i Vad kan göras 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 göras 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 kan behöva skalas. Det finns till synes oändliga sätt att använda Orleans, men följande är några av de vanligaste: Spel, Bank, Chattappar, GPS-spårning, Aktiehandel, Kundvagnar, Röstningsappar med mera. Microsoft använder Orleans 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 olika program.

Ståndaktighet

Orleans tillhandahåller en enkel beständighetsmodell som säkerställer tillståndstillgänglighet innan en begäran bearbetas och konsekvens upprätthålls. Korn kan ha flera namngivna beständiga dataobjekt. Till exempel kan en kallas "profil" för en användares profil och en annan "lager" för deras inventering. Det här tillståndet kan lagras i valfritt lagringssystem.

Medan ett grain körs behålls tillståndet i minnet för att hantera läsbegäranden utan att komma åt lagringen. När kornet uppdaterar sitt tillstånd säkerställer anropet IStorage.WriteStateAsync uppdateringar av lagringsplatsen 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. Använd dem för att säkerställa att en åtgärd slutförs vid en framtida tidpunkt, även om grain just nu inte är aktiverad. Timers är den icke-varaktiga motsvarigheten till påminnelser och kan användas för högfrekventa händelser som inte kräver tillförlitlighet.

Mer information finns i tidsinställare och påminnelser.

Flexibel kornplacering

När ett korn aktiveras i Orleansbestämmer körningen vilken server (silo) som ska aktiveras. Den här processen kallas kornplacering.

Placeringsprocessen i Orleans är helt konfigurerbar. Välj bland färdiga placeringsprinciper, till exempel slumpmässig, föredrar lokal och belastningsbaserad, eller konfigurera anpassad logik. Detta ger fullständig flexibilitet när du bestämmer var korn skapas. Placera till exempel korn 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 utmanande att på ett säkert sätt uppgradera produktionssystem och ta hänsyn till ändringar, särskilt i tillståndskänsliga system. För att ta hänsyn till detta kan korngränssnitten versionssättas i Orleans.

Klustret upprätthåller en mappning av vilka kornimplementeringar som är tillgängliga för vilka silor och deras versioner. Körtiden använder den här versionsinformationen tillsammans med placeringsstrategier för att göra val av placering när anrop dirigeras till grains. Förutom 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 tillgängliga kornimplementeringar.

Mer information finns i Grain Versionshantering.

Statslösa arbetare

Tillståndslösa arbetare är särskilt markerade korn utan associerat tillstånd 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 kornanropsfilter är en logik som är gemensam för många korn. Orleans stöder filter för både inkommande och utgående anrop. Vanliga användningsområden är auktorisering, loggning och telemetri samt felhantering.

Begärandekontext

Skicka metadata och annan information med en serie begäranden med hjälp av begärandekontexten. Använd begärandekontexten för att lagra distribuerad spårningsinformation eller andra definierade värden.

Distribuerade ACID-transaktioner

Förutom den enkla beständighetsmodellen som beskrivs ovan kan korn ha transaktionstillstånd. Flera korn kan delta i ACID-transaktioner tillsammans, oavsett var deras tillstånd slutligen lagras. Transaktioner i Orleans distribueras och decentraliseras (vilket innebär att ingen central transaktionshanterare eller koordinator) och har serialiserbar isolering.

Mer information om transaktioner finns i Transaktioner.

Strömmar

Strömmar hjälper till att bearbeta en serie dataobjekt nästan i realtid. Orleans strömmar är hanterade; strömmar behöver inte skapas eller registreras innan ett objekt eller en klient publicerar eller prenumererar. Detta möjliggör större avkoppling av strömproducenter och konsumenter från varandra och infrastrukturen.

Streambearbetning är tillförlitlig: enheter kan lagra kontrollpunkter (markörer) och återställa till en lagrad kontrollpunkt vid aktivering eller när som helst därefter. 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

En videointroduktion till Orleansfinns i följande video:

Nästa steg