Proprietary / closed source |
Free / open sourced |
It's tied to Service Fabric. |
Not tied to any particular platform. Can be used from any project template on any platform (Mono support). |
It's mostly ready out of the box. |
It's build for modularity. May require additional NuGet plugins and configuration to reach full potential. |
Programming model close to OO paradigm. |
Message-based programming model. More functional in nature. |
Actor's behavior is represented as interface with async methods. |
Actor's behavior is dynamic, based messages it can handle. This can change at runtime as result of handling other messages. |
Exceptions are propagated up in the callchain, causing each actor on the path to restart. |
Exceptions are contained within an actor. It's up to actor's parent to decide, how it should behave. |
Communication through async RPC or Pub/Sub (only between actors and clients). Every request is ACKed/NACKed by default. |
Basic communication through fire-and-forget messages. From there, basically any communication pattern possible: request/response, pub/sub, reactive streamming. ACK/NACK is part of the communication pattern. |
Consistent during network partitions |
Consistent or available during network paritions (you can have full control over it) |
Actors are distributed over cluster by using paritions. You cannot guarantee that actors from different paritions will be located on the same machine. |
Actors can be paritioned automaticaly by using Akka.Cluster.Sharding, but by default you place them explicitly. This allows to perform optimizations based on local affinity of actors. |
Actors are identified by Guid, string or long |
Actors are identified by URI-based actor paths with support for actor hierarchies |
Serialization through DataContractSerializer |
Current default serializer is JSON.NET. In the future it will be Wire (which is one of the fastest in .NET). You can set up your own based on message type. |
Default persistence is state-based on the local replicated storage. |
Default persistence is based on eventsourcing. No default backed, you need to plug one of your choice. |
Cluster membership using replicated log. |
Cluster memebership is based on seed nodes (nodes with well-known addresses). |
Reentrancy only in callchain. |
Actors are "reentrant" by default. This can be changed by using ReceiveAsync |
No way to increase concurrency level of actor. |
Actors concurrency can be set by using routers. |