Математическая модель эффективных алгоритмов поиска и размещения данных в децентрализованной распределенной файловой системе

УДК 004.056

А.Г. Сметанин, А.Г. Тормасов математическая модель эффективных алгоритмов

поиска и размещения данных в децентрализованной

распределенной файловой системе

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

Ключевые особенности, которыми должны обладать такие технологии:

• децентрализация - форма системы коллективных узлов без координации;

• масштабируемость - система будет одинаково эффективно функционировать при тысячах или миллионах узлов;

• отказоустойчивость - система будет одинаково надежна (в некотором смысле) с узлами, постоянно включающимися, выключающимися и выдающими ошибки.

• мобильность доступа - система должна быть доступна с тем же качеством из любой географической точки мира;

• расширяемость - новые вычислительные узлы с легкостью добавляются в систему;

• безопасность - авторизация доступа, контроль доступа, контроль целостности, защита от несанкционированных вторжений извне;

• изоляция - данные пользователя должны быть изолированы от всех других данных.

К облачным технологиям хранения данных относят различные системы, использующие разнообразные алгоритмы поиска и размещения данных:

облачные хранилища (Amazon S3, EMC At-mos, OceanStore);

распределенные файловые системы (GFS, Lustre, Ceph, HDFS);

децентрализованные распределенные файловые системы (FreeNet, Tahoe-LAFS);

p2p системы обмена файлами (BitTorrent, Gnutella).

В данной статье рассматриваются p2p децентрализованные файловые системы, в которых алгоритм поиска и размещения данных реализован с помощью DHT (Distributed Hash Table - «распределенная хеш-таблица»). В дальнейшем под термином децентрализованная распределенная файловая система будет подразумеваться децентрализованная распределенная файловая система в классе p2p DHT.

DHT - это класс децентрализованных распределенных систем, которые обеспечивают поисковый сервис, похожий по принципу работы на хеш-таблицу, и имеют структуру ассоциативного массива: (ключ, значение), хранящиеся в DHT, а каждый участвующий узел может рационально искать значение, ассоциированное с данным именем. Ответственность за поддержку связи между именем и значением распределяется между узлами. Таким образом, изменение набора участников является причиной минимального количества разрывов. Это позволяет легко масштабировать DHT и постоянно отслеживать добавление/удаление узлов и ошибки в их работе. Примеры DHT систем: Chord [1], Pastry[2], CAN [3], Tapestry [4].

Однако у DHT систем есть недостатки, связанные с тем, что данные, которые размещаются в системе, жестко привязаны к узлам системы.

Chord [1] присваивает идентификаторы узлам и блокам данных из одного одномерного пространства идентификаторов. Узел, который отвечает за хранение блока данных, является узлом, идентификатор которого наиболее близок к идентификатору блока данных.

Pastry [2] присваивает каждому узлу случайный идентификатор, который определяет позицию узла во множестве идентификаторов с круговой топологией. Для поиска блока данных по его идентификатору поисковый запрос отсылается узлу с идентификатором, наиближайшим к идентификатору блока данных.

CAN [3] использует и-мерное пространство декартовых координат для осуществления DHT

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

Tapestry [4] осуществляет поиск блока данных по его идентификатору, сравнивая определенные биты идентификатора с определенными битами идентификатора узла, поисковый запрос отсылается тому узлу, битовое совпадение с которым наилучшее.

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

Лишенная этих недостатков распределенная система рассмотрена в [6]. Предлагаемая система имеет три основных свойства. Во-первых, данные единицы образуют сеть типа «малого мира», гарантирующую, что любой блок данных доступен из любого другого блока данных за небольшое количество шагов. Это помогает быстро найти любой блок данных, начиная с любого другого блока данных. Во-вторых, все блоки данных упорядочены и задана метрика (расстояние) между двумя блоками данных. Это позволяет построить систему таким образом, что простой жадный алгоритм поиска может использоваться для поиска любого блока данных. В-третьих, блоки данных не привязаны к конкретным узлам, а топология системы основана на графе блоков данных, а не на графе узлов, как, например, в случае DHT (Chord) [1].

В работе [6] не рассмотрены вопросы обеспечения отказоустойчивости системы в том случае, если узлы системы склонны выключаться на время, что вполне реально при практическом применении.

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

Моделирование поиска и размещения данных в распределенной файловой системе

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

«Малый мир» - это тип связного графа, в котором каждая вершина достижима из любой другой за малое количество шагов порядка log(N), где N - число вершин графа, при этом любая вершина не обязана соседствовать с другой напрямую. Существует множество работ, описывающих свойства «малого мира», мы рассматривали работу [6], в которой описаны эффективные алгоритмы поиска данных в «малом мире». За основу взята эта модель, т. к. она обладает следующими важными свойствами:

коротким путем от одной вершины графа к любой другой, пропорциональным log(N), где N - число вершин графа [6];

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

Модель «малого мира» предполагает, что вершины графа не будут удаляться или добавляться слишком часто. Тем не менее компьютеры (участники распределенной системы) могут появляться и удаляться значительно чаще, чем предполагается в модели [6]. Для того чтобы сгладить данное явление, компьютеры объединяются в небольшие группы, а сами группы объединяются в граф «малого мира». Группы компьютеров хранят информацию о данных распределенной

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

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

Рассмотрим и компьютеров, объединенных в одну группу. Считая что компьютер работоспособен (доступен) с вероятностью p, можно оценить работоспособность группы, как вероятность того, что хотя бы один из компьютеров группы включен:

Pg = 1 -

Например, пусть p = 0,5, уже при и > 5 вероятность Pg > 0,96875 и близка к единице, что и позволяет объединить группы в «малый мир» и воспользоваться его свойствами.

Нами предложена математическая модель, описывающая алгоритмы поиска и размещения данных в описанной распределенной системе. Модель описывает систему, состоящую из двухуровневой сети «малого мира»: первый уровень состоит из групп узлов, образующих сеть, аналогичную [6]; нижележащий второй уровень состоит из блоков данных, также образующих сеть типа [6]. Маршрутизация между двумя блоками данных, не лежащих в одной группе, строится с помощью маршрутизации на уровне групп узлов.

Модель системы состоит из следующих частей:

1) модели одного узла - близкие по географической метрике узлы системы объединяются в группы узлов;

2) модели группы узлов - группы узлов образуют т. н. «small world» структуру [6], когда каждая группа связана лишь с небольшим количеством других групп;

3) модели (и, к)-схемы [7] преобразования данных для обеспечения сохранности данных;

4) модели кэширования данных - миграции и дупликации данных внутри распределенной системы для более эффективной работы с точки зрения расхода ресурсов.

Математическая модель поиска и размещения информации

В нашей модели данные хранятся в виде пар: ключ и соответствующее ключу значение. Зададим множество уникальных ключей К. Пары ключ-значение в распределенной системе хранятся на серверах системы, а сами серверы системы объединяются в группы. Для простоты будем считать, что потери на коммуникацию между серверами внутри группы незначительны в сравнении с потерями на коммуникацию между группами. Тогда будем считать, что ключи лежат внутри групп серверов, пропуская уровень серверов в нашей модели.

Определение 1. Множество ОиЮ - множество уникальных целых чисел из числового отрезка [2127 , 2128 -1].

Алгоритм генерации уникальных 128-битных идентификаторов известен и описан в работе [8] (версия 4). Можно оценить для этого алгоритма вероятность того, что два сгенерированных идентификатора совпадут, с учетом «парадокса дней рождений» [9], приближенной формулой:

п2

р(п)«1 - ехР(-— х

2 х

где п - число сгенерированных идентификаторов; х = 2122, где 122 - число бит в алгоритме, генерируемых случайным образом. Например, при п = 236 « 6,9*1010,/> « 4*10-16. Хотя уникальность каждого отдельного идентификатора не гарантируется, будем считать, что генерируемые идентификаторы уникальны. Для упрощения считается, что существует функция gen_gшd0, которая возвращает уникальный, ранее не использовавшийся идентификатор из множества ОиЮ.

Определение 2. Ключом к системы называется кортеж (1с1, й^а, gid), где е ОиЮ, data е В, В - множество слов из алфавита {0,1}, gid е ОиЮ.

Будем в дальнейшем обозначать для ключа к, что клй - идентификатор ключа; k.data - данные ключа; k.gid - идентификатор группы, к которой относится данный ключ.

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

Определение 3. Группа ключей g системы называется кортеж (id е ОиЮ, квуя а К).

Будем в дальнейшем обозначать для группы g, что g.gid - это идентификатор группы.

Зададим два множества - множество уникальных ключей К и множество групп О. Будем

считать, что множество групп G состоит из групп ключей, так что никакие две группы не имеют общих ключей. Далее введем неориентированный граф ключей системы - Gk (Vk Ek), Vk с K и неориентированный граф групп системы -

G (V E ),V с G.

g v g, g'' g

Введем функцию M:

M : GUID x GUID ^ Z+, Z + - множество целых положительных чисел

M(x,y) = \x - y\, где x - y - арифметическое вычитание целых чисел; |x - y| - взятие модуля целого числа.

На множестве групп определим функцию Mg - метрика близости групп по их идентификаторам:

M : V x V ^ Z+

g g g

Mg (gx , gy ) = | gx id - gy id\ , где gx , gy e Vg .

На множестве ключей определим функцию Mk - метрика близости ключей по их идентификаторам:

Mk : Vk x Vk ^ Z+

Mk (kx,ky) = |kx id - ky .id|,

где kx , ky e Vk .

Лемма 1 Функции Mg (gx, gy),Mk (kx, ky) удовлетворяют аксиомам метрики:

1. Mg (gx, gy) = 0 о gx = gy

и Mk (kx, ky) = 0 о kx = ky .

2. Mg (gx, gy) = Mg (gy, gx) и Mk (kx, ky) = Mk (ky, kx).

3. Mg (gx,gz) <Mg (gx,gy) + Mg (gy,gz) и Mk (kx, kz) < Mk (kx, ky) + Mk (ky, kz).

До казательство. Доказательство следует из свойств арифметического вычитания и модуля целых чисел.

Для ключей и групп из графов Gk (Vk, Ek), Gg (Vg, Eg) определим функции neighbours, successor, predecessor, nearest следующим образом:

neighbours(x) = Г+ (x), где Г+ (x) - множество смежности вершины x. successor( x, id) = = z ёГ+ (x): M(z.id, id) = min(M(y.id, id)), Vy e Г+ (x): yid > id.

predecessor( x, id) = = z e Г+ (x): M (zid, id) = min(M (yid, id)), Vy e Г+ (x): yid < id. nearest( x, id) = = z e Г+ (x): M (zid, id) = min(M (y.id, id)), Vy e Г+ (x).

Приведем описание алгоритмов добавления и поиска ключа/группы в систему в виде пседокода.

Алгоритм поиска группы по ее идентификатору. Поиск группы реализован как последовательное приближение к группе с идентификатором, равным искомому. Для этого на каждом шаге алгоритма из соседей текущей группы выбирается сосед с идентификатором ближе по метрике к искомому идентификатору и осуществляется переход в эту соседнюю группу. Алгоритм итеративно повторяется до достижения цели. group_nearest_search(curr_g, id): #curr_g - любая группа, уже находящаяся в графе групп

#id - идентификатор группы, по которому требуется найти группу

1. d = M

2. if d = 0 return curr_g

3. nearest_g = nearest

4. if M(nearest_g.id, id) < d : curr_g = nearest_g; goto 1;

5. return nearest_g

Алгоритм добавления новой группы. Для

добавления новой группы в граф достаточно найти группу с идентификатором, ближайшим к идентификатору новой группы, затем у этой ближайшей группы найти соседа который является predecessor или successor для новой группы, далее связать эти две группы с новой: group_append(curr_g, new_g): #curr_g - любая группа, уже находящаяся в графе групп

#new_g - новая группа, которую необходимо добавить в граф групп

1. new_g.id = gen_guid

2. nearest_g = group_nearest_search

3. if nearest_g.id = new_g.id return ALREADY_ EXISTS

4. if nearest_g.id < new_g.id: neighbour = successor

5. else: neighbour = predeccessor

6. mutually connect new_g and neighbour

7. mutually connect new_g and nearest_g

8. return SUCCESS

Алгоритм поиска ключа по его идентификатору. По аналогии с группами строится граф ключей. Ключи связаны между собой близкими по метрике идентификаторами, и для поиска достаточно переходить от одного ключа к другому с идентификатором, более близким к искомому, пока не будет найден искомый или наиближайший. Отличием является то, что следующий в пути поиска ключ может находиться в другой группе, и эту группу надо найти в графе групп по ее идентификатору: key_nearest_search(curr_g, id): #curr_g - любая группа, уже находящаяся в графе групп

#id - идентификатор ключа, по которому требуется найти ключ

1. curr_k = curr_g.keys[0]

2. d = M

3. if d = 0 return curr_k

4. nearest_k = nearest

5. if M(nearest_k.id, id) >= d: return nearest_k

6. if nearest_k not in ran^:

7. curr_g = group_search

8. return key_nearest_search

9. else: curr_k = nearest_k; goto 2 Алгоритм добавления нового ключа. Для

добавления нового ключа в систему достаточно найти ключ с идентификатором, ближайшим к идентификатору нового ключа, затем у этого ближайшего ключа найти соседа, который является predecessor или successor для нового ключа, и связать эти два ключа с новым: key_append(curr_g, new_k): #curr_g - любая группа, уже находящаяся в графе групп

#new_k - новый ключ, который необходимо добавить в граф ключей

1. new_k.id = gen_guid

2. nearest_k = key_nearest_search

3. if nearest_k.id = new_k.id return ALREADY_ EXISTS

4. if nearest_k.id < new_k.id: neighbour = successor

5. else: neighbour = predeccessor

6. mutually connect new_k and neighbour

7. mutually connect new_k and nearest_k

8. return SUCCESS

Далее докажем, что приведенные выше алгоритмы корректно и эффективно работают.

Определение 4. Предыдущим ключом p по

отношению к ключу к называется такой ключ р, что p.id < k.id: р е Г+ (к).

Последующим ключом 5 по отношению к ключу к называется такой ключ 5, что s.id > k.id: 5 е Г+ (к).

Предыдущей группой р по отношению к группе g называется такая группа р, что рМ < gid: р е Г+ (g).

Последующей группой 5 по отношению к группе g называется такая группа 5, что s.id > g.id: 5 е Г+ (g).

Определение 5. Множество КвуМ5 = к .id.

Множество ОгвырЫ5 = ^ g.id.

Определение 6. Максимальным по идентификатору ключом из множества Ук с Ок (¥к, Ек) называется ключ Кж так0й, что = ШаХЫеКеуКЬ .

Минимальным по идентификатору ключом из множества Ук с Ок (¥к, Ек) называется ключ кт[п ,

та^ что ктш^ = Ш1ПиеКеуЫ, .

Максимальной по идентификатору группой из множества Vг с V, Е^) называется группа

gmax , TаKаЯ, что gш^.id = ШаХ¡¿евгоирЫ,

Минимальной по идентификатору группой из множества Vг с V, Е^) называется группа

gIшn , такая, что = Ш1П иеОоирЫ. -

Лемма 2

1. Ук : кеУк\{кш1П,кшах} с Ок (¥к,Ек) существуют последующий и предыдущий ключи по отношению к ключу к.

2. У ключа кш1п е Ук с Ок (Ук, Ек) существует последующий ключ по отношению к ключу кт1п .

3. у ключа кшах е Ук с вк (Vk, Ек) существует предыдущий ключ по отношению к ключу ктах.

Доказательство. Следует из построения графа Ок (V, Ек), непосредственно из процедуры key_append. Для вставки нового ключа процедура key_append проходит по вершинам графа в поисках места, где новый ключ станет соседом двух вершин или одной вершины. В случае двух вершин эти вершины являются предыдущим и последующим ключами по отношению к новому ключу. Случай нахождения одной вершины-соседа - это случай, когда вставляемый ключ будет являться кт1П либо ктах.

Лемма 3

1 Vg : gеVg \ {g Ш1П , gmax} с О V, Е ) существуют последующая и предыдущая группы по отношению к группе g.

2. У группы gшт еУ!, с Ов V, Е!,) существует последующая группа по отношению к группе

3. У группы §тах с , Е§) существует предыдущая группа по отношению к группе £тах.

Доказательство. Следует из построения графа (Г , Е§), непосредственно из процедуры group_append. Для вставки новой группы процедура group_append проходит по вершинам графа в поисках места, где новая группа станет соседом двух вершин или одной вершины. В случае двух вершин эти вершины являются предыдущим и последующим группами по отношению к новой группе. Случай нахождения одной вершины-соседа - это случай, когда вставляемая группа будет являться £тп либ° £тах.

Определение 7. Б(кх, ку) - функция расстояния между ключами системы определена на множестве ключей и равна числу межгрупповых переходов в процедуре key_nearest_search, то есть числу вызовов group_search в key_nearest_search.

Таким образом,

В{кх, ку) = 0 , если кх = ку.

В(кх, ку) = 0, если кх = ку , то есть принадлежат одной группе.

Теорема 1 Укх ф ку : кх, ку е Ок (УкЕк) верно,

что

1) существует путь от ключа кх до ключа ку;

2) путь от ключа кх до ключа ку конечен;

3) если идентификаторы ключей и групп, которые добавлялись последовательно в систему, равномерно распределены на множестве ОиЮ, то длина пути - В(кх, ку) ~ К |)).

Доказательство. Докажем п. 1. Для любого ключа к ф к существует ключ х е Г+ (к), который ближе по метрике М к к . Действительно, в качестве такого ключа х для ключа к мы можем выбрать его предыдущий ключ или последующий ключ на основе леммы 2. Таким образом, можно построить путь от любого ключа к ф ку к ключу к, в том числе путь от к до к . Если к < к ,

у х ^ у х у '

то мы можем построить путь кх, к1, км,

. kN , ky

такой, что kx.id < kt.id <k+1.id <... < kN.id < ky.id .

Иначе

k_ .id > ky .id,

и мы

строить путь

k ,k.,k.+,, ..., k,,,k

x? i? i+1' ' N' y

можем по-такой, что

кх .id > к1 .id >к++1 id >... > ки .id > ку .id .

Докажем п. 2. Из доказательства п. 1, построенный путь будет конечен, т. к. последовательность идентификаторов ключей, проходимых в построенном пути, конечна. Действительно, на отрезке [кх .id, ку .id] найдется лишь конечное число идентификаторов ключей, т. к. сами идентификаторы уникальны и являются целыми положительными числами. В построенном пути ни

один из ключей не встречается дважды.

Докажем п. 3. Вычисление длины пути от k до ky упрощается, если рассматривать межгрупповой путь от группы, к которой принадлежит k, до группы, к которой принадлежит ky. К такому упрощению можно перейти из определения функции D(kx, ky): из того факта, что путь между ключами одной группы равен нулю. Следовательно, длина пути D(kx, ky) равна длине межгруппового пути от группы, к которой принадлежит kx, до группы, к которой принадлежит ky. Граф групп Gg (Vg, Eg) аналогичен структуре, описанной в [6], причем выполняются те же самые предположения относительно распределения входных данных. В работе [6] доказывается, что длина пути от одной вершины структуры до другой ~ 0(log(#)), где N - число элементов структуры. Для аналогичного графа Gg (Vg, Eg) справедлива такая же оценка длины пути. Следовательно, D(kx, ky)~ 0(log(| Vg |)).

Результаты имитационного моделирования

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

Цель имитационного моделирования - подтверждение полученных математических оценок длины пути поискового запроса. Для этого провели измерения длины пути поискового запроса в зависимости от числа групп.

Алгоритм проведения испытания следующий.

1. Пусть число групп 2, число ключей 1024.

2. Создается заданное количество групп, которые объединяются в сеть «малого мира». Идентификаторы групп генерируются c помощью функции gen_guid(). Считаем, что качество используемого генератора случайных чисел приемлемо для эксперимента.

Средняя длина пути запроса search, число серверов = 1024, число ключей=1024

Длина 80 пути (hops бо count) 40

-экспер.

-теор.

2 4 8 16 3 2 64 128 256 512 1024

Число групп

Рис. 1. Зависимость длины пути запроса search от числа групп в системе

4

3. В каждой группе размещается заранее заданное количество ключей (для каждой группы одинаковое число ключей), которые объединяются в сеть «малого мира». Число ключей, размещаемых в каждой группе, равно (число ключей)/ (число групп). Идентификаторы генерируются с помощью функции gen_gшd().

4. Далее случайным образом выбираются два различных ключа в системе. С первого ключа запускается поиск второго ключа по его идентификатору. Записывается длина пути запроса.

5. Повторяем с шага 3 сто раз для различных пар ключей.

6. Усредняем по числу запросов длину пути запроса.

7. Если число групп не превышает число ключей, то удваиваем число групп и переходим к шагу 2. Если число групп превышает число ключей, то измерения закончены.

На графике (рис. 1) приведены результаты измерения длины поискового запроса в зависимости от числа групп в системе. Видно, что длина поискового запроса (длина пути от одного ключа к другому) в среднем логарифмически зависит от числа групп в системе.

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

Число серверов

Рис. 2. Зависимость длины пути запроса search от числа серверов в системе

Предложена модель распределенной системы, построенная как двухуровневая сеть «малого мира», первый уровень которой состоит из групп узлов, образующих сеть, аналогичную [6], нижележащий второй уровень состоит из блоков данных, также образующих сеть типа [6]. Изучены алгоритмы поиска и добавления данных, а также поиска и добавления узлов системы.

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

Разработан комплекс программ, реализующий имитационную модель системы, проведены эксперименты по измерению длины поискового запроса в системе. Установлено, что экспериментальные результаты соответствуют полученной оценке длины поискового запроса.

СПИСОК ЛИТЕРАТУРЫ

1. Stoica, I. Chord: A Scalable Peer-to-peer Lookup Service for Internet Applications [Text] / I. Stoica, R. Morris, D. Karger [et al.] // Proc. ACM SIGCOMM, Aug. 2001.

2. Owstron, A. Pastry: Scalable, distributed object location and routing for large-s cale peer-to-peer systems [Электронный ресурс] / A. Owstron, P. Druschel // In Proc. of the 18th IFIP/ACM International Conf. on Distributed Systems Platforms (Middleware 2001), Nov. 2001.

3. Ratnasamy, S. A scalable contentaddressable network [Text] / S. Ratnasamy, P. Francis, M. Handley [et al.] // In Proc. ACM SIGCOMM. -San Diego, CA, Aug. 2001. -P. 161-172.

4. Hildrum, K. Distributed Object Location in a Dynamic Network [Электронный ресурс] / K. Hildrum, J.D. Kubatowicz, S. Rao [et al.] // In Proc. 14th ACM Symp. on Parallel Algorithms and Architectures, Aug. 2002.

5. Watts, Duncan J. Collective dynamics of 'small-

world' networks [Электронный ресурс] / Duncan J. Watts, H. Steven Strogatz. -June 1998. -Nature 393 (6684). -P. 440-442.

6. Krylov, V. Metrized Small World Properties Data Structure [Электронный ресурс] / V. Krylov, A. Logvinov, A. Ponomarenko, D. Ponomarev // Proc. Software Engineering and Data Engineering, SEDE 2008.

7. Тормасов, А.Г. Обеспечение отказоустойчивости в распределенных средах [Текст] / А.Г. Тормасов, М.А. Хасин, Ю.И. Пахомов // Программирование. -2001. -№ 5. -С. 26-34.

8. RFC 4122, A Universally Unique IDentifier (UUID) URN Namespace [Электронный ресурс] / Режим доступа: http://www.ietf.org/rfc/rfc4122.txt

9. Klamkin, M. Extensions of the Birthday Surprise [Text] / M. Klamkin, D. Newman // J. of Combinatorial Theory 3. -1967. -P. 279-282.