Введение
Протокол 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, что позволяет узлу изменять свой сетевой адрес, сохраняя при этом постоянный идентификационный номер.
JXTA (Juxtapose) was an open source peer to peer protocol specification begun by Sun Microsystems in 2001. The JXTA protocols were defined as a set of XML messages which allow any device connected to a network to exchange messages and collaborate independently of the underlying network topology. As JXTA was based upon a set of open XML protocols, it could be implemented in any modern computer language. Implementations were developed for Java SE, C/C++, C# and Java ME. The C# Version used the C++/C native bindings and was not a complete re implementation in its own right. JXTA peers create a virtual overlay network which allows a peer to interact with other peers even when some of the peers and resources are behind firewalls and NATs or use different network transports. In addition, each resource is identified by a unique ID, a 160 bit SHA 1 URN in the Java binding, so that a peer can change its localization address while keeping a constant identification number.
Статус
В ноябре 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).