Решение для оптимистичной репликации объектов между сервером Java и клиентами браузера? - PullRequest
4 голосов
/ 03 декабря 2010

Я создаю систему, в которой нескольким пользователям необходимо одновременно создавать, просматривать и изменять набор объектов.

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

Проблема, с которой я сталкиваюсь, заключается в репликации изменений объектов между системами.Распределенный параллелизм сложен, и я хотел бы передать эту сложность тому, кто знает, что он делает.Какие есть библиотеки / фреймворки, которые могли бы помочь с частью репликации?

Я уже нашел XSTM , и его миссия, кажется, почти точно то, что мне нужно, но, к сожалению, часть GWT не 'Кажется, он еще не готов, и у проекта, похоже, неопределенное будущее.

Если там нет ничего действительно полезного, то я ищу идеи о том, какие алгоритмы были бы хороши для этого?

В настоящее время я думаю о чем-то, вдохновленном DVCS и операционным преобразованием.Сервер будет принимать наборы изменений для объектов и отклонять конфликтующие записи.Клиенты будут отслеживать последнее известное состояние сервера и локально сделанные изменения, обнаруживать конфликты между опубликованными изменениями и локальными изменениями и перебазировать конфликтующие локальные изменения поверх полученного состояния сервера.

1 Ответ

0 голосов
/ 05 октября 2011

Является ли некоторая распределенная база данных как Cassandra опцией?Это, вероятно, обеспечивает больше, чем вам нужно и нужно, чтобы хотя бы 3 узла работали.

...