Я создаю систему, в которой нескольким пользователям необходимо одновременно создавать, просматривать и изменять набор объектов.
- Планируется, что система будет работать на сервере Java и современных клиентских браузерах (Iможно выбрать, какие из них).
- Он должен быть надежным в условиях перебоев в работе сети и сервера, пользовательский интерфейс не должен блокироваться для изменений, изменения должны храниться локально и публиковаться при возврате соединения.
- При нормальной работе изменения должны реплицироваться с задержкой менее секунды.
- Сетевая задержка и пропускная способность, ресурсы ЦП вряд ли будут большими проблемами, масштабирование порядка десятков или сотен клиентов.
- Объекты могут рассматриваться как структуры с атомными значениями и наборы структур (например, деревья).Кажется, что ссылки между объектами не нужны.
- Я доволен разрешением конфликтов последней записи на уровне атрибутов, у меня нет особых требований к согласованности снимков.Я хотел бы сообщить о конфликтах записи через пользовательский интерфейс.
- Изначально я пытаюсь решить проблему репликации между сервером и несколькими клиентами.В будущем мне, вероятно, понадобятся многоуровневые деревья.Произвольные структуры репликации не являются необходимыми, но могут упростить отработку отказа или мультимастер.
Проблема, с которой я сталкиваюсь, заключается в репликации изменений объектов между системами.Распределенный параллелизм сложен, и я хотел бы передать эту сложность тому, кто знает, что он делает.Какие есть библиотеки / фреймворки, которые могли бы помочь с частью репликации?
Я уже нашел XSTM , и его миссия, кажется, почти точно то, что мне нужно, но, к сожалению, часть GWT не 'Кажется, он еще не готов, и у проекта, похоже, неопределенное будущее.
Если там нет ничего действительно полезного, то я ищу идеи о том, какие алгоритмы были бы хороши для этого?
В настоящее время я думаю о чем-то, вдохновленном DVCS и операционным преобразованием.Сервер будет принимать наборы изменений для объектов и отклонять конфликтующие записи.Клиенты будут отслеживать последнее известное состояние сервера и локально сделанные изменения, обнаруживать конфликты между опубликованными изменениями и локальными изменениями и перебазировать конфликтующие локальные изменения поверх полученного состояния сервера.