Как создать надежный распределенный список на нескольких компьютерах в сети? - PullRequest
0 голосов
/ 03 марта 2009

Я думал о создании программы, использующей алгоритмы типа raid (disk). Если один компьютер умирает. Следующий вступит. На своем месте. И его нужно масштабировать от 1 до 1000 компьютеров.

Мне нужен совет.

Какое название алгоритмов мне нужно выучить?

В какой-то момент я подумал, что можно построить его поверх git.

Ответы [ 9 ]

5 голосов
/ 03 марта 2009

Возможно, вы захотите прочитать эту статью в файловой системе Google. Из аннотации:

Мы разработали и внедрили Google File System, масштабируемую распределенную файловую систему для больших распределенных приложений, интенсивно работающих с данными. Он обеспечивает отказоустойчивость при работе на недорогом стандартном оборудовании и обеспечивает высокую совокупную производительность для большого количества клиентов.

3 голосов
/ 05 марта 2009

Попробуйте Hazelcast . Распространена реализация Set, List и многое другое. Hazelcast - это транзакция с открытым исходным кодом, распределенная / секционированная реализация службы очереди, темы, карты, набора, списка, блокировки и исполнителя. С ним очень легко работать; просто добавьте hazelcast.jar в ваш путь к классам и начните кодировать. Почти не требуется настройка.

Hazelcast выпускается под лицензией Apache, также доступна поддержка уровня предприятия. Код размещен на Google Code .

1 голос
/ 05 марта 2009

Я видел как Hadoop, так и файловую систему Google, но никто особо не упомянул HDFS - распределенную файловую систему, которая поставляется с Hadoop. Вы можете установить желаемый уровень избыточности и потерять случайный узел, не потеряв свои данные.

Одно предостережение: вам нужно убедиться, что одна машина, на которой хранится «namenode» (главная машина и единая точка отказа в кластере HDFS), работает надежно - зеркалирование RAID, резервное копирование, работает. Вы теряете наменоде, вы теряете кластер.

1 голос
/ 03 марта 2009

Распределенные хеш-таблицы всплывают у меня в голове ...

0 голосов
/ 28 мая 2011

1) Вы можете использовать распределенные блокировки / мьютексы, как в:

Алгоритм sqrt (N) для взаимного исключения в децентрализованных системах, автор Maekawa: http://portal.acm.org/citation.cfm?id=214445

О производительности распределенной синхронизации на основе блокировки Любовичем и Таубенфельдом: http://portal.acm.org/citation.cfm?id=1946155

2) Или вы можете использовать связанные списки без блокировки, как в:

Связанные списки без пропусков и Пропуск списков, автор Fomitchev и Руперт: http://www.cse.yorku.ca/~ruppert/papers/lfll.pdf

Связанные списки без блокировки с использованием сравнения и обмена, по Валуа: http://portal.acm.org/citation.cfm?id=224988

0 голосов
/ 06 марта 2009

Вы можете проверить Appistry EAF . Это распределенная платформа исполнения. Он обрабатывает все задачи при сбое для вас, так что вам не нужно встраивать это в ваш код. Если один узел выходит из строя, другой узел автоматически вступает во владение. И в отличие от Grid, нет централизованного контроллера, чтобы вы могли устранить единую точку отказа / узкое место этих типов решений.

Доступна бесплатная загрузка до 5 машин.

0 голосов
/ 03 марта 2009

Также проверьте алгоритм MapReduce . Это относительно простой способ достижения высокой масштабируемости, который не заставляет разработчика алгоритма задумываться о блокировке, связи и т. Д. Существует несколько реализаций, например, открытый код Hadoop от Apache Foundation. .

0 голосов
/ 03 марта 2009

Вы можете создать что-то вроде memcached . Каждая запись хеша может быть блоком файла (например, хэш SHA блока содержимого).

0 голосов
/ 03 марта 2009

BitTorrent? :)

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