Модель распределенного хранения данных с регулируемой избыточностьтю

МОДЕЛЬ РАСПРЕДЕЛЕННОГО ХРАНЕНИЯ ДАННЫХ С РЕГУЛИРУЕМОЙ ИЗБЫТОЧНОСТЬТЮ.

Тормасов А.Г. , М.А. Хасин (hma@prbank.ru), Ю.И. Пахомов

Московский физико-технический институт

В статье рассматривается модель распределенного представления данных, основанная на применении (N, k) - пороговой схемы. Файл хранится в виде (N, к)-пороговой схемы, имеющую геометрическую интерпретацию. Файл представляется в виде последовательности k-мерных векторов над полем GF(2n), а каждая из частей схемы является последовательностью проекций этих векторов на некоторый выбранный для данной части k-мерный вектор над GF. Избыточность данных регулируется путем создания новых частей или удаления существующих. Приведены различные реализации модели. Исследуется эффективность их использования для обеспечения доступности (availability) в системах управления Internet -ресурсами.

1. Введение

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

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

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

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

• Аппаратные: Shared-Memory Multiprocessing, кластеры, КЛГО-массивы[1], Shared-Nothing Multiprocessing, Server Net Architecture [8]. В этих технологиях

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

• Операционные: MS .Net, NonStop UX System Architecture [8]. Здесь надежность обеспечивается путем усложнения алгоритмов работы системных вызовов операционных систем.

• Прикладные: MS Cluster[11], Error Detection/Correction Codes[5],[6], метод "зеркала" (mirrors), Server Load Balancing [9] и др. В этих технологиях задача решается путем разработки специальных протоколов и механизмов взаимодействия прикладных программ с OS.

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

Рассмотрим, например технологию RAID, которая первоначально была создана для увеличения скорости чтения/записи на магнитные носители путем их распараллеливания. Основная идея заключается в том, что входной поток информации делится на блоки, которые, в свою очередь, записываются на диски. При считывании происходит обратный процесс - блоки собираются с накопителей и преобразовываются в единый поток. В зависимости от способа распределения блоков различают несколько уровней RAID, с нулевого по пятый. (Наиболее распространены 0,1 и 5 уровни).

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

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

RAID5 - этот алгоритм представляет собой что-то среднее между нулевым и первым. Порция информации из входного потока разделяется на N-1 блоков, а N-й блок вычисляется из N-1 первых и является контрольным. В случае потери одного из N блоков, информация однозначно восстанавливается из N-1 других. Контрольный блок каждый раз от цикла к циклу записываются на новый диск. Теоретическая скорость записи/чтения увеличивается в N/N-1 раз.

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

Аналогичная проблема восстановления данных возникает при решении задачи обеспечения надежности передачи информации по каналам связи. Для этих целей используются алгоритмы исправления ошибок (Error Correction Codes, ECC) и обнаружения ошибок (Error Detection Codes, EDC).[5],[6]. Оба они заключаются в

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

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

Среди существующих технологий, обеспечивающих отказоустойчивость Internet-ресурсов, следует отметить технологию SLB (Server Load Balancing), задача которой обеспечить масштабируемость серверов, предоставляющих различные Internet-сервисы (Web,DNS,FTP). Суть его заключается в том, что несколько тесно связанных серверов объединяются в один виртуальный сервер и клиентские запросы распределяются между ними. Такой подход предполагает, что клиенты всегда обращаются к IP-адресу виртуального сервера, а функция SLB выбирает реальный сервер для обслуживания запроса клиента.

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

Кроме вышеописанной технологии SLB, в существующих системах часто применяется технология "зеркала". Создаются несколько идентичных серверов, дублирующих друг друга. Для доступа к информации, пользователю достаточно подсоединится к "ближайшему" c зрения доступности серверу. Недостатками данной технологии является необходимость многократного дублирования хранилищ данных, что требует существенных ресурсов для построения больших систем, и потребность пользователю самостоятельно определять "ближайший" к себе сервер.

В данной статье рассматривается метод распределенного хранения данных, который может быть использован для обеспечения доступности информационной системы в условиях неравномерной загруженности сети и неравномерного распределения в ней информации. Метод основан, на представлении файла в виде (N, k) - пороговой схемы, которая позволяет представить файл в виде n частей (n < N), таким образом, что пользователю достаточно иметь доступ к любым k них, чтобы собрать весь файл целиком. (N, k) - пороговые схемы были разработаны независимо Эди Шамиром [12] и Бобом Блэкли [13]. Задачей этих схем являлось обеспечение безопасного хранения секретной информации. Никакие k-1 из существующих частей не представляют абсолютно никакой информации (в смысле теории информации Шеннона) относительно исходных данных. Рассматриваемая ниже (N, k) - пороговая схема отличается от алгебраической схемы Шамира и геометрической схемы Блэкли. Ее задача обеспечить минимальное увеличение размера частей, необходимых для сборки файла по сравнению с размерам исходного файла. Кроме этого число N должно быть достаточно велико, чтобы обеспечивать доступность ресурса при интенсивном его использовании.

2. Модель распределенного представления данных.

2.1 Для чего хранить файл в виде (N, &)-пороговой схемы.

Каждый файл предлагается хранить в виде некоторого набора частей (кусков), количество которых может меняться во времени, однако всегда в любой момент времени для существующих в системе частей выполняется условие, что из любых k частей можно полностью собрать файл. Это условие будем называть далее условием избыточности. Размер каждой части ~ 1/k от размера хранящегося файла. Количество частей файла - n, содержащихся в системе может меняться в зависимости от ее конфигурации, от количества компьютеров в ней, интенсивности работы с данным файлом и т.д. Причем, при изменении (увеличении) числа n уже существующие части никак не изменяются, то есть новые части строятся таким образом, чтобы по-прежнему выполнялось условие избыточности.

Число k является фиксированным для каждого конкретного файла и зависит от его размера. При использовании протокола TCP/IP [10], который де факто является основным в существующих сетях, скорость передачи данных максимальна, когда их размер соответствует размеру пакета протокола (message transfer unit), что составляет ~1Kb. Таким образом, размер каждой части должен быть ~ 1Kb. То есть для файла размера S число k определяется по формуле k=S/Sp , где Sp - размер пакета протокола TCP/IP. Средний размер Internet ресурсов ~5-7 Kb. В следующих разделах будет показано, что сложность алгоритма сборки файла пропорциональна k и размеру файла, поэтому при исследовании производительности мы будем считать k=5.

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

В Компьютеры сети

соседство

запрос на поиск кусков

Компьютеры

сети с частями —

запрашиваемой

версии нужного файла

> удовлетворение запроса

РИС. 1

На рисунке показано удовлетворение пользовательского запроса на чтение файла при к=3. Для удовлетворения запроса пользователь будет получать к "ближайших" с точки зрения загрузки в данный момент сети и пропускной способности каналов связи, что обеспечивает минимальное время удовлетворения запросов. Запросы на поиск кусков в системе служат для мониторинга интенсивности использования данного файла. Для этого каждый из серверов хранит историю запросов прошедших через него.

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

2.2 Описание к) - пороговой схемы.

Рассмотрим конечное поле Р = ОБ^Ы) (поле Галуа, состоящее из N элементов). Конечные поля существуют для количества элементов равного степени простого числа. [2],[7](Как вводятся операции сложения и умножения в полях ОБ^), будет описано ниже). Все элементы поля можно занумеровать числами от 0 до N-1. Так как файл это последовательность бит, то для N=2n любой файл можно представить в виде последовательности п-битных кусочков, соответственно в виде последовательности элементов Р. Кроме того для простых N близких по значению к степеням 2, например 251 (близко к 256=28 ) или 65521 ( близко к 65536=216 ), файл также легко представляется виде последовательности элементов поля Р, для этого он представляется в виде последовательности п-битных частей (п-соответствующая степень двойки, так что 2п близко по значению к N причем, если какая-нибудь из п-битных частей представляет собой число >= N то из него вычитается N и оно также становится элементом поля Р. В этом случае к преобразованному файлу мы должны приложить номера частей, к которым необходимо прибавить N чтобы получить исходный файл. При этом можно считать, что размер файла сильно не увеличится, например, в случае равновероятного распределения бит в файле при N=251 преобразование придется производить только для 5/256~2% байтов файла, а при N=65521 - для 0.02% байтов.

Рассмотрим теперь к-мерное пространство векторов Ь над полем Р. Каждый элемент этого пространства - это к элементов поля Р. Теперь каждый файл можно представить в виде последовательности векторов из Ь. (Если количество бит в файле не кратно кп, то дополняем его нулевыми битами до ближайшего числа, делящегося на кп). Пусть есть файл который представляет собой последовательность векторов 11, 12, ... 1т из Ь. И пусть есть набор Е из п векторов из Ь: Е={е19е2,... еп}. Причем этот набор такой, что любые к из них образуют базис в Ь. Тогда каждому вектору е( из Е можно поставить в соответствие часть:

(11 , ( 12 , е^ , ... ( 1т , е^ , где (^ - скалярное произведение векторов ^ и е1. Скалярное произведение любых двух векторов из Ь есть элемент из Р. Поэтому размер такого куска равен п бит. Размер же исходного файла равен т*кп бит. Т. е. размер каждой из полученных частей равен тп, то есть 1/ к от размера самого файла.

Пусть у нас есть теперь произвольные k частей из построенного набора. Обозначим вектора, которым соответствуют части, через е1, £2,... £k, а сами части через Е1, Е2,... Ek, По условию набора Е, эти вектора образуют базис в L. Поэтому матрица А размером k x k, строки которой - вектора е1, £2,... £k, имеет обратную, которую мы обозначим через A-1. Тогда All - столбец, состоящий из i-тых элементов всех кусков. Обозначим такой столбец через Sl. Т.е. для любого icz [1,m] : ll = A-1 Sl. Таким образом, мы можем из этих частей восстановить исходный файл. (Естественно, к каждой части должна быть приложена информация о порождающем ее векторе + информация об исходной длине файла - для того, чтобы отбросить потом добавленные нулевые байты).

Следует отметить, что при таком способе представления данных, для получения фрагмента файла ll нет необходимости прибегать к сборке всего файла. Мы можем собрать только необходимый фрагмент: ll = A-1 Sl. Размер ll составляет kn бит, что при k~5 и n =8,16,32 составляет несколько байт. Таким образом, существует возможность неполного восстановления файла, обусловленная запросом чтения/записи конкретного участка файла (диапазона байт). Это может оказаться существенной для асинхронной работы процессов, взаимодействующих с файловыми системами.

Итак, для решения задачи нам осталось просто указать алгоритм построения набора векторов, любые k из которого образуют базис. Для каждого ненулевого элемента p поля P строим вектор (1,p,p2 ... pk). Таким образом, мы можем построить N-1 вектор. Любые k из них образуют базис - детерминант образуемой ими матрицы - определитель Вандермонда, который равен нулю только, когда некоторые из знаменателей прогрессий совпадают. Указанным способом мы легко строим набор из N-1 векторов, любые k из которых образуют базис. Для того, чтобы описать вектор, по которому построена часть, достаточно задать знаменатель прогрессии, который занимает n бит.

2.3 Варианты реализации алгоритмов сборки/разборки файлов.

В данной секции рассматриваются варианты реализации алгоритмов сборки/разборки в различных GF(N). (N=65521, N=216) на процессоре Celeron 450.

Перед тем как приступить к построению различных вариантов реализации предлагаемого алгоритма, необходимо описать, как строится поле Галуа для N элементов.

Проще всего поле строится для случаев, когда само N является простым числом. В

этом случае обычные операции сложения и умножения по модулю N поле. Оценим

производительность такого алгоритма при N=65521. В этом случае количество кусков

ограничено числом 65520, что достаточно даже для больших распределенных систем, где

количество компьютеров исчисляется тысячами. Пусть s - размер файла (в байтах),

количество кусков из которых необходимо собирать файл, как и ранее обозначим через k.

Размер одной части будет s/k. Операция обращения матрицы выполняется один раз и не

зависит от s ( состоит из ~k операций умножения и сложения), поэтому на оценку

производительности не влияет. На сборку файла уйдет s/2k - кратное выполнение -1 2 операции A Sl. На выполнение такой операции уйдет k операций умножения и сложения

в поле Галуа, что представляет собой k2 операций обычного сложения и обычного

умножения и 2k операции % (вычисление остатка от деление на N). При этом, используя

тот факт, что регистры в процессоре Celeron 32-битные и

k < N<216 (то

есть сумма k

32

двухбайтных чисел есть число

операцию % можно выполнять не при каждом сложении, а один раз после суммирования произведений строки и столбца. Тогда всего количество операций % будет k + k. В итоге получим - sk/2 операций сложения и умножения, и sk/2+s/2 операций %. Учитывая, что по данным Intel [4] для процессора Celeron - имеем:

Операция Число тактов на выполнение

Сложение 1

Умножение 11

% (целочисленное деление) 46

и положив, s = 1 000 000 (мегабайт), а k=5, получим, что на сборку 1 МБ уйдет 171 000 000 тактов. То есть для Celeron 450 получаем скорость ~ 3МБ/сек. Тестовая программа, написанная на Visual C++ 5.0 подтверждает данный результат.

Рассмотрим теперь поля Галуа для N=2n. Стандартное представление такого поля -многочлены степени не выше n-1, коэффициенты которых - элементы поля GF(2) остатков от деления на 2 (то есть 0 или 1). Для того, чтобы задать такой многочлен, нужно задать n коэффициентов (0 или 1 - то есть битов) при xn-1, xn-2,...x, 1. То есть каждый n-битный элемент задает такой многочлен. Сложение и умножение таких многочленов происходит по остатку при делении на произвольный неразложимый многочлен степени n над полем GF(2). Выбор такого многочлена p(x) обусловлен исключительно удобством реализации алгоритма Эвклида для вычисления остатка от деления на него. Таким образом, сложение таких многочленов - это просто операция XOR над соответствующими n-битными элементами. Умножение же можно разложить на два этапа: первый - это последовательность сдвигов и XOR-ов (фактически обычное умножение в котором, сложение заменено операцией XOR), а второй - поиск остатка от деления получившегося после первого этапа многочлена, в общем случае степени 2n-2, на многочлен p(x). Второй этап также реализуется последовательностью сдвигов и XOR. Деление прелагается реализовать как операцию обратную умножению - для каждого числа заранее вычисляется обратный элемент, и деление на число заменяется умножением на число обратное делителю.

При n=16 для реализации операции умножения в GF на компьютере с 32-битными регистрами хватает просто регистровых операций сдвигов и XOR-ов и для реализации алгоритма Эвклида все равно сколько и каких коэффициентов в неразложимом многочлене нулевые, поэтому выбор неразложимого многочлена был произволен - нами был выбран х + х + х + x + 1. Такая реализация (что называется в лоб) арифметических операций, для n=16 на процессоре Celeron 450 при k=5 показывает производительность 0.8 МБ/сек, что является достаточно низким показателем, поэтому авторы предлагают другую реализацию операций умножения и деления.

Используем, тот факт, что в GF(N) существует генератор p, то есть все элементы являются степенью peGF(N). Таким образом, GF(N)={0,p,p2,...,pN-2,pN-1=1}. В нашем GF(216) генератором является число 3 (многочлен x+1). Вычислим все пары (a,i), такие что a=pi . Сохраним эти пары в две таблицы: log-отсортированную по a, и alog -отсортированную по i. То есть : log [pi] = i, alog [i] = pi . Размер каждой из двух таблиц равен 128 КБ. Поэтому имеем для любых элементов a,b из GF(2 ):

ab = alog[(log[a] + log[b] ) mod (216 - 1)]

и

a/b = alog[(log[a] - log[b] ) mod (216 - 1)], причем,

(log[a] + log[b] ) mod (216 - 1) = log[a] + log[b],

если

log[a] + log[b] < 216 - 1,

и

( log[a] + log[b] ) mod (216 - 1) = log[a] + log[b] - (216 - 1),

если

log[a] + log[b] >= 216 - 1

а также

( log[a] - log[b] ) mod (216 - 1) = log[a] - log[b], log[a] - log[b] >= 0,

(log[a] + log[b] ) mod (216 - 1) = log[a] + log[b] + (216 - 1),

если

и

если

log[a] + log[b] < 0. 16 Поэтому операция mod (2 - 1) заменяется на операцию сравнения и сложения (вычитания). Таким образом, умножение сводится к сложению, а деление к вычитанию. Такая реализация на том же процессоре Celeron 450 и k=5 дает скорость сборки ~ 10 МБ/сек, что уже позволяет использовать данную реализацию в локальных сетях. Кроме того, результаты можно улучшить путем использования ММХ технологии для одновременного вычисления нескольких арифметических операций.

2.4 Анализ эффективности использования модели.

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

Рассмотрим сначала стандартную скорость ситуацию. Обозначим через V скорость передачи данных в сети (в сети Internet максимальная скорость передачи данных ~1.5

f V/N

U

К 1  t. J  1С J

рис 3

Клиент

Клиент

рис 2

Хост,через

который, осуществляет соединение клиент

Серверы, содержащее запрашиваемый файл

Соединение клиента

Соединения серверов

МБ/сек). Пусть U - скорость канала между клиентским компьютером и хостом, через который он осуществляет соединение с Интернет (см. рис. 2).

Будем рассматривать ситуацию, когда каждый канал в сети используется одновременно N пользователями, это означает, скорость канала в сети понижается до V/N. Будем считать, что U » V/N, поэтому скорость получения данных V3 в нагруженной сети будет: V3 = V/N. Исследуем теперь нашу модель в тех же условиях (см. рис. 3). Скорость канала в сети также понижается до V/N, однако k частей файла одновременно поступают на хост клиентского компьютера. Скорость получения данных на хост, таким образом, будет Vx =

kV/N. Так как мы предполагаем, что U » V/N, то скорость получения данных определяется скоростью получения данных хостом и скоростью сборки файла Vc. Итак, скорость равна: V'a = 1/(1/Vx+1/Vc) = 1/(N/kV+1/Vc) = kVVc / (kV+NVc).

Пусть Vc = aV, тогда V'a = akV/(k+aN)~kV/N=kV3, так как aN » k. То есть при существенной загрузке сети, в предлагаемой модели скорость получения данных в k раз выше, чем в стандартных условиях. На рис. 4,5 приведены графики зависимости производительностей двух систем от загрузки сети при . k=5 а a = 0.5; 1 В статье приведены реализации, которые при k=5, обеспечивают a ~ 0.5; 2, 6. Таким образом, независимо от выбора предлагаемых реализаций, в случае существенной загрузки скорость получения данных будет в 5 раз выше, чем в обычных условиях, однако

0,006

Vs

У'э.к = 5. а = 1

0,003

Vs N

V'3,k = 5, а = 0.5

1 ю 100

N-число пользователей

Vs

V'3~5Vs

юоо юооо юоооо

N-число пользователей

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

3. Выводы

Авторами предложена оригинальная модель распределенного хранения данных, позволяющая динамически контролировать степень избыточности информации, в зависимости от потребностей пользователей. Данные представляются в виде (N ,k) -пороговой схемы, построенной на теории конечных полей Галуа - GF(N). Степень избыточности данных в рамках модели ограничена числом N - мощностью поля GF. Рассмотрены несколько реализаций модели при N=216, 65521.

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

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

Литература:

1. D. Patterson, G. Gibson, R. Katz. A Case for Redundant Arrays of Inexpensive Disks (RAID). / University of California. Berkeley 1987. — 26 p.

2. Б. Ван дер Варден. Алгебра. — М.: Наука. 1979. — 648 с.

3. E. Win, A. Bosselaers, S. Vanderberghe, P. Gersem, J. Vandewalle. A Fast Software Implementation for Arithmetic Operations in GF(2n). / Katholieke Universiteit Leuven. 1997. — 12 p.

4. Intel Architecture Software Developer's Manual

5. A. Stallings. Data and Computer Communications. Sixth Edition. — New Jersey: Prentice Hall. 1999. — 810 p.

6. J. Adamek. Foundations of Coding. — Wiley: Interscience. 1991. — 336 p.

7. A. Курош. Курс высшей алгебры. — М.: Наука. 1975. — 431 с.

8. V. Hamann. Making Internet Servers Fault-Tolerant - A Comprehensive Overview. / Материалы конференции "Interner-Россия 96". — 7 p.

9. H. Kameda, J. Li, C. Kim, Y. Zhang. Optimal Load Balancing in Distributed Computer Systems (Telecommunication Networks and Computer Systems). — Berlin: Springer Verlag. 1996. — 251 p.

10. W. Richard Stevens. TCP/IP Illustrated vol. 1-3. — Addison: Wesley Pub Co. 1994. — 2078 p.

11. D. Libertone, M. Brain. Windows NT Cluster Server Guidebook. — New Jersey: Prentice Hall. 1998. — 280 p.

12.A. Shamir. How to share a secret. - Communications of the ACM // vol. 24. 1979. — pp. 612 - 613.

13. G. Blakley. Safeguarding cryptographic keys. - Proceeding of AFIPS // vol. 48. 1979. — pp. 313 - 317.