Microsoft Orleans
Orleans:
- Is een platformoverschrijdend framework voor het bouwen van robuuste, schaalbare gedistribueerde apps. Gedistribueerde apps worden gedefinieerd als apps die meer dan één proces omvatten, vaak buiten hardwaregrenzen met behulp van peer-to-peer-communicatie.
- Schaalt van één on-premises server naar duizenden gedistribueerde, maximaal beschikbare apps in de cloud.
- Breidt vertrouwde concepten en C#-idioms uit naar omgevingen met meerdere servers.
- Is ontworpen voor elastische schaalbaarheid. Wanneer een host lid wordt van een cluster, kan het nieuwe activeringen accepteren. Wanneer een host het cluster verlaat, worden de vorige activeringen op die host indien nodig opnieuw geactiveerd op de resterende hosts. Een host kan een cluster verlaten vanwege omlaag schalen of een computerfout. Een Orleans-cluster kan omlaag worden geschaald naar één host. Dezelfde eigenschappen die elastische schaalbaarheid mogelijk maken, maken fouttolerantie mogelijk. Het cluster detecteert automatisch en herstelt snel van fouten.
- Vereenvoudigt de complexiteit van gedistribueerde app-ontwikkeling door een gemeenschappelijke set patronen en API's te bieden.
- Hiermee kunnen ontwikkelaars die bekend zijn met de ontwikkeling van apps met één server overschakelen naar het bouwen van robuuste, schaalbare cloudservices en gedistribueerde apps.
- Wordt ook wel 'Gedistribueerd .NET' genoemd.
- Is het framework van keuze bij het bouwen van cloudeigen apps.
- Wordt uitgevoerd waar .NET wordt ondersteund. Dit omvat hosting op Linux, Windows en macOS.
- Apps kunnen worden geïmplementeerd in Kubernetes-, virtuele machines en PaaS-services, zoals Azure App Service- en Azure Container Apps-.
Het actormodel
Orleans is gebaseerd op het actormodel. Het actormodel is ontstaan in het begin van de jaren 70 en is nu een kernonderdeel van Orleans. Het actormodel is een programmeermodel waarin elke actor een lichtgewicht, gelijktijdig, onveranderbaar object is dat een stukje status en bijbehorend gedrag inkapselt. Actoren communiceren uitsluitend met elkaar met behulp van asynchrone berichten. Orleans met name de Virtual Actor abstractie uitgevonden, waarbij acteurs voortdurend bestaan.
Notitie
Actoren zijn puur logische entiteiten die altijd bestaan, virtueel. Een actor kan niet expliciet worden gemaakt of vernietigd en het virtuele bestaan ervan wordt niet beïnvloed door de fout van een server die deze uitvoert. Omdat acteurs altijd bestaan, zijn ze altijd adresseerbaar.
Dit is een nieuwe benadering voor het bouwen van een nieuwe generatie gedistribueerde apps voor het cloudtijdperk. Met het Orleans programmeermodel wordt de complexiteit beperkt die inherent is aan zeer parallelle gedistribueerde apps zonder mogelijkheden te beperken of beperkingen voor de ontwikkelaar op te leggen.
Zie Orleans: Virtual Actors via Microsoft Research voor meer informatie. Een virtuele actor wordt weergegeven als een Orleans graan.
Wat zijn korrels?
Het graan is een van de verschillende Orleans primitieven. In termen van het actormodel is een graan een virtuele actor. De fundamentele bouwsteen in elke Orleans toepassing is een graan. Granen zijn entiteiten die bestaan uit door gebruikers gedefinieerde identiteit, gedrag en status. Bekijk de volgende visuele weergave van een graan:
Grain-identiteiten zijn door de gebruiker gedefinieerde sleutels die korrels altijd beschikbaar maken voor aanroepen. Korrels kunnen worden aangeroepen door andere korrels of door een willekeurig aantal externe clients. Elk graan is een instantie van een klasse die een of meer van de volgende interfaces implementeert:
-
IGrainWithGuidKey: Markeringsinterface voor korrels met
Guid
sleutels. -
IGrainWithIntegerKey: Markeringsinterface voor korrels met
Int64
sleutels. -
IGrainWithStringKey: Markeringsinterface voor korrels met
string
sleutels. - IGrainWithGuidCompoundKey: Markeringsinterface voor korrels met samengestelde sleutels.
- IGrainWithIntegerCompoundKey: Markeringsinterface voor korrels met samengestelde sleutels.
Korrels kunnen vluchtige of permanente statusgegevens bevatten die in elk opslagsysteem kunnen worden opgeslagen. Korrels partitioneren dus impliciet toepassingsstatussen, waardoor automatische schaalbaarheid mogelijk is en herstel na fouten wordt vereenvoudigd. De korrelstatus wordt in het geheugen bewaard terwijl het graan actief is, wat leidt tot een lagere latentie en minder belasting van gegevensarchieven.
Instantiëring van korrels wordt automatisch uitgevoerd op aanvraag door de Orleans runtime. Korrels die gedurende een tijdje niet worden gebruikt, worden automatisch uit het geheugen verwijderd om resources vrij te maken. Dit is mogelijk vanwege hun stabiele identiteit, waardoor korrels kunnen worden aangetrokken, ongeacht of ze al in het geheugen zijn geladen of niet. Dit zorgt ook voor transparant herstel van fouten omdat de aanroeper niet hoeft te weten op welke server een grain op enig moment wordt geïnstantieerd. Korrels hebben een beheerde levenscyclus, met de Orleans runtime die verantwoordelijk is voor het activeren/deactiveren en waar nodig korrels plaatsen/lokaliseren. Hierdoor kan de ontwikkelaar code schrijven alsof alle korrels altijd in het geheugen zijn.
Wat zijn Silo's?
Een silo is een ander voorbeeld van een Orleans primitive. Een silo fungeert als host voor een of meer korrels. De Orleans runtime is wat het programmeermodel voor toepassingen implementeert.
Normaal gesproken wordt een groep silo's uitgevoerd als een cluster voor schaalbaarheid en fouttolerantie. Bij uitvoering als een cluster coördineren silo's met elkaar om werk te distribueren en fouten te detecteren en te herstellen. Met de runtime kunnen korrels die in het cluster worden gehost met elkaar communiceren alsof ze zich binnen één proces bevinden. Bekijk het volgende diagram om de relatie tussen clusters, silo's en korrels te visualiseren:
In het voorgaande diagram ziet u de relatie tussen clusters, silo's en korrels. U kunt een willekeurig aantal clusters hebben, elk cluster heeft een of meer silo's en elke silo heeft een of meer korrels.
Naast het kernprogrammeermodel bieden silo's korrels met een set runtimeservices zoals timers, herinneringen (permanente timers), persistentie, transacties, streams en meer. Zie Wat kan ik doen met Orleansvoor meer informatie?.
Web-apps en andere externe clients roepen korrels in het cluster aan met behulp van de clientbibliotheek, die automatisch netwerkcommunicatie beheert. Clients kunnen ook samen worden gehost in hetzelfde proces met silo's voor het gemak.
Wat kan ik doen met Orleans?
Orleans is een framework voor het bouwen van cloudeigen apps en moet worden overwogen wanneer u .NET-apps bouwt die uiteindelijk moeten worden geschaald. Er zijn schijnbaar eindeloze manieren om Orleanste gebruiken, maar het volgende zijn enkele van de meest voorkomende manieren; Gaming, Banking, Chat apps, GPS tracking, Stock trading, Shopping carts, Voting apps en meer. Orleans wordt gebruikt door Microsoft in Azure, Xbox, Skype, Halo, PlayFab, Gears of War en vele andere interne services. Orleans heeft veel functies waarmee u eenvoudig kunt gebruiken voor verschillende toepassingen.
Volharding
Orleans biedt een eenvoudig persistentiemodel dat ervoor zorgt dat de status beschikbaar is voordat een aanvraag wordt verwerkt en dat de consistentie ervan behouden blijft. Korrels kunnen meerdere benoemde permanente gegevensobjecten hebben. Er kan bijvoorbeeld een profiel worden genoemd voor het profiel van een gebruiker en één met de naam 'inventaris' voor de inventaris. Deze status kan worden opgeslagen in elk opslagsysteem.
Terwijl een proces draait, wordt de status in het geheugen behouden, zodat leesaanvragen kunnen worden verwerkt zonder toegang tot opslag. Wanneer de korrel zijn status bijwerkt, zorgt het aanroepen van IStorage.WriteStateAsync ervoor dat de backing store wordt bijgewerkt voor bestendigheid en consistentie.
Zie Grain persistencevoor meer informatie.
Timers en herinneringen
Herinneringen zijn een duurzaam planningsmechanisme voor korrels. Ze kunnen worden gebruikt om ervoor te zorgen dat een bepaalde actie op een later moment wordt voltooid, zelfs als het graan op dat moment niet is geactiveerd. Timers zijn de niet-duurzame tegenhanger voor herinneringen en kunnen worden gebruikt voor gebeurtenissen met een hoge frequentie, waarvoor geen betrouwbaarheid is vereist.
Zie Timers en herinneringenvoor meer informatie.
Flexibele korrelplaatsing
Wanneer een graan wordt geactiveerd in Orleans, bepaalt de runtime op welke server (silo) dat graan moet worden geactiveerd. Dit wordt graanplaatsing genoemd.
Het plaatsingsproces in Orleans is volledig configureerbaar. Ontwikkelaars kunnen kiezen uit een set out-of-the-box-plaatsingsbeleidsregels, zoals willekeurige, voorkeurs-lokale en op belasting gebaseerde logica, of aangepaste logica kan worden geconfigureerd. Dit biedt volledige flexibiliteit bij het bepalen waar korrels worden gemaakt. Korrels kunnen bijvoorbeeld op een server dicht bij resources worden geplaatst waarmee ze moeten werken of andere korrels waarmee ze communiceren.
Voor meer informatie, zie Korrelplaatsing.
Versiebeheer van granen en heterogene clusters
Het upgraden van productiesystemen op een manier die veilig rekening houdt met wijzigingen kan uitdagend zijn, met name in stateful systemen. Hiervoor kunnen graaninterfaces in Orleans worden geversied.
Het cluster onderhoudt een mapping van welke grain-implementaties beschikbaar zijn op welke silo's in het cluster en de bijbehorende versies van die implementaties. Deze versie van de informatie wordt door de runtime gebruikt in combinatie met plaatsingsstrategieën om plaatsingsbeslissingen te nemen bij het routeren van aanroepen naar korrels. Om een geversied graan veilig bij te werken, maakt dit ook heterogene clusters mogelijk, waarbij verschillende silo's verschillende sets graan implementaties beschikbaar hebben.
Zie Grain Versioningvoor meer informatie.
Staatloze werknemers
Staatloze werkers zijn speciaal gemarkeerde eenheden die geen geassocieerde status hebben en die tegelijkertijd op meerdere silo's kunnen worden geactiveerd. Dit maakt een verhoogde parallelle uitvoering mogelijk voor staatloze functies.
Zie staatloze werkrolkorrelsvoor meer informatie.
Aanroepfilters voor graan
Een grain-callfilter is logica die gebruikelijk is voor veel korrels. Orleans ondersteunt filters voor zowel binnenkomende als uitgaande oproepen. Filters voor autorisatie, logboekregistratie en telemetrie en foutafhandeling worden allemaal als algemeen beschouwd.
Aanvraagcontext
Metagegevens en andere informatie kunnen worden doorgegeven met een reeks aanvragen met behulp van de aanvraagcontext. Aanvraagcontext kan worden gebruikt voor het bewaren van informatie over gedistribueerde tracering of andere door de gebruiker gedefinieerde waarden.
Gedistribueerde ACID-transacties
Naast het hierboven beschreven eenvoudige persistentiemodel kunnen korrels een transactionele status hebben. Meerdere korrels kunnen deelnemen aan ACID- transacties, ongeacht waar hun status uiteindelijk wordt opgeslagen. Transacties in Orleans worden gedistribueerd en gedecentraliseerd (er is geen centrale transactiemanager of transactiecoördinator) en hebben serialiseerbare isolatie.
Zie Transactiesvoor meer informatie over transacties.
Stromen
Streams helpen ontwikkelaars bij het verwerken van een reeks gegevensitems in bijna realtime. Orleans stromen worden beheerd; streams hoeven niet te worden gemaakt of geregistreerd voordat een grain of client publiceert of zich abonneert op een stream. Dit zorgt voor een grotere ontkoppeling van stroomproducenten en consumenten van elkaar en de infrastructuur.
Stroomverwerking is betrouwbaar: korrels kunnen controlepunten (cursors) opslaan en opnieuw instellen op een opgeslagen controlepunt tijdens de activering of op een later tijdstip. Streams ondersteunen batchlevering van berichten aan consumenten om de efficiëntie en herstelprestaties te verbeteren.
Streams worden ondersteund door wachtrijservices zoals Azure Event Hubs, Amazon Kinesis en andere.
Een willekeurig aantal streams kan worden ge multiplexeerd naar een kleiner aantal wachtrijen en de verantwoordelijkheid voor het verwerken van deze wachtrijen wordt gelijkmatig verdeeld over het cluster.
Inleiding tot Orleans video
Als u geïnteresseerd bent in een video-inleiding tot Orleans, bekijkt u de volgende video: