Сказанное выше — это упрощенное описание работы Akаmаi. На практике имеют значение еще многие детали. Показанные в нашем примере узлы CDN — обычно представляют собой кластеры машин. Переадресация DNS происходит на двух уровнях: один отправляет клиента к близкой части сети, другой распределяет загрузку между узлами этой части. Имеют значения как надежность, так и скорость работы. Чтобы иметь возможность переместить клиента с одной машины в кластере на другую, ответы на втором уровне DNS предоставлены с короткими TTL, так что клиент будет повторять определение адреса через короткие промежутки времени. Наконец, до сих пор мы рассматривали распределение статических объектов, таких как изображения и видео, но CDN может также поддерживать и динамически создаваемые страницы, потоковое медиа и многое другое. Подробнее о CDN можно узнать из Dilley и др. (2002).
7.5.4. Сети одноранговых узлов (пиринговые сети)
Не каждый может установить CDN из 1000 узлов, расположенных по всему миру, для того чтобы распространять свой контент. (На самом деле арендовать 1000 виртуальных машин по всему миру не трудно, так как индустрия хостинга хорошо развита и конкурентна. Однако с получения узлов установка CDN только начинается.) К счастью, для всех остальных имеется альтернатива, которая проста в использовании и может распространять огромное количество контента. Это сеть P2P (одноранговая сеть).
Распространеие P2P-сетей началось с 1999 года. Первое широко распространенное приложение применялось для массового нарушения закона: 50 млн пользователей сети №pster обменивалось защищенными авторским правом песнями без разрешения владельцев прав, пока №pster не был закрыт решением суда, вызвав большую дискуссию. Однако технология равноправных узлов имеет много интересного и для законных целей. Другие системы продолжали развиваться с таким большим интересом со стороны пользователей, что Р2Р-трафик быстро превзошел веб-трафик. Сегодня BitTorrent — самый популярный протокол P2P. Он широко используется для распространения видео (лицензионного и общественного), а также и другого контента, что составляет большую долю всего интернет-трафика. Мы рассмотрим его в этом разделе.
Основная идея общего доступа к файлам в сети P2P (Peer-to-Peer — равноранговой сети или пиринговой сети) состоит в том, что множество компьютеров вместе объединяют свои ресурсы, чтобы сформировать систему распределения контента. Компьютеры здесь часто просто домашние компьютеры. Им не обязательно быть машинами в центрах обработки данных в Интернете. Компьютеры в P2P называются пиры (peers, узлы-участники равноранговой сети), потому что каждый из них может действовать по отношению к другому и как клиент, получая его контент, и как сервер, предоставляя контент другим узлам. Системы равноправных узлов интересны отсутствием какой-либо специализированной инфраструктуры, в отличие от CDN. Каждый участвует в задаче распространения контента, часто при отсутствии какого-либо централизованного контроля.
Множество людей вдохновлены технологией P2P, поскольку им кажется, что это оказывает поддержку маленькому человеку. Причина не только в том, что для работы CDN необходима большая компания, в то время как любой обладатель компьютера может присоединиться к сети P2P. Сети P2P имеют колоссальную емкость для распространения контента, что может соответствовать самому большому из веб-сайтов.
Рассмотрим P2P сеть, состоящую из N пользователей средней величины, каждый с широкополосным подключением к сети, имеющим пропускную способность 1 Мбит/с. Общая емкость контента сети P2P, или скорость, с которой пользователи могут послать трафик в Интернет, составляет N Мбит/с. Емкость загрузки, или скорость, с которой пользователи могут получать трафик, также составляет N Мбит/с. Каждый пользователь может одновременно загружать и получать, так как он имеет связь со скоростью в 1 Мбит/с в каждом направлении.
Не очевидно, что это должно быть верно, но вся вместимость может продуктивно использоваться для распространения контента, даже для случая совместного использования одной копии файла всеми остальными пользователями. Чтобы понять, как это может быть, представьте себе, что пользователи организованы в бинарное дерево, где каждый не листовой пользователь отправляет файл двум другим пользователям. По дереву одна копия файла должна быть донесена ко всем пользователям. Чтобы всегда использовать пропускную способность загрузки для столь многих пользователей, как это только возможно (а значит, распространять большие файлы с низким временем ожидания), нам нужно конвейеризовать сетевую деятельность пользователей. Вообразите, что файл разделен на 1000 фрагментов. Каждый пользователь может получить новый фрагмент откуда-нибудь с верху дерева и одновременно послать ранее полученный фрагмент по дереву вниз. Таким образом, как только конвейер запущен, после того как послано небольшое количество фрагментов (равное глубине дерева), все не листовые пользователи будут заняты пересылкой файла другим пользователям. Так как всего не листовых пользователей приблизительно N/2, пропускная способность загрузки этого дерева — N/2 Мбит/с. Мы можем повторить этот трюк и создать другое дерево, которое использует другие N/2 Мбит/с пропускной способности загрузки, поменяв ролями листовые и не-листовые вершины. Вся вместе эта конструкция использует всю емкость.
Этот означает, что P2P сети самомасштабируемые. Их возможный объем загрузки растет вместе с потребностью в загрузке со стороны ее пользователей. Они всегда в некотором смысле «достаточно большие», без потребности в какой-либо специализированной инфраструктуре. Противоположная ситуация: даже большой веб-узел имеет фиксированный объем и будет или слишком большим, или слишком маленьким. Рассмотрим сайт со 100 кластерами, каждый с пропускной способностью 10 Гбит/с. Этот огромный объем не помогает даже при малом количестве пользователей. Сайт не может доставить информацию до N пользователей быстрее, чем N Мбит/с, потому что ограничение находится на стороне пользователей, а не на веб-сайте. А когда есть более миллиона пользователей по 1 Мбит/с каждый, веб-сайт не может выкачать данные достаточно быстро, чтобы занять загрузкой всех пользователей. Это число пользователей кажется очень большим, однако большие BitTorrent сети (например, Pirate Bay) заявляют, что имеют более 10 млн пользователей. Это более 10 Тбит/с в терминах нашего примера!
Вы должны отнестись к этим небрежно вычисленным значениям с долей (или лучше с большим количеством) скептицизма, потому что они упрощают ситуацию. Существенный вызов для сетей P2P — хорошо использовать пропускную способность, при том что пользователи могут быть всех форм и размеров и иметь разную загрузку и вместимость. Однако эти цифры демонстрируют огромный потенциал P2P.
Есть другая причина, по которой сети P2P важны. CDN и другие централизованные службы вынуждают провайдеров находить персональную информацию о большом количестве пользователей, начиная с предпочтений веб-серфинга и покупок в интернет-магазинах до местоположения и адресов электронной почты. Эта информация может использоваться для лучшего, более персонализированного обслуживания, или для вторжения в частную жизнь людей. Второй вариант возможен или умышленно — как часть нового продукта, — или вследствие случайного разглашения или несанкционированно. В системах P2P не может быть одного поставщика, который способен к контролю всей системы. Это не означает, что системы P2P обязательно обеспечат конфиденциальность, так как пользователи до некоторой степени доверяют друг другу. А только означает, что они могут обеспечить форму конфиденциальности, отличную от централизованно управляемой системы. Системы P2P исследуются сейчас с целью совместного использования (например, хранения, передачи) файлов, и время покажет, существенно ли это преимущество.
Технология P2P развивалась двумя связанными путями. С более практической стороны есть системы, которые используются каждый день. Лучше всего из этих систем известны основанные на протоколе BitTorrent. С более академической стороны отмечался интенсивный интерес к алгоритмам DHT (Distributed Hash Table — распределенная хэш-таблица), которые позволяют системам P2P хорошо работать как целому, вообще без зависимости от централизованных компонентов. Мы рассмотрим обе эти технологии.