Введение

Протокол peer-to-peer с открытым исходным кодом JXTA (Juxtapose) был спецификацией протокола peer-to-peer с открытым исходным кодом, разработанной Sun Microsystems в 2001 году. Протоколы JXTA были определены как набор XML-сообщений, позволяющих любому устройству, подключенному к сети, обмениваться сообщениями и взаимодействовать независимо от базовой топологии сети. Поскольку JXTA основывалась на наборе открытых XML-протоколов, её можно было реализовать на любом современном языке программирования. Реализации были разработаны для Java SE, C/C++, C# и Java ME. Версия для C# использовала нативные привязки C++/C и не являлась полноценной переработкой. Узлы JXTA создают виртуальную наложенную сеть, которая позволяет узлу взаимодействовать с другими узлами, даже если некоторые из узлов и ресурсов находятся за файрволами и NAT или используют различные сетевые транспортные протоколы. Кроме того, каждый ресурс идентифицируется уникальным идентификатором – 160-битным SHA-1 URN в реализации для Java, что позволяет узлу изменять свой сетевой адрес, сохраняя при этом постоянный идентификационный номер.

Статус

В ноябре 2010 года Oracle официально объявила о прекращении поддержки проектов JXTA. По состоянию на август 2011 года проект JXTA не был возобновлен и не было объявлено о продолжении его работы. Решение о формировании управляющего совета не было принято, а Oracle не ответила на запрос о переносе исходного кода под лицензию Apache 2.

Категории коллег

JXTA определяет две основные категории узлов: краевые узлы и суперузлы. Суперузлы могут быть далее разделены на узлы-рандеву и ретрансляторы. Каждый узел имеет четко определенную роль в модели P2P JXTA. Краевые узлы обычно определяются как узлы, имеющие временное, низкоскоростное сетевое соединение. Они обычно находятся на границе Интернета, скрытые за корпоративными брандмауэрами или получающие доступ к сети через нестабильные соединения. Узел-рандеву – это специализированный узел, который отвечает за координацию узлов в сети JXTA и обеспечивает необходимый охват для распространения сообщений. Если узлы находятся в разных подсетях, то в сети должен быть как минимум один узел-рандеву. Ретранслятор позволяет узлам, находящимся за брандмауэрами или системами NAT, участвовать в сети JXTA. Это достигается с помощью протокола, способного преодолевать брандмауэр, например, HTTP. Любой узел в сети JXTA может выступать в роли узла-рандеву или ретранслятора, как только у него появятся необходимые полномочия или требования к сети, хранилищу, памяти или процессору.

Реклама

Реклама – это XML-документ, описывающий любой ресурс в P2P-сети (узлы, группы, каналы, сервисы и т.д.). Взаимодействие в JXTA можно представить как обмен одним или несколькими рекламными объявлениями по сети.

Сопоставимые группы

Группа одноранговых узлов предоставляет область для распространения сообщений и логической кластеризации узлов. В JXTA каждый одноранговый узел является членом группы по умолчанию, NetPeerGroup, но данный узел может одновременно быть членом множества подгрупп. Одноранговый узел может выполнять различные роли в разных группах: в одной группе он может выступать в качестве граничного узла, а в другой – в качестве узла rendezvous. Каждая группа должна содержать как минимум один узел rendezvous, и отправка сообщений между двумя группами невозможна.

Сеть встреч

Узел Rendezvous имеет оптимизированный механизм маршрутизации, позволяющий эффективно распространять сообщения, отправляемые подключенными к нему граничными узлами. Это достигается за счет использования слабо согласованной сети. Каждый узел Rendezvous поддерживает Rendezvous Peer View (RPV) – список известных узлов Rendezvous, упорядоченных по идентификатору узла (Peer ID). Отсутствует механизм обеспечения согласованности всех RPV в сети JXTA, поэтому конкретный RPV может иметь временное или постоянное несогласованное представление о других узлах Rendezvous. Как только наблюдается низкая текучесть сети, то есть стабильная сеть, в которой узлы редко присоединяются или покидают ее, списки RPV каждого узла будут сходиться, поскольку каждый узел Rendezvous время от времени обменивается случайным подмножеством своего RPV с другими узлами Rendezvous. Когда граничный узел публикует объявление (Advertisement), индекс этого объявления передается узлу Rendezvous через систему Shared Resource Distributed Index (SRDI). Затем узел Rendezvous применяет функцию распределенной хеш-таблицы (DHT) для пересылки индекса другому узлу в списке RPV. Для целей репликации он отправляет этот индекс соседям выбранного узла Rendezvous в списке RPV. Процесс поиска требует использования той же функции DHT для обнаружения узла Rendezvous, ответственного за хранение этого индекса. Достигнув узла Rendezvous, он пересылает запрос граничному узлу, опубликовавшему объявление, и этот узел связывается с узлом, инициировавшим запрос. Если функция DHT не может найти узел, ответственный за объявление, запрос будет пересылаться вверх и вниз по списку RPV до тех пор, пока не будет найдено совпадение, запрос не будет отменен или не достигнет пределов списка RPV. Этот процесс называется случайным блужданием (random walk).