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 лишний раз
доказывает, что история имеет тенденцию повторяться. Подзабытые во времена
эйфории по поводу клиент-серверных технологий, одно-ранговые модели
возвращаются, реинкарнируясь в популярные и, самое главное, востребованные
решения.
|