Существуют ли какие-либо фреймворки для синхронизации данных, сгенерированных на одном одноранговом узле со всеми другими одноранговыми узлами в ненадежной сети?

Мы разрабатываем систему со следующими требованиями.

  • Есть N систем, каждая из которых генерирует уникальные для себя данные.
  • Каждая система требует, чтобы данные из любой другой системы выполняли свою конечную цель.
  • Эти системы разговаривают друг с другом в ненадежной сети.
  • Ожидается, что некоторые системы будут полностью недоступны в течение длительного периода времени (но они могут быть в контакте с некоторыми из там коллег, которые находятся в контакте с остальной частью сети)

Другими словами, каждая система должна реплицировать свои данные в N одноранговых систем. В идеале это будет сделано разумным образом.

Я рассмотрел поиск в инфраструктурах синхронизации баз данных, но я обеспокоен тем, что для этой проблемы это слишком сложно. Я не думаю, что есть вероятность конфликтов строк, потому что каждая системная информация полностью независима от других систем.

Вопрос в том, знаете ли вы какие-либо рамки, которые могли бы помочь решить эту проблему? Или, возможно, способ сформулировать эту проблему, которая может помочь мне найти путь к решению.

Наконец, в идеале эта структура была бы в С++ (и, возможно, в java).

Ответ 1

SymmetricDS.org

Решение, которое вы ищете, очень похоже на программное обеспечение с открытым исходным кодом SymmetricDS.

"SymmetricDS - это программный пакет асинхронной репликации данных, который поддерживает несколько подписчиков и двунаправленную синхронизацию. Он использует технологии Интернета и базы данных для репликации таблиц между реляционными базами данных в ближайшем реальном времени, если это необходимо. Программное обеспечение было разработано для масштабирования для большое количество баз данных, работать через соединения с низкой пропускной способностью и выдерживать периоды отключения сети".
-SymmetricDS.org

Symmetric был разработан для использования в качестве библиотеки Java, а также для автономного приложения. Используемый с легкой базой данных, такой как H2, вы можете избежать своего сценария переполнения. H2 может быть дополнительно запущена встроенный в приложение и способный хранить данные в памяти или на диске.

Отказ от ответственности: Недавно я начал работать в компании JumpMind, которая разрабатывает это программное обеспечение.

Ответ 2

0mq. Это C-структура с интерфейсом С++. Он особенно поддерживает EPGM (надежная многоадресная передача через UDP) и соединения N-to-N. Тем не менее, вы будете работать над своим специальным случаем.

Ответ 3

Интересная проблема. Многие из описанных вами проблем особенно хорошо отражают протокол BitTorrent.

Ответ 4

Кажется, вы хотите внедрить надежную трансляцию для вашей одноранговой связи. Посмотрите библиотеку J.N. и если этого недостаточно (или вы хотите его изменить), в этой книге есть некоторые алгоритмы.

Проверить трансляцию широковещательной рассылки и общий порядок вещания.

Мой учитель из univ действительно реализовал такую ​​библиотеку, я обновлю, когда найду ее.

Ответ 5

То, что вы ищете, называется "распределенной базой данных", и они широко используются даже в производственной системе; http://www.project-voldemort.com/, например, используется linkin

В качестве сети p2p, такой как база данных DHT и Kadmelia ARE key- > value, есть также база данных P2P, где новые node автоматически добавляются, а сопротивление отказа любого node является сильным, поскольку это сопротивление сети и масштабируемость доказано

Так что просто взгляните на предпочтительную поисковую систему для "базы данных p2p" и "распределенной базы данных", и вы найдете много реализаций.