Технологии Peer-to-Peer - из золушки в принцессы

14 июль, 2006 - 13:51Леонід Бараш

Что скрывается за словами Peer-to-Peer?

При беглом знакомстве с литературой обнаруживается множество различных толкований понятия Peer-to-Peer, отличающихся в основном спектром включаемых особенностей.

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

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

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

В то же время многие сходятся во мнении, что главные для архитектуры P2P следующие характеристики:

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

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

Здесь самое время порассуждать об особенностях вычислений в grid- и P2P-системах. И те и другие представляют два подхода к распределенным вычислениям с использованием разделяемых ресурсов в крупномасштабном компьютерном сообществе.

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

Однако по мере развития технологии P2P и использования более сложных приложений, таких как распределение структурированного контента, совместная работа на ПК и сетевые вычисления, ожидается конвергенция P2P- и grid-вычислений.

Классификация P2P-приложений

Архитектуры P2P использовались для множества приложений разных категорий. Приведем краткое описание некоторых из них.

Коммуникации и сотрудничество. Эта категория включает системы, обеспечивающие инфраструктуру для прямых, обычно в режиме реального времени, коммуникаций и сотрудничества между равноправными компьютерами. Примерами могут служить чат и служба мгновенных сообщений.

Распределенные вычисления. Целью этих систем является объединение вычислительных возможностей равноправных узлов для решения задач с интенсивными вычислениями. Для этого задача разбивается на ряд небольших подзадач, которые распределяются по разным узлам. Результат их работы возвращается затем хосту. Примеры таких систем – проекты SETI@home, genome@ home и ряд других.

Системы баз данных. Значительные усилия были затрачены на разработку распределенных баз данных, основанных на P2P-инфраструктуре. В частности, была предложена локальная реляционная модель (Local Relational Model), предполагающая, что набор всех данных, хранимых в P2P-сети, состоит из несовместимых локальных реляционных баз данных (т. е. не удовлетворяющих заданным ограничениям целостности), взаимосвязанных с помощью «посредников», которые определяют трансляционные правила и семантические зависимости между ними.

Распределение контента. К этой категории относится большинство современных P2P-сетей, включающих системы и инфраструктуры, разработанные для разделения цифровой аудиовизуальной информации и других данных между пользователями. Спектр таких систем для распределения контента начинается от относительно простых приложений для прямого разделения файлов и простирается до более сложных, которые создают распределенные среды хранения, обеспечивающие безопасность и эффективные организацию, индексацию, поиск, обновление и извлечение данных. В качестве примеров можно привести позднюю сеть Napster, Gnutella, Kazaa, Freenet и Groove. В дальнейшем мы сфокусируем внимание именно на этом классе сетей.

Распределение контента в сетях P2P

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

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

  • системы обмена файлами, предназначенные для простого одноразового обмена между компьютерами. В таких системах создается сеть равноправных узлов и обеспечиваются средства для поиска и передачи файлов между ними. В типичном случае это «легковесные» приложения с качеством обслуживания «по мере возможности» (best effort), не заботящиеся о безопасности, доступности и живучести;
  • системы для публикации и хранения контента. Такие системы предоставляют среду распределенного хранения, в которой пользователи могут публиковать, сохранять и распределять контент, при этом поддерживаются безопасность и надежность. Доступ к такому контенту контролируется, и узлы должны обладать соответствующими привилегиями для его получения. Основными задачами таких систем являются обеспечение безопасности данных и живучести сети, и зачастую их главная цель заключается в создании средств для идентифицируемости, анонимности, а также управления контентом (обновление, удаление, контроль версий).

Инфраструктуры P2P. Данная категория включает P2P-базированные инфраструктуры, которые не содержат рабочих приложений, а предоставляют для них соответствующие сервисы и базовую поддержку. Различают такие инфраструктурные сервисы:

  • определение адреса и маршрутизация. Любая P2P-система распределения контента опирается на сеть равноправных узлов, внутри которой узлы и контент должны эффективно локализоваться, а запросы и ответы – маршрутизироваться, и при этом обеспечиваться отказоустойчивость. Для выполнения этих требований были разработаны различные инфраструктуры и алгоритмы;
  • обеспечение анонимности. P2P-базированные инфраструктурные системы должны разрабатываться с целью обеспечения анонимности пользователя;
  • репутационный менеджмент. В сетях P2P отсутствует центральный орган для управления репутационной информацией о пользователях и их поведении. Поэтому она располагается на множестве разных узлов. Для того чтобы гарантировать ее безопасность, актуальность и доступность во всей сети, необходимо иметь сложную инфраструктуру управления репутациями.

Локализация и маршрутизация распределенных объектов в сетях P2P

Функционирование любой P2P-системы распределения контента опирается на узлы и соединения между ними. Эта сеть образуется поверх и независимо от базовой (в типичном случае IP) и поэтому часто называется оверлейной. Топология, структура, степень централизации оверлейной сети, механизмы локализации и маршрутизации, которые в ней используются для передачи сообщений и контента, являются решающими для работы системы, поскольку они воздействуют на ее отказоустойчивость, производительность, масштабируемость и безопасность. Оверлейные сети различаются по степени централизации и структуре.

Централизация. Хотя самое строгое определение предполагает, что оверлейные сети полностью децентрализованы, на практике этого не всегда придерживаются, и встречаются системы с той или иной степенью централизации. В частности, выделяют три их категории:

  • полностью децентрализованные архитектуры. Все узлы в сети выполняют одинаковые задачи, действуя как серверы и клиенты, и не существует центра, координирующего их активность;
  • частично централизованные архитектуры. Базис здесь тот же, что и в предыдущем случае, однако некоторые из узлов играют более важную роль, действуя как локальные центральные индексы для файлов, разделяемых локальными узлами. Способы присвоения таким суперузлам их роли в сети в разных системах варьируются. Важно, однако, отметить, что эти суперузлы не являются единой точкой отказа для сети P2P, так как назначаются динамически и в случае отказа сеть автоматически передает их функции другим узлам;
  • гибридные децентрализованные архитектуры. В таких системах имеется центральный сервер, который облегчает взаимодействие между узлами посредством управления директорией метаданных, описывающей хранимые на них разделяемые файлы. Хотя сквозное взаимодействие и обмен последними может осуществляться непосредственно между двумя узлами, центральные серверы облегчают этот процесс, просматривая и идентифицируя узлы, хранящие файлы.

Очевидно, в этих архитектурах имеется единая точка отказа – центральный сервер.

Сетевая структура характеризует, создается ли оверлейная сеть недетерминировано (ad hoc), по мере того как добавляются узлы и контент, или базируется на специальных правилах. С точки зрения структуры сети P2P делятся на две категории:

  • неструктурированные. Размещение контента (файлов) в них никак не связано с топологией оверлейной сети, в типичных случаях его нужно локализовать. Механизмы поиска варьируются от методов грубой силы, таких как лавинное распространение запросов способами «сначала вширь» (breadth-first) или «сначала вглубь» (depth-first) – до тех пор пока желаемый контент не будет найден, до более софистических стратегий, предполагающих использование метода случайного блуждания и индексацию маршрутов. Механизмы поиска, применяемые в неструктурированных сетях, имеют очевидное влияние на доступность, масштабируемость и надежность.

Неструктурированные системы более подходят для сетей с непостоянным числом узлов. Примерами являются Napster, Gnutella, Kazaa, Edutella и ряд других;

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

Структурированные системы (к ним относятся Chord, CAN (Content Addressable Network), Tapestry и ряд других) предоставляют масштабируемые решения для поиска по точному совпадению, т. е. для запросов, в которых известен точный идентификатор нужных данных. Их недостатком является сложность управления структурой, требуемая для эффективной маршрутизации сообщений в среде с переменным числом узлов.

Сети, занимающие промежуточное положение между структурированными и неструктурированными, имеют название слабоструктурированных. Хотя данные о локализации контента в них указываются не полностью, они, тем не менее, способствуют поиску маршрута (типичный пример такой сети – Freenet).

Теперь обсудим более подробно оверлейные сети с точки зрения их структуры и степени централизации.

Неструктурированные архитектуры

Начнем с полностью децентрализованных архитектур (см. приведенное выше определение). Самым интересным представителем таких сетей является Gnutella. Подобно большинству P2P-систем, она строит виртуальную оверлейную сеть с собственным механизмом маршрутизации, позволяя своим пользователям разделять файлы. В сети отсутствует какая-либо централизованная координация операций, и узлы соединяются друг с другом непосредственно с помощью ПО, которое функционирует и как клиент, и как сервер (его пользователей называют servents – от SERVers + cliENTS).

В качестве базового сетевого протокола Gnutella применяет IP, тогда как коммуникации между узлами определяются протоколом прикладного уровня, поддерживающим четыре типа сообщений:

  • Ping – запрос к определенному хосту с целью объявить о себе;
  • Pong – ответ на сообщение Ping, содержащий IP-адрес, порт запрошенного хоста, а также количество и размеры разделяемых файлов;
  • Query – поисковый запрос. В него входят строка поиска и минимальные скоростные требования к отвечающему хосту;
  • Query Hits – ответ на запрос Query, включает IP-адрес, порт и скорость передачи отвечающего хоста, количество найденных файлов и набор их индексов.

После присоединения к сети Gnutella (посредством связи с узлами, обнаруженными в базах данных, таких как gnutellahosts.com) узел посылает сообщение Ping каким-нибудь связанным с ним хостам. Те отвечают сообщением Pong, идентифицируя себя, и рассылают сообщение Ping свом соседям.

В неструктурированной системе, подобной Gnutella, единственной возможностью локализовать файл является недетерминированный поиск, так как у узлов не было способа предположить, где он находится.

Первоначально в архитектуре Gnutella использовался лавинный (или широковещательный) механизм для распределения запросов Ping и Query: каждый узел направлял полученные сообщения всем своим соседям, а ответы шли по обратному пути. Чтобы ограничить потоки сообщений в сети, все они содержали в заголовке поле Time-to-Live (TTL). На транзитных узлах значение этого поля уменьшалось, и когда оно достигало значения 0, сообщение удалялось.

Описанный механизм реализовывался посредством присвоения сообщениям уникальных идентификаторов ID и наличия в хостах динамических маршрутных таблиц с идентификаторами сообщений и адресами узлов. Когда ответы содержат такой же ID, что и исходящие сообщения, хост обращается к маршрутной таблице, чтобы определить, по какому каналу направить ответ для разрыва петли.

Технологии Peer-to-Peer - из золушки в принцессы
Рис. 1. Пример механизма поиска в неструктурированной системе

Если узел получает сообщение Query Hit, в котором указано, что искомый файл находится на определенном компьютере, он инициирует загрузку посредством прямого соединения между двумя узлами. Механизм поиска приведен на рис. 1.

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

Суперузлы индексируют файлы, разделяемые подсоединенными к ним узлами, и в качестве proxy-серверов выполняют поиск от их имени. Поэтому все запросы первоначально направляются к суперузлам.

Частично централизованные системы обладают двумя преимуществами:

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

Частично централизованной системой является сеть Kazaa.

Технологии Peer-to-Peer - из золушки в принцессы
Рис. 2. Пример механизма поиска в сетях с гибридной децентрализацией

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

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

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

Структурированные архитектуры

Разнообразные структурированные системы распределения контента используют различные механизмы для маршрутизации сообщений и нахождения данных. Мы остановимся на наиболее знакомой украинским пользователям – Freenet.

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

Freenet – типичный пример полностью децентрализованной слабоструктурированной системы распределения контента. Она функционирует как самоорганизующаяся одноранговая сеть, собирая в пул неиспользуемое дисковое пространство компьютеров с целью создания общей виртуальной файловой системы.

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

Каждый узел сети Freenet управляет своим собственным локальным хранилищем данных, делая его доступным для чтения и записи остальными, так же как и динамическую таблицу маршрутизации, содержащую адреса других узлов и хранимых ими файлов. Чтобы найти файл, пользователь посылает запрос, содержащий ключ и косвенное значение времени жизни, выраженное посредством максимально допустимого количества пройденных транзитных узлов (hops-to-live).

Freenet использует следующие типы сообщений, каждое из которых включает идентификатор узла (для обнаружения петель), значение hops-to-live и идентификаторы источника и получателя:

  • Data insert – узел, помещающий новые данные в сеть (в сообщении находятся ключ и данные (файл));
  • Data request – запрос определенного файла (в него входит ключ);
  • Data reply – ответ, когда файл найден (в сообщение включается файл);
  • Data failed – ошибка в поиске файла (указываются узел и причина ошибки).

Для присоединения к Freenet компьютеры прежде всего определяют адрес одного или более существующих узлов, а затем отправляют сообщения Data insert.

Чтобы поместить новый файл в сеть, узел сначала вычисляет его двоичный ключ и посылает сообщение Data insert себе. Любой узел, получивший такое сообщение, сначала проверяет, не используется ли уже этот ключ. Если нет, то он ищет ближайший (в смысле лексикографического расстояния) в своей маршрутной таблице и направляет сообщение (с данными) соответствующему узлу. С помощью описанного механизма новые файлы размещаются на узлах, уже владеющих файлами с подобными ключами.

Это продолжается до тех пор, пока не исчерпается лимит hops-to-live. Таким образом, распространяемый файл разместится более чем на одном узле. Во то же время все узлы, вовлеченные в процесс, обновят свои маршрутные таблицы – таков механизм, посредством которого новые узлы анонсируют свое присутствие в сети. Если предел hops-to-live достигнут без коллизии значений ключей, сообщение «все корректно» будет доставлено обратно к источнику, информируя его, что файл помещен в сеть успешно. Если же ключ уже используется, узел возвращает существующий файл, как будто именно он был запрошен. Таким образом, попытка подмены файлов приведет к распространению их дальше.

При получении узлом запроса на хранящийся на нем файл поиск останавливается и данные направляются к его инициатору. Если требуемого файла нет, узел передает запрос к соседнему, на котором он с большой вероятностью может находиться. Адрес отыскивается в маршрутной таблице по ближайшему ключу, и т. д. Заметим, что здесь приведен упрощенный алгоритм поиска, дающий лишь общую картину функционирования сети Freenet.

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

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

Потенциальные возможности сетей P2P оказались столь велики, что Hewlett-Packard, IBM и Intel инициировали создание рабочей группы с целью стандартизировать технологию для применения в коммерческих целях. В новой версии ОС Microsoft Windows Vista будут встроены средства для коллективной работы, позволяющие ноутбукам разделять данные с ближайшими соседями.

Первые сторонники этой технологии, такие как аэрокосмический гигант Boeing, нефтяная компания Amerada Hess и сама Intel, говорят, что ее использование уменьшает необходимость в приобретении высокоуровневых вычислительных систем, включая мэйнфреймы. Системы P2P могут также ослабить требования к пропускной способности сети, что важно для компаний, у которых возникают с этим проблемы.

Intel начала использовать технологию P2P в 1990 г., стремясь снизить расходы на разработку чипов. Компания создала собственную систему, названную NetBatch, которая объединяет более 10 тыс. компьютеров, предоставляя инженерам доступ к глобально распределенным вычислительным ресурсам.

Boeing применяет распределенные вычисления для выполнения ресурсоемких тестовых испытаний. Компания использует Napster-подобную модель сети, в которой серверы направляют трафик к назначенным узлам. «Нет такого одного компьютера, который отвечал бы нашим требованиям», – говорит Кен Невес (Ken Neves), директор исследовательского подразделения.

Потенциал технологий P2P привлек внимание и венчурного капитала. Так, Softbank Venture Capital инвестировал 13 млн долл. в компанию United Device, разрабатывающую технологии для трех рынков: вычисления для биотехнологической индустрии, качество обслуживания (QoS) и нагрузочные тесты для Web-сайтов, а также индексирование контента на базе метода «червячного» поиска, используемого рядом машин в Интернете.

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