Notes on actor systems
The “actor model” is an approach of organizing software in small cut up pieces. The smallest unit of work is the actor itself, which in functionality are limited to:
- Run computations
- Store information locally
- Communicate
This organization allows one to create larger systems, comprised of a large number of actor types and instances. This abstraction allows one to run such a system on a cluster of machines. This way the actor model is primarilly an abstraction hiding the infrastructural concerns of distributed software systems. For a more depth introduction see “what is an actor system?”
Limitations
While it is possible to run a large variety of workloads on top of actor systems, the prime complexity of running an actor system revolves around architecting the workload to fit onto this model. See “architectures of actor systems” for more context.
For highly specific and computationally heavy algorithms it might even be better to architect a custom approach, but these are supercomputer-adjadecent areas. In this area topics such as remote direct memory access (RDMA) become relevant. This however is irrelevant for most line-of-business applications, which are better served through writing against the actor model abstraction.
Frameworks
There are a wide variety of tools helping one implement an actor system. These tools generally take on responsibilities such as load shedding, balancing cluster activity over nodes, locational transparency and more. While building a custom framework is an interesting learning experience, I would strongly discourage doing so for a production system due to the intrinsic complexity of abstracting distributed infrastructure.
Two such frameworks for .NET are: