Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

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

div.main {margin-left: 20pt; margin-right: 20pt}Peer-2-Peer на весь мир?
Автор: Андрей Драница, Andrey.Dranitsa@mstu.edu.ru
Опубликовано: 20.05.2002
Оригинал: http://www.softerra.ru/review/technologies/17922/

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

Что такое P2P

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

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

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

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

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

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

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

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

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

Управляемость да
Инфор-ая соглас-ть да
Расширяемость нет
Устойчивость к сбоям нет
Безопасность да
Устойчивость к ВТВ нет
Масштабируемость ?

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

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

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

Управляемость частично
Инфор-ая соглас-ть частично
Расширяемость частично
Устойчивость к сбоям частично
Безопасность нет
Устойчивость к ВТВ нет
Масштабируемость да

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

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

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

Управляемость нет
Инфор-ая соглас-ть нет
Расширяемость да
Устойчивость к сбоям да
Безопасность нет
Устойчивость к ВТВ да
Масштабируемость возможно
Гибридная топология: децентрализованная + централизованная

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

Управляемость нет
Инфор-ая соглас-ть частично
Расширяемость да
Устойчивость к сбоям да
Безопасность нет
Устойчивость к ВТВ частично
Масштабируемость частично

 

Napster

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

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

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

 

Gnutella

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

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

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

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

Хотя возможных направлений применения 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% (одним процентом!) пользователей [2]. Психология «общества массового потребления» постепенно превращает сеть равноправных узлов в клиент-серверную, со всеми вытекающими последствиями (падение производительности и надежности).

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

Другая проблема P2P сетей связана с тем, что обмен информацией осуществляется между «незнакомыми» узлами (отсутствует опыт по обмену в прошлом), что порождает вполне объяснимые сомнения в качестве и достоверности предоставляемого контента [3]. Стоит вопрос и о самой легитимности существующих сетей. В первую очередь он связан со сложившимся в условиях всеобщей «антитеррористической» истерии стереотипом — якобы, единственным применением P2P является либо незаконный обмен ворованным контентом, либо, в более общем случае, сокрытие информации.

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

[1] — Безусловно, закрыв доступ к серверам, кэширующим адреса активных клиентов, можно будет парализовать часть пользователей, но большинство современных программ оснащены средствами, позволяющими сохранить списки узлов, полученных на этапе 9, и в дальнейшем использовать их для повторного входа в сеть. При этом могут применяться весьма изощренные механизмы, например, ранжирование узлов по времени отклика, объему файлов в их фонде или времени активности.
[обратно к тексту]

[2] — В ближайшее время планируется введение так называемого "up/down-load ratio" (сродни аналогичному показателю на некоторых BBS) — своеобразной оценки полезности узла. Предполагается, что узлам с низким показателем доступ к фонду обмена будет ограничен.
[обратно к тексту]

[3] — Уже существует вполне приемлемое технологическое решение, основанное на P-Grid (см. K.Aberer and Z. Despotovic, "Managing Trust in a Peer-2-Peer Information System").
[обратно к тексту]



  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте