Replication: A distributed cluster maintains multiple copies of your database and constantly updates them, replicating data between nodes in real time. Should one of the nodes fail, the others are here to keep your information, online presence and services intact.
Cluster nodes that a certain database is not yet replicated to, can function as backup nodes for this database.
Say you have 5 nodes in your cluster, and one of your databases is replicated to only 3 of them. Should any of these three go down for too long, RavenDB will replicate the database to one of the two remaining nodes.
This behavior, one of RavenDB’s “active anti-entropy measures”, insulates your network from unexpected hiccups in your IT infrastructure, your application remains robust, and users see no pause in service.
Assignment Failover: RavenDB nodes share responsibility for the execution of ongoing tasks, so if one node goes down its tasks are redistributed between the remaining ones, assuring that each working node has an optimal workload.
Concurrent Reads and Writes: RavenDB is multi-master. Multiple nodes can accept both read and write requests at any time, making RavenDB perfect for edge deployment schemes. You can easily setup a topology in which end points operate in tandem with the central cluster but also independently in case the network is disrupted. This allows you to shift most of the distributed nature of your system to RavenDB and let it shoulder the burden and handle the details for you.
Concurrent Notifications: If two modifications are being done to the same document at the same time, you will get a notification about the concurrent change and be able to decide and manually control which version is used.
Consistency vs Availability: Is consistency more important, or is availability? Highly distributed environments would always keep this question alive and kicking. Is it more important to prevent concurrent users from potential conflicts, or to grant them as much access as possible?
RavenDB uses the Raft Consensus Algorithm to regulate approach to documents, databases, nodes, clusters, indexes and tasks, and provides the user-customization feature “Cluster-Wide Transactions” to determine a cluster-wide precedence of consistency over availability.