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

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

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

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

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

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

Наконец, в идеале, этот фреймворк должен быть на C ++ (и, возможно, на Java).

Ответы [ 5 ]

2 голосов
/ 08 марта 2012

SymmetricDS.org

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

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

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

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

2 голосов
/ 08 марта 2012

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

1 голос
/ 08 марта 2012

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

0 голосов
/ 07 октября 2014

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

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

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

0 голосов
/ 08 марта 2012

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

Проверьте трансляцию причинного заказа и трансляцию общего заказа.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...