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 om elastisch te schalen. 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 de vroege 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 abstractie van virtual actor uitgevonden, waarbij actoren eeuwig 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 Orleans het programmeermodel wordt de complexiteit gemanipuleerd die inherent is aan zeer parallelle gedistribueerde apps zonder de mogelijkheden te beperken of beperkingen voor de ontwikkelaar op te leggen.
Zie Orleansvoor meer informatie: Virtual Actors via Microsoft Research. 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 korrel. Korrels zijn entiteiten die bestaan uit door de gebruiker 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, waarbij de runtime verantwoordelijk is voor het Orleans 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 primitieve. Een silo fungeert als host voor een of meer korrels. De Orleans runtime implementeert het programmeermodel voor toepassingen.
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 Voor meer informatie wat kan ik doen met Orleans?
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 te gebruiken Orleans, 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.
Persistentie
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 korrel wordt uitgevoerd, wordt de status in het geheugen bewaard, zodat leesaanvragen kunnen worden verwerkt zonder toegang te krijgen tot opslag. Wanneer de korrel de status bijwerkt, zorgt het aanroepen IStorage.WriteStateAsync ervoor dat de back-upopslag wordt bijgewerkt voor duurzaamheid en consistentie.
Zie Grain persistence voor 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 herinneringen voor meer informatie.
Flexibele korrelplaatsing
Wanneer een korrel wordt geactiveerd Orleans, bepaalt de runtime op welke server (silo) dat graan moet worden geactiveerd. Dit wordt graanplaatsing genoemd.
Het plaatsingsproces kan Orleans volledig worden geconfigureerd. 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.
Zie De plaatsing van graan voor meer informatie.
Korrelversiebeheer en heterogene clusters
Het upgraden van productiesystemen op een manier die veilig rekening met wijzigingen kan zijn, met name in stateful systemen. Hiervoor kunnen graaninterfaces Orleans worden geversied.
Het cluster onderhoudt een toewijzing van welke graan implementaties beschikbaar zijn op welke silo's in het cluster en de versies van deze 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 Versioning voor meer informatie.
Staatloze werknemers
Staatloze werknemers zijn speciaal gemarkeerde korrels die geen bijbehorende status hebben en die tegelijkertijd op meerdere silo's kunnen worden geactiveerd. Dit maakt een verhoogde parallelle uitvoering mogelijk voor staatloze functies.
Zie stateless worker grains voor meer informatie.
Aanroepfilters voor graan
Een aanroepfilter voor graan is logica die veel korrels gemeen heeft. 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 worden Orleans gedistribueerd en gedecentraliseerd (er is geen centrale transactiemanager of transactiecoördinator) en hebben serialiseerbare isolatie.
Zie Transacties voor meer informatie over transacties.
Stromen
Streams helpen ontwikkelaars bij het verwerken van een reeks gegevensitems in bijna realtime. Orleans streams worden beheerd; streams hoeven niet te worden gemaakt of geregistreerd voordat een graan 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.
Video Inleiding tot Orleans
Als u geïnteresseerd bent in een inleiding tot Orleanseen video, bekijkt u de volgende video: