Originally created by: mertant
It seems that in https://github.com/orbit/orbit/issues/102 some explanation regarding the distinction between virtual actors and the actor model (as implemented by Akka) was added to the documentation at http://orbit.bioware.com/orbit-actor-overview.html ; however, that page is no longer available. The new documentation website at https://www.orbit.cloud/orbit/ doesn't have much in the way of explanation about virtual actors specifically, instead linking to Microsoft Orleans.
Orbit is a framework to write distributed systems using virtual actors on the JVM. A virtual actor is an object that interacts with the world using asynchronous messages.
This describes non-virtual actors as well.
At any time an actor may be active or inactive. Usually the state of an inactive actor will reside in the database. When a message is sent to an inactive actor it will be activated somewhere in the pool of backend servers. During the activation process the actor’s state is read from the database.
Based on this, it seems that the key difference is persistence, although again the text does not make explicit the distinction between actor and virtual actor.
It is heavily inspired by the Microsoft Orleans project.
Of course, one could go read the Orleans documentation to learn more about virtual actors - but since that is a .NET project and Orbit is merely "inspired" by it, one wouldn't be able to tell which parts are applicable here and which perhaps are not.
On the whole, there isn't much information on the web regarding the differences between Akka and Orbit other than a couple old discussions on github (linked below). In the context of the JVM world, and this being the lesser known of the two projects, it would perhaps help to increase awareness of the Orbit project if the documentation included a more robust introduction, written with the experienced JVM developer in mind (who is likely already familiar with Akka).
Originally posted by: brettmorien
Thank you for the suggestion. This was definitely a first pass to get some useful information out there, focusing more on getting people already familiar started with some specifics. I can definitely see getting some more theoretical/ conceptual information included to help adoption.
You do point out a key distinction between Orbit 1 and 2, that persistence is no longer an explicit concern of Orbit. It made sense rather to give a hook into the activation and deactivation flow, removing the assumption that an addressable involves persistence at all. A virtual actor pattern can be built within this framework, but it's no longer the only pattern available. Abstracting a level up by removing the assumption that an addressable is an actor opens up more scenarios, for example a non-persistent service spun up new on activation.
Hopefully we can get some time to make that a little more clear. We can migrate and update some old docs around the virtual actor pattern for guidance.