Введение

Pastry - это накладная сеть и маршрутизационная сеть для реализации распределенной хэш-таблицы (DHT), аналогичная Chord. Пара ключей и значений хранится в избыточной одноранговой сети подключенных хостов Интернета. Протокол загружается, снабжая его IP-адресом однорангового устройства, уже находящегося в сети, и с этого момента через таблицу маршрутизации, которая динамически создается и восстанавливается. Утверждается, что из-за его избыточного и децентрализованного характера нет единой точки отказа, и любой узел может покинуть сеть в любое время без предупреждения и с небольшой вероятностью потери данных. Протокол также способен использовать метрику маршрутизации, предоставленную внешней программой, такой как ping или traceroute, для определения лучших маршрутов для хранения в своей таблице маршрутизации.

Обзор

Хотя распределенная функциональность хэш-таблицы Pastry почти идентична другим DHT, отличительная особенность - это сеть маршрутизации, построенная на основе концепции DHT. Это позволяет Pastry реализовать масштабируемость и отказоустойчивость других сетей, одновременно снижая общую стоимость маршрутизации пакета от одного узла к другому, избегая необходимости наводнения пакетов. Поскольку метрика маршрутизации предоставляется внешней программой, основанной на IP-адресе целевого узла, метрика может быть легко переключена на кратчайший подсчет прыжков, наименьшую задержку, наибольшую пропускную способность или даже общую комбинацию метрик. Ключевое пространство хэш-таблицы принимается за круговое, как и ключевое пространство в системе Chord, а идентификаторы узлов - это 128 битные неподписанные целые числа, представляющие позицию в круговом ключевом пространстве. Идентификаторы узлов выбираются случайным образом и равномерно, поэтому сверстники, которые находятся рядом в идентификаторе узла, географически разнообразны. Сеть наложения маршрутизации формируется поверх хэш-таблицы, когда каждый пир обнаруживает и обменивается информацией о состоянии, состоящей из списка листьев узлов, списка соседств и таблицы маршрутизации. Список листовных узлов состоит из ближайших L/2 сверстников по идентификатору узла в каждом направлении вокруг круга. В дополнение к узлам листьев есть также список районов. Это представляет собой M ближайших сверстников с точки зрения маршрутизации метрики. Хотя он не используется непосредственно в алгоритме маршрутизации, список соседств используется для поддержания принципов локальности в таблице маршрутизации. Наконец, есть сама таблица маршрутизации. В ней содержится одна запись для каждого блока адресов, присвоенного ей. Для формирования адресных блоков 128-битовый ключ разделяется на цифры, каждая цифра длиной в битах, получая систему нумерации с базой 2b. Это разделяет адреса на различные уровни с точки зрения клиента, при этом уровень 0 представляет собой нулевой цифровой общий префикс между двумя адресами, уровень 1 - однозначный общий префикс и так далее. Таблица маршрутизации содержит адрес ближайшего известного однорангового устройства для каждой возможной цифры на каждом уровне адреса, за исключением цифры, которая принадлежит самому одноранговому устройству на этом конкретном уровне. Это приводит к хранению контактов на уровне, при этом количество уровней масштабируется как значения и представляет собой операционные значения в типичной сети.

Маршрутизация

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

Приложения, созданные на основе Pastry

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

Прошлое

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

Напишите .

SCRIBE - это децентрализованная система публикации/подписки, которая использует Pastry для управления маршрутами и поиска хостов. Пользователи создают темы, на которые могут подписаться другие пользователи. После создания темы владелец темы может публиковать новые записи под темой, которые будут распространяться в многоканальном дереве для всех узлов SCRIBE, которые подписались на тему. Система работает, вычисляя хэш имени темы, связанного с именем пользователя, владельца темы. Затем этот хэш используется в качестве ключа Pastry, а затем издатель маршрутизирует пакеты к узлу, ближайшему к ключу, используя протокол маршрутизации Pastry для создания корневого узла темы на этом узле. Затем люди подписываются на тему, вычисляя ключ из темы и имени издателя, а затем используя Pastry, чтобы направить сообщение об подписке на тему к корневому узлу. Когда корневой узел получает сообщение о подписке от другого узла, он добавляет идентификатор узла в свой список детей и начинает действовать в качестве передатчика темы. Децентрализация достигается путем того, что все узлы в сети подглядывают за подписками, проходящими мимо них по пути к корневому узлу темы. Если тема является тем, к которой подключен текущий узел, он прекратит перенаправление пакета к корневому узлу и добавит узел, пытающийся подписаться, как одного из своих детей. Таким образом, образуется деревоподобная структура, с корневым узлом вверху, отправляющим сообщения первым нескольким абонентским узлам, а затем каждый из этих узлов пересылает сообщения своим детям и так далее. Поскольку пакеты из случайных узлов в сети Pastry, предназначенные для одного и того же узла, часто в конечном итоге путешествуют по одному и тому же пути очень рано в своем путешествии, они в конечном итоге присоединяются к той части дерева, которая ближе всего к ним в сети Pastry. Поскольку каждый прыжок по маршруту выпечки представляет собой то, что является лучшим маршрутом в соответствии с используемой метрикой маршрутизации, сообщение о подписке ищет ближайшую часть дерева и прикрепляется к нему. Наконец, допустимость ошибок среди участников распределительного дерева достигается за счет использования тайм-аутов и кепалей, при этом фактическая передача данных удваивается, чтобы свести к минимуму трафик. Если дочерний узел не слышит от своего родителя какое-то время, он направляет новое сообщение подписки к корневому узлу дерева, присоединяясь к нему, где бы он ни столкнулся с деревом для этой темы. Если родитель не слышит от ребенка в течение периода тайм-аута, он вычеркивает ребенка из списка детей. (Если это действие приводит к тому, что его список детей становится пустым, родитель перестает действовать в качестве передатчика.) Единственная оставшаяся точка отказа - это точка корневого узла, и сама Pastry автоматически преодолевает это. Поскольку Пастер дублирует ключи среди нескольких узлов, наиболее близких к фактическому значению ключа, у корневого узла уже есть зеркала, лежащие в состоянии покоя. Если корневой узел выходит из строя, опять же обнаруженный через тайм-ауты, следующий ближайший узл Pastry начнет действовать как корневой узел. Когда создатель темы пытается опубликовать новый материал, старый корневой узел будет недоступен. Затем издатель будет возвращаться в сеть Pastry и использовать ее для маршрутизации своего сообщения о публикации в новый корневой узел. После этого издатель кэширует копию IP-адреса нового корневого узла, чтобы уменьшить использование сети Pastry для будущих передач.