2015-03-25 2 views
4

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

В настоящее время я использую централизованный сервер для подсчета количества узлов. Каждый узел связывается с этим сервером. Это очень неэффективно и нарушает распределенное поведение.

Есть ли способ сделать это распределенным способом без использования централизованного сервера?

ответ

3

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

http://en.m.wikipedia.org/wiki/Gossip_protocol

Простая реализация сплетни: периодически каждый сервер выбирает некоторый случайный набор соседей, с которыми общаться. Сервер просто посылает этим соседям свое текущее состояние (в этом случае количество узлов в кластере). Свойство, которое делает протоколы сплетен надежными, - это информация распространяется как вирус.

Вы можете расширить этот подход и использовать какие-то логические часы, такие как часы Lamport, или vector clock для обработки разрешения конфликтов, по существу, с версией обновлений. Например, если узел A получает подсчет сервера от узла B, версия которого равна 10, а затем получает счет от узла C, версия которого равна 8, узел A просто игнорирует обновление от узла C, поскольку его состояние было последним обновлено в более раннем логическом чем у узла B. Это улучшает согласованность подсчета вашего сервера, не позволяя серверам с устаревшим представлением кластера переписывать обновления с более «современных» серверов.

Кроме того, вы можете использовать протокол gossip для более надежного обнаружения сбоев. Например, в случае сетевого раздела из представления некоторой части кластера может показаться, что сервер умер или, возможно, просто покинул кластер добровольно. Вместо того, чтобы полагаться на ненадежную сеть, вы можете использовать протокол сплетен, чтобы исследовать сервер из нескольких точек, сплетничая информацию о том, какие серверы пытались связаться с подозрительным сервером. Тогда только когда достигнут порог сбоев, сервер считается мертвым.

+0

спасибо. Это дает несколько советов. –