Распределенное состояние - PullRequest
       7

Распределенное состояние

1 голос
/ 27 февраля 2012

У меня есть несколько серверов, подключенных по каналам глобальной сети (умеренная пропускная способность, большая задержка), и все они должны иметь возможность обмениваться информацией о подключенных клиентах. Каждый клиент может подключиться к любому из серверов в «сетке». Я ищу какую-то распределенную базу данных, которую каждый сервер может разместить и обновить. Было бы важно, чтобы каждый сервер мог обновляться с текущим состоянием, если он был в автономном режиме в течение какого-либо промежутка времени.

Если я ничего не могу найти, альтернативой будет выбор сервера для размещения базы данных MySQL, на которую все серверы могут быть вставлены; но я бы очень хотел убрать это как единственную точку отказа, если это возможно. (и время простоя, связанное с повышением уровня рабов до хозяина)

Существует ли какое-либо распределенное хранилище данных без единого главного устройства, которое вы использовали ранее и порекомендуете?

Было бы очень полезно, если бы у любого решения были интерфейсы Python.

Ответы [ 5 ]

2 голосов
/ 27 февраля 2012

Вы смотрели на мультипроцессорную обработку Python объектов?

Вам потребуется добавить логику для поддержки распределенной базы данных (например, выбрать новые мастера, избыточность и любые другие атрибуты, которые вы хотите), что можно легко сделать, расширив объекты Manager и реализовав свои собственные объекты Proxy, но модуль, который я упомянул, позаботится обо всей синхронизации и отправке данных за вас.

Таким образом, вместо распределенной базы данных ваша сетка будет использовать Python dict или сложный тип данных, который вы даете указанию вашему Manager объекту делиться с подключенными прокси.

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

Взгляните на проект doozerd . Существует клиент Python на основе gevent .

0 голосов
/ 13 мая 2012

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

ZooKeeper * 1007Эфемерный узел * позволяет вам поддерживать информацию о присутствии для всех узлов сервера.

0 голосов
/ 27 февраля 2012

То, что вы описываете, напоминает мне кластер Apache Cassandra, настроенный таким образом, что на каждой машине размещается копия всего набора данных, а чтение и запись завершаются успешно, когда они достигают одного узла (я никогда этого не делал, но думаю, что это возможно). Узлы должны быть в состоянии функционировать, когда каналы WAN не работают, и получать ожидающие обновления, как только они возвращаются в оперативный режим. Тем не менее, в этом нет ничего волшебного - если конфликтующие обновления выпускаются на разных серверах или устаревшие реплики используются для создания новых данных, проблемы согласованности возникнут в любой выбранной вами архитектуре.

Вторая проблема заключается в том, что для каждой локальной записи вы получите n-1 удаленных записей, и ваши серверы могут тратить много времени и пропускной способности на обсуждение того, кто имеет последнюю запись.

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

0 голосов
/ 27 февраля 2012

Может быть, Hadoop или что-то подобное будет работать для вас?

http://hadoop.apache.org/

...