Actor system for the JVM developed by Electronic Arts
I&#x27;d like to mention the native actor model implementation CAF, the C++ Actor Framework, and share some experiences. (Disclaimer: I&#x27;ve been developing on CAF in the past and have a good relationship with the creator.) CAF (1) provides native actors without an VM layer, (2) type-safe interfaces so that the compiler yells at you when a receiver cannot handle a message, and (3) transparent copy-on-write messaging so that you can still push stuff through pipelines and induce only copies only when a ref count is greater than one.<p>In our telemetry engine VAST, we&#x27;ve been using CAF successfully for several years for building a distributed system that always has a saturated write path. CAF provides a credit-based streaming abstraction as well, so that you can have backpressure across a chain of actors, making burst-induced OOM issues a blast from the past. You also get all the other benefits of actors, like linking and monitoring, to achieve well-defined failure semantics: either be up and running or collectively fail, but still allowing for local recovery—except for segfaults, this is where &quot;native&quot; has a disadvantage over VM-based actor models.<p>With CAF&#x27;s network transparent runtime, a message ender doesn&#x27;t need to know where receiver lives; the runtime either passes the message as COW pointer to the receiver or serializes it transparently. Other actor model runtimes support that as well, but I&#x27;m mentioning it because our experience showed that this is great value: we can can slice and dice our actors based on the deployment target, e.g., execute the application in one single process (e.g., for a beefy box) or wrap actors into single OS processes (e.g., when deploying on container auto-scalers).<p>The deep integration with the C++ type system allowed us to define very stable RPC-like interfaces. We&#x27;re currently designing a pub&#x2F;sub layer as alternate access path, because users are interested in tapping into streaming feeds selectively. This is not easy, because request-response and pub&#x2F;sub are two ends of a spectrum, but it turns out we can support nicely with CAF.<p>Resources:<p>- CAF: <a href="https:&#x2F;&#x2F;github.com&#x2F;actor-framework&#x2F;actor-framework" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;actor-framework&#x2F;actor-framework</a><p>- VAST: <a href="https:&#x2F;&#x2F;tenzir.github.io&#x2F;vast&#x2F;docs&#x2F;understand-vast&#x2F;actor-model" rel="nofollow">https:&#x2F;&#x2F;tenzir.github.io&#x2F;vast&#x2F;docs&#x2F;understand-vast&#x2F;actor-mod...</a> (sorry for the incompleteness, we&#x27;re in migration mode from the old docs, but this page is summarizing the benefits of CAF for us best)<p>- Good general actor model background: <a href="http:&#x2F;&#x2F;dist-prog-book.com&#x2F;chapter&#x2F;3&#x2F;message-passing.html#why-the-actor-model" rel="nofollow">http:&#x2F;&#x2F;dist-prog-book.com&#x2F;chapter&#x2F;3&#x2F;message-passing.html#why...</a>