Je construis un système où plusieurs utilisateurs doivent créer, visualiser et modifier un ensemble d'objets simultanément.Solution pour la réplication d'objets optimiste entre le serveur Java et les clients du navigateur?
- Le système est prévu pour fonctionner sur un serveur Java et des clients de navigateur modernes (je dois choisir lesquels).
- Il doit être robuste face aux pannes réseau et serveur, l'interface utilisateur ne doit pas bloquer pour les modifications, les modifications doivent être stockées localement et publiées lorsque la connectivité revient.
- En fonctionnement normal, les modifications doivent être répliquées avec une latence inférieure à la seconde.
- La latence du réseau et la bande passante, les ressources de cpu sont peu susceptibles d'être de gros problèmes, l'échelle est de l'ordre de dizaines à des centaines de clients. Les objets peuvent être considérés comme des structures de valeurs atomiques et des ensembles de structures (c'est-à-dire des arbres). Il semble que les références entre les objets sont inutiles. Je suis content de la résolution de conflit last-write-wins au niveau de l'attribut, je n'ai pas d'exigences particulières pour la cohérence des snapshots. Je voudrais cependant signaler les conflits d'écriture à travers l'interface utilisateur.
- Initialement, je cherche à résoudre la réplication entre un serveur et plusieurs clients. À l'avenir, j'aurai probablement besoin d'arbres à plusieurs niveaux aussi. Les structures de réplication arbitraires ne sont pas nécessaires, mais faciliteraient le basculement ou le multi-maître.
Le problème avec lequel je suis en difficulté consiste à répliquer les modifications apportées aux objets entre les systèmes. La concurrence partagée est difficile et j'aimerais déléguer cette complexité à quelqu'un qui sait ce qu'il fait. Quelles bibliothèques/frameworks sont là pour aider à la partie réplication?
J'ai déjà trouvé XSTM et sa mission semble être presque exactement ce dont j'ai besoin, mais malheureusement la partie GWT ne semble pas encore prête et le projet semble avoir un avenir incertain.
S'il n'y a rien de vraiment utile là-bas, alors je cherche des idées sur ce que les algorithmes seraient bons pour cela?
Je pense actuellement à quelque chose qui s'inspire du DVCS et de la transformation opérationnelle. Le serveur accepterait les changements pour les objets et rejetterait les écritures en conflit. Les clients suivraient le dernier état du serveur connu et les modifications apportées localement, détecteraient les conflits entre les modifications publiées et les modifications locales et rebasculeraient les modifications locales non conflictuelles en plus de l'état du serveur reçu.