These are chat archives for RBMHTechnology/eventuate
Global-scale event sourcing and event collaboration with causal consistency
In Eventuate, you can use conditional requests to delay commands or queries until updates have been propagated to replicas. With conditional requests you achieve read-your-write consistency across replicas.
In your example, a payment processor could query replicas if they have converged to selecting a user for a given reservation. Should some replicas be unavailable for reading, payment must be retried later. This shouldn't be a problem as payments can be executed in the background.
With this approach you choose to prevent invalid payments at the cost of limited availability during network partitions. On the other hand, should the business rules allow some wrong payments (in case of conflicting reservations) with automated compensations, all decisions could be made locally which might be an advantage during long-lasting network partitions.
There are some more options how to deal with reservations in a highly-available eventually consistent system, see Pet Helland's excellent paper Building on Quicksand, section 7.1 Over-Booking vs. Over-Provisioning.
In general, if you want to prevent a conflict in a multi-master system, this can only be done at the cost of availability. If decreased availability is not an option, you have to allow conflicts (and wrong decisions) and compensate (or apologize) later. You can use both strategies in the same application, choosing the more appropriate one per action.