Распределение состояния по многим машинам - PullRequest
7 голосов
/ 05 сентября 2011

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

Из моих поисков я не нашел (C, C ++ или JavaME) библиотек, которые предлагают механизм распределенного состояния.В идеале я ищу что-то, что периодически транслирует / многоадресно передает состояние каждого отдельного компьютера, чтобы участвующие компьютеры могли создать глобальную таблицу состояний и все могли видеть, кем должен быть мастер.Состояние в данном случае - произвольные пары ключ / значение.

Я бы не хотел заново изобретать колеса, поэтому мне интересно знать, может ли кто-нибудь здесь указать мне правильное направление?

Ответы [ 3 ]

2 голосов
/ 12 сентября 2011

Звучит как Apache ZooKeeper может быть хорошим совпадением.Это распределенное, иерархическое хранилище значений ключей.Процитируем их Страница обзора :

ZooKeeper был разработан для хранения координационных данных: информации о состоянии, конфигурации, информации о местоположении и т. Д.

Вотпример простого получателя от Лидера , хотя для определения лидера по некоторому взвешенному критерию потребуется адаптация.

2 голосов
/ 05 сентября 2011

На вашем месте я бы исследовал memcached (memcached.org) или один из вариантов nosql.

1 голос
/ 12 сентября 2011

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

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

функции, которые вам нужны для этого:

MPI_Bcast
MPI_Send
MPI_Recv

Есть много учебников по C ++ / MPI в сети, просто погуглите их!

...