I am creating a system in which several users must simultaneously create, view and modify a set of objects.
- The system is planned to run on a Java server and modern browsers (I can choose which ones).
- It must be stable in the event of network and server failures, the user interface must not be blocked for modifications, the changes must be saved locally and published when the connection is restored.
- In normal operations, changes should be repeated with a delay of a second.
- Network latency and bandwidth, processor resources are unlikely to be big problems, the scale is of the order of tens and hundreds of clients.
- Objects can be considered as structures of atomic values ββand many structures (i.e. trees). It seems that links between objects are not needed.
- I am pleased with the resolution of conflicts with the latest comments at the attribute level, I do not have any special requirements for the consistency of snapshots. I would like to report write conflicts through the user interface.
- I am initially looking for a replication solution between a server and multiple clients. In the future, I will probably need multi-level trees. Arbitrary replication structures are not needed, but will make working with fault tolerance or multiple wizards easier.
The problem I am facing is the replication of object changes between systems. Distributed concurrency is complex, and I would like to delegate this complexity to someone who knows what he is doing. What libraries / frameworks are there that will help with the replication part?
I already found XSTM , and its mission seems almost what I need, but, unfortunately, part of the GWT does not seem to be ready, and the project seems to have an uncertain future.
If there is nothing really useful there, then I'm looking for ideas on which algorithms would be good for this?
I am currently thinking of something inspired by DVCS and operational transformation. The server will accept changesets for objects and reject conflicting entries. Clients will monitor the latest known server status and locally made changes, detect conflicts between published changes and local changes, and restore non-confidential local changes on top of the status of the received server.
source share