Архивы: по дате | по разделам | по авторам

Peer-2-peer на весь мир?

Архив
автор : Андрей Драница   21.05.2002

Первые мои попытки получить информацию о P2P наткнулись даже не на стену, а, скорее, на вязкое болото - тот же Yandex вываливал столько ссылок, что перелопатить их в обозримом будущем было нереально.

Первые мои попытки получить информацию о P2P наткнулись даже не на стену, а, скорее, на вязкое болото - тот же Yandex вываливал столько ссылок, что перелопатить их в обозримом будущем было нереально. Впрочем, после более детального осмотра стало ясно: русскоязычный сегмент Сети почти ничего о принципах работы или архитектуре P2P не содержит, максимум, что из него можно выжать, так это куцые перепечатки западных новостных лент. Беседы с коллегами и разными гуру ограничивались либо пространными объяснениями, либо вежливыми извинениями - мол, самим интересно, но не знаем. Среди англоязычных ресурсов тоже, конечно, с избытком было пресс-релизов, красочных презентаций и многомегабайтных pdf. Но обнаружилось и несколько профессиональных узлов со сложившимся, как сейчас модно говорить, community, из общения с которым мне и удалось почерпнуть большую часть сведений.

Что такое P2P

Популярность P2P набирала обороты вместе с ростом популярности наиболее известного клиента, использовавшего данную технологию - Napster - и достигла своего пика в момент коллапса этой сети. Но уже за несколько месяцев до смерти Napster стали появляться альтернативные сети, многие IT-лидеры объявили о поддержке P2P в своих новых продуктах - в общем, явление стало по-настоящему «модным».

Четкого определения, что же такое P2P, нет. Поэтому приведу два наиболее распространенных. P2P (peer-to-peer) - это технология построения распределенной сети, где каждый узел может одновременно выступать и в роли клиента (получателя информации), и в роли сервера (поставщика информации). Как правило, сеть состоит из равноправных узлов, причем каждый из них взаимодействует лишь с некоторым подмножеством узлов сети, так как установление связи «каждый с каждым» невозможно из-за ограниченности ресурсов (вычислительных и пропускных). При этом передача информации между узлами, не связанными в данный момент непосредственно, может осуществляется как по своеобразной эстафете - от узла к узлу, так и путем установления временной прямой связи. Все вопросы маршрутизации и авторизации сообщений, передаваемых по эстафете, лежат не на едином сервере, а на всех этих отдельных узлах. Такое определение также известно под названием Pure P2P.

Второе определение носит более общий характер: P2P - это класс приложений, совместно использующих распределенные ресурсы (дисковое пространство и файлы, вычислительные ресурсы, каналы связи и т. д.). Именно в эту категорию попадают системы распределенных вычислительных сетей (SETI@HOME), некоторые файловые обменные сети (Napster) и службы сообщений.

Плюсы и минусы

Первый вопрос, который я задаю себе, узнав о какой-либо новинке, будь то технология, «железка» или софт: зачем это нужно и чем новинка лучше существующих аналогов? Несмотря на многообразие возможных ответов, применительно к Р2Р ключевыми характеристиками, на мой взгляд, являются:

  • управляемость - простота поддержания работоспособности системы, а также решения вопросов, связанных с обновлением, восстановлением после сбоев и регистрацией активности (logging);

  • информационная согласованность - достоверность, проверяемость и последовательность информации;

  • расширяемость - возможность расширения информационных ресурсов системы;

  • устойчивость к сбоям - надежность системы;

  • безопасность - степень защиты информации от несанкционированного доступа;

  • устойчивость к внетехнологическому вмешательству (ВТВ) - возможность (или невозможность) вмешательства государственных и иных органов в работу сети ввиду каких-либо причин (например, обвинение в нарушении авторских прав);

  • масштабируемость - наличие пределов (как правило, технологических) увеличения мощностей и предельная стоимость расширения.

А теперь сравним P2P и другие существующие топологии, дабы выяснить их преимущества и недостатки.

Централизованная топология

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


Управляемость

 да

Информационная согласованность

 да

Расширяемость

нет

Устойчивость к сбоям

нет

Безопасность

 да

Устойчивость к ВТВ

нет

Масштабируемость

 ?


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

Иерархическая топология

Это, пожалуй, самая старая и хорошо зарекомендовавшая себя топология (рис. 2). Ее состоятельность убедительно подтверждают DNS, Network Time Protocol и отчасти Usenet. По сути, эта схема создавалась с целью хотя бы частично избавиться от недостатков централизованной топологии, что, в принципе, и было достигнуто.


Управляемость

частично

Информационная согласованность

частично

Расширяемость

частично

Устойчивость к сбоям

частично

Безопасность

нет

Устойчивость к ВТВ

нет

Масштабируемость

да


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

Децентрализованная топология

Децентрализованные системы (рис. 3), такие как Gnutella, являются прямой противоположностью централизованных, поэтому неудивительно, что плюсы и минусы здесь меняются местами. Высокая надежность децентрализованных систем приводит к серьезным проблемам с управляемостью и поддержанием достоверности размещаемой информации. Впрочем, как заявляют основатели подобных сетей, ради надежности и устойчивости можно пожертвовать всеми другими благами. Принцип, можно сказать, партизанский - обороняться любыми средствами! Действительно, вывести такую сеть из строя очень непросто. Но есть у этой монеты и оборотная сторона. Децентрализованные сети требуют гораздо больших издержек, их клиенты на порядок сложнее (а значит, и ошибки в них случаются чаще). В конечном счете, они гораздо менее защищены - уже существуют специально для них написанные вирусы, а также программы, которые, маскируясь под клиентов подобных сетей, сканируют узлы в поисках определенного контента или наводняют их ложными пакетами с целью обрушить сеть.


Управляемость

Нет

Информационная согласованность

Нет

Расширяемость

Да

Устойчивость к сбоям

Да

Безопасность

Нет

Устойчивость к ВТВ

Да

Масштабируемость

 возможно


Гибридная топология: децентрализованная + централизованная

Примеры реализации сети fast-track - всем известные KaZaA and Morpheus (рис. 4). Увы, это именно тот случай, когда смешение двух технологий не пошло на пользу. Не продемонстрировав существенных достоинств централизации, эта схема ударила пользователей другим боком - возможностью блокирования серверов. И, как следствие, сети, построенные на базе fast-track, в любой момент могут быть выключены, а это во многом лишает их главного преимущества децентрализованных систем - надежности и устойчивости, в том числе и к внетехнологическим вмешательствам.


Управляемость

нет

Информационная согласованность

частично

Расширяемость

да

Устойчивость к сбоям

да

Безопасность

нет

Устойчивость к ВТВ

частично

Масштабируемость

частично


Области применения

Хотя возможных направлений применения P2P довольно много, наиболее успешны пока только четыре:

  • Файловые обменные сети (file-sharing). В данном случае сети P2P выступают хорошей альтернативой FTP-архивам, которые уже давно перестали справляться с ростом информационного наполнения и числа потребителей. Несмотря на постоянный рост количественных характеристик файл-серверной архитектуры, P2P потенциально обладает целым рядом преимуществ: балансировкой нагрузки, более широкой полосой пропускания, высокой «живучестью» и широкими возможностями по публикации контента. Примеры - Napster, Gnutella и ее производные.

  • Распределенные вычислительные сети. Например, SETI@HOME. Этот проект продемонстрировал громадный вычислительный потенциал для хорошо распараллеливаемых задач. В настоящий момент в нем принимают участие свыше трех миллионов пользователей, а общее число «процессоро-лет» перевалило за семьсот тысяч, и все это на абсолютно бесплатной основе, когда добровольцы не получают ничего кроме красочного скринсейвера и возможности общественного признания. Тем не менее, подобный альтруизм, не очень характерный для нашего меркантильного времени, приносит неплохие плоды.

  • Службы сообщений (Instant-messaging). Думаю, что одни лишь имена наиболее популярных приложений данного класса - ICQ и AIM - говорят сами за себя.

  • Сети групповой работы (P2P Groupware). Подобные приложения пока мало распространены, но в их будущем сомневаться не приходится. Одними из самых перспективных считаются Groove Network - сеть, предоставляющая защищенное пространство для коммуникаций, и OpenCola - технология поиска информации и обмена ссылками на наиболее интересные источники, где в роли поискового сервера выступает не бездушная железка, а каждый из пользователей сети, что обещает гораздо более высокую релевантность (при ответственном подходе пользователей к процессу, конечно).

Проблемы P2P

Как и у любой молодой технологии, у P2P есть не только свои технические, но и свои социальные проблемы. И их, увы, немало. Многие исследователи отмечают весьма неприятную ситуацию, сложившуюся в популярной файлообменной сети Gnutella. Суть ее в том, что около 70% пользователей не добавляют вообще никаких файлов в обменный фонд. А около 50% всех найденных ресурсов предоставлены 1% (одним процентом!) пользователей 1, у которых вышеназванные семьдесят процентов просто-напросто сидят на шее. Я склонен считать, что виной этому глубоко укоренившаяся в сознании современного человека привычка потреблять, причем потреблять, по возможности, на халяву. Самое печальное, что психология «общества массового потребления» постепенно превращает сеть равноправных узлов, каковой изначально была Gnutella, в клиент-серверную, со всеми вытекающими последствиями (падение производительности и надежности).

Существует в сетях peer-to-peer и проблема так называемого паразитического подключения: появляются сервера, предоставляющие своим пользователям возможности по поиску контента без установки программы-клиента. Таким образом, включается все тот же механизм потребления: получая информацию и генерируя громадный трафик, подобные сервера не предоставляют сообществу ничего взамен. Впрочем, последние версии ряда программ уже способны с этим справляться - они распознают запросы «паразитов» и либо их игнорируют, либо предлагают установить таки клиентскую часть.

Еще одна сложность связана с тем, что обмен информацией осуществляется между «незнакомыми» узлами (то есть отсутствует опыт обмена информацией между ними в прошлом), что порождает вполне объяснимые сомнения в качестве и достоверности предоставляемого контента 2.

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

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


1 (обратно к тексту) - В ближайшее время планируется введение так называемого up/down-load ratio (сродни аналогичному показателю на некоторых BBS) - своеобразной оценки полезности узла. Предполагается, что узлам с низким показателем доступ к фонду обмена будет ограничен.
2 (обратно к тексту) - Уже существует вполне приемлемое технологическое решение, основанное на P-Grid (см. K. Aberer and Z. Despotovic, «Managing Trust in a Peer-2-Peer Information System»).

На примере Napster довольно просто понять, как работает типичная клиент-серверная архитектура с небольшими вставками P2P на одном этапе.

  1. Пользователь загружает программу-клиент.
  2. Пользователь входит в сеть и регистрируется на сервере Napster, предоставляя информацию о себе (файлы в обменном фонде, ширина канала). Сервер регистрирует активного пользователя, внося список файлов в свою базу данных.
  3. Пользователь делает запрос на предмет интересующего его файла. Сервер производит поиск в своей базе, генерирует ответ (список IP-адресов узлов, имена и размеры файлов) и отправляет его пользователю.
  4. Пользователь выбирает, с какого узла загружать файл, соединяется напрямую с нужным узлом и загружает файл, используя протокол Napster.
  5. После загрузки он информирует сервер о результатах.

Как видно, в данной схеме сервер присутствует на трех этапах, тогда как принцип P2P работает лишь на этапе загрузки. По сути, именно такая завязка на сервер и сгубила эту популярную сеть.

Gnutella - отличный пример того, как работает чистая P2P-сеть.

  1. Пользователь загружает программу.
  2. При первом запуске программы (назовем наш узел - A), пользователь сообщает клиенту IP-адрес одного из функционирующих узлов (условно узел B). Данная процедура может и не повторяться в будущем, но при первом запуске она обязательна. Это один из самых «скользких» моментов в реализации данной сети: без адреса хотя бы одного из работающих в данный момент узла пользователь не сможет подключиться. В принципе, существует целый ряд централизованных серверов, предоставляющих подобную информацию (connect1.gnutellanet.com:6346, gnutella. hostscache.com и др.), но такая схема уже приводит к некой централизованности, а значит, и уязвимости 1.
  3. Программа посылает запрос узлу B на предмет подтверждения активности.
  4. Узел В подтверждает свою активность, если нет - см. шаг 2.
  5. Узел А посылает узлу В так называемый Ping-запрос. Помимо прочей информации, в нем указывается TTL (Time To Live) - число, означающее, сколько переходов от узла к узлу может совершить запрос. Обычно TTL равняется 7.
  6. Другие узлы, получив Ping-запрос, посылают Pong-ответ, в котором содержится IP-адрес отправителя, номер порта и минимальная информация о файлах в фонде обмена.
  7. Кроме того, узлы, получившие Ping-запрос, уменьшают его TTL на единицу, и если TTL больше нуля, а также если они не получали запрос ранее (защита от зацикливания), рассылают его своим соседям.
  8. Каждый узел, получивший Ping-запрос, отсылает Pong-ответ тем же путем, которым запрос получен.
  9. Когда Pong-ответы доходят до своего источника (то есть узла А), программа составляет список всех доступных в этот момент узлов. Как правило, он насчитывает от 2 до 10 тысяч узлов и от 500 тысяч до миллиона файлов в обменном фонде.
  10. Пользователь вводит запрос (например, название mp3-файла). Программа рассылает запрос на поиск файла всем узлам в списке и ждет входящих сообщений.
  11. Каждый узел, получивший запрос на поиск, ищет в своем фонде указанный файл. Если файл не найден, то узел не отвечает.
  12. Если файл найден, узел отсылает инициатору запроса ответ с информацией о файле и о себе (IP-адрес).
  13. Получив ряд ответов, программа выбирает один из узлов, устанавливает с ним HTTP-соединение и загружает файл. При этом все сообщения (от Ping-запроса до скачивания файла) посылаются по HTTP, что затрудняет их отслеживание и блокировку.

Некоторые клиенты Gnutella работают в соответствии с приведенным алгоритмом, а некоторые нет. Связано это с тем, что Gnutella - прежде всего протокол взаимодействия узлов (такой же, как HTTP, например), и в нем не определены некоторые из аспектов этого взаимодействия. К тому же первые версии Gnutella-совместимых программ создавались при отсутствии спецификаций - на основании обратного инжиниринга первой версии. Именно по этой причине некоторые программы несовместимы между собой, хотя их базовые возможности совпадают практически всегда.


1 (обратно к тексту) - Безусловно, закрыв доступ к серверам, кэширующим адреса активных клиентов, можно парализовать часть пользователей, но большинство современных программ оснащены средствами, позволяющими сохранить списки узлов, полученных на этапе 9, и в дальнейшем использовать их для повторного входа в сеть. При этом могут применяться весьма изощренные механизмы, например, ранжирование узлов по времени отклика, объему файлов в их фонде или времени активности.
© ООО "Компьютерра-Онлайн", 1997-2022
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.