.Net одноранговая связь между кластером процессов - PullRequest
1 голос
/ 03 марта 2011

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

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

Есть ли способ достичь этого в .Net с использованием существующих технологий?(например, WPF)

В противном случае, где мне искать информацию о протоколах одноранговой связи?

1 Ответ

3 голосов
/ 03 марта 2011

Изучение протокола BitTorrent для распределенной одноранговой координации, вероятно, было бы хорошим началом: http://www.bittorrent.org/beps/bep_0003.html

Другими системами для исследования могут быть сеть с распределенной анонимностью Tor и служба имен Интернета Windows (WINS). Все они в некоторой степени связаны с открытием и координацией со стороны сверстников.

Вероятно, самая сложная часть настройки кластера P2P - найти надежный способ для нового однорангового узла обнаружить одноранговый кластер. Использование предопределенного номера порта TCP было бы началом, но распадается, когда этот порт уже используется каким-либо другим процессом. Вы можете использовать широковещательную рассылку UDP, чтобы выяснить, есть ли какие-либо одноранговые узлы, но это не пройдет через ваш первый прыжок маршрутизатора, так как маршрутизаторы обычно фильтруют широковещательные сообщения, чтобы предотвратить шторм распространения широковещательной передачи. Вы можете использовать централизованный трекер / диспетчер, но это становится единой точкой отказа для всего однорангового кластера.

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

Discovery - самая слабая часть системы BitTorrent. Если пользователь не знает, какой каталог торрента или URL трекера использовать, клиент торрента бесполезен. Как только вы найдете узел, любой узел в одноранговом кластере, найти остальных членов кластера относительно просто.

Если ваша коллекция процессов находится на одном физическом компьютере, вы можете использовать что-то вроде службы очереди сообщений, чтобы выступать в качестве стороннего арбитра между переходными процессами. В противном случае вы, вероятно, ожидаете, что один из процессов в группе пиров займет лидирующую позицию, чтобы отвечать на запросы на обнаружение и распространять список пиров среди других. Когда необходимо запустить ведущий процесс, он может передать ведущий одному из других одноранговых узлов, или одноранговые узлы могут переключиться на новый ведущий процесс, используя распределенный список одноранговых узлов. По сути это то, что служба имен Windows (WINS) делает для обнаружения имен NetBios.

...