Open krasserm opened 8 years ago
An initial implementation will use a LevelDB storage backend so that local writes to a cluster node are always possible. A shared Cassandra storage backend for all Akka cluster nodes might be in conflict with the requirement that EventsourcedActor
s should remain writable during network partitions. A hybrid solution, that uses LevelDB only if Cassandra is not available and re-sync later, could be an alternative.
On the other hand, applications with less strict durability requirements can still go for a LevelDB-only solution and recover lost events at one location from those already (asynchronously) replicated to other locations (see disaster recovery).
Hi Martin, is there a way to create the locations dynamically (and thus get the endpoint connections) from the the Akka Cluster seed nodes ?
@hmatinho that's covered with #142. I plan to start working on it in a few weeks.
It would be great if Eventuate would be able to work with Akka Cluster Sharding so we can make use of their model and when a network partition happens, it would continue to work under the conditions you described.
Update After looking at this again with some more Eventuate knowledge, Akka Cluster does not provide automatic recovery (for partitions) like Eventuate does with its Replication model so in the case of a network partition, there would have to be manual intervention instead of the nodes automatically recovering unless you have SBR and use something like ConductR which costs $$$. Really, the sharding model that Akka Cluster Sharding provides is the only behavior needed which ensures only one actor with a unique ID is present in the cluster. In the case of a network partition, two or more may be created but once the partition has been resolved (automatically), then conflict resolution would occur and one actor with that unique ID would be present again with merged updates
@krasserm hi Martin, this feature will be released in the v-0.8?
@coding4m no, most likely not.
+1
Eventuate should run in an Akka cluster where each cluster node represents a separate Eventuate location. The integration has the following goals (prio :one:):
EventsourcedActor
s can be replicated to all cluster nodes.EventsourcedActor
s are writable on all cluster nodes.EventsourcedActor
s remain writable during network partitions (split brain).Further goals are (prio :two:):
With these building blocks in place, it should also be possible to implement features like:
EventBus
with causal delivery semantics.The initial focus is on prio :one: goals. Prerequisite for this ticket is #142.