Microsoft Orleans is geen actor framework

Geschreven door Matthijs Wagemakers op

Het actor model bestaat al sinds de jaren 70 en is een manier om gelijktijdige berekeningen uit te voren. Het concept draait om actors: kleine entiteiten met elk eigen gedrag. Actors kunnen reageren op berichten, berichten versturen en andere actors aanmaken. Actors delen geen geheugen maar kunnen alleen met elkaar communiceren door berichten te versturen.

De kracht van actors zit in het feit dat ze single-threaded zijn. Een enkele actor kan maar 1 bericht tegelijk verwerken waardoor concurrency op grote schaal veel simpeler wordt dan in reguliere multi-threaded applicaties.

Actor frameworks bestaan, net als het actor model, al vele decennia. Echter zijn ze in de laatste jaren erg relevant geworden omdat het model goed toepasbaar is op grootschalige moderne gedistribueerde systemen met veel interactieve en gelijktijdige verwerkingen.

Microsoft Orleans is een open-source framework van Microsoft voor het bouwen van schaalbare en gedistribueerde applicaties. Orleans is gecreëerd door Microsoft Research en is gebaseerd op het actor model, maar met een twist.
Wat Orleans uniek maakt ten opzichte van traditionele actor framework implementaties is dat het gebruik maakt van virtual actors. Virtual actors bestaan altijd en hoeven niet expliciet aangemaakt of verwijderd te worden. Het framework beheert de life-time van de actor. Als een actor wordt aangeroepen die nog niet actief is wordt deze geactiveerd en in het geheugen geplaatst. Als de actor een poosje niet gebruikt is wordt deze gedeactiveerd om geheugen te vrij te maken.

Qua opzet en manier van werken lijkt Orleans weinig op implementaties van actor frameworks.

Ten eerste maken frameworks als Akka en Erlang gebruik van SuperVision Trees om fouten op te vangen. Een parent actor in de tree kan bijvoorbeeld een child actor opnieuw aanmaken op het moment dat deze crasht of in een foutstaat is beland. In Orleans is dit helemaal niet aan de orde. Omdat het framework zelf de life-cycle van een actor bepaald zijn SuperVision Trees niet nodig. Dat zorgt ook voor een volledig andere architectuur en opzet van de actors omdat de hiërarchie vervalt.

Verder hanteert Orleans principes die in traditionele actor frameworks not-done zijn. Communicatie met actors dient namelijk op basis van berichten te zijn waarop geen antwoord verwacht wordt: one-way messages (ook wel Tell genoemd). Request-response berichten (Ask in actor terminologie) worden gezien als een anti-pattern omdat de communicatie altijd via losse berichten verloopt. Een response moet dus weer ergens uit de mailbox van de originele aanvrager gevist worden en al die tijd is de actor geblokkeerd (want deze is single-threaded).
Bij Orleans is async request-response communicatie juist de default en de basis voor het aanroepen van actors, wat veel nieuwe mogelijkheden biedt zoals bijvoorbeeld het fan-out pattern. Een actor kan diverse andere actors tegelijk aanroepen, wachten op antwoord en de antwoorden samen voegen om te zelf kunnen antwoorden.

En als laatste en misschien wel het meest voor de hand liggend: Orleans kent het concept Actor niet. In de documentatie wordt slechts op enkele plekken gesproken over actors. In Orleans heten de virtual actors Grains. Met goede reden, want een Grain lijkt niet op de traditionele actor: je kunt geen berichten naar een grain sturen (een grain kan alleen via async methodes aangeroepen worden), een grain heeft een unieke identifier maar geen adres, het kan op een compleet andere server leven zonder dat je het weet en een grain bestaat altijd. Microsoft noemt de grains zelf ook wel Cloud Native Objects.

Misschien is het goed dat we Orleans in een ander licht gaan zien. Orleans is geen actor framework. Het is een framework om gemakkelijk en efficiënt gedistribueerde, schaalbare applicaties te bouwen op vergelijkbare wijze als developers normale .NET applicaties bouwen. Een soort gedistribueerde .NET voor moderne cloud-based applicaties.
Vergeet actors, in Orleans draait het om Cloud Native Objects. De term heeft dan misschien een hoog marketing gehalte, het dekt de lading een stuk beter dan actor model.

Matthijs WagemakersMatthijs is een .NET expert met brede kennis die hij graag inzet om organisaties te helpen met het kostenefficiënt ontwikkelen van kwalitatief hoogwaardige software. Momenteel werkt hij als software en cloud engineer bij De Nederlandsche Bank.
← Terug
XPRTZ