\documentclass [12pt] {article}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{verbatim}
\usepackage{graphics}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{a4wide}

\begin{document}
\sloppy

\section{2005 год}
\subsection{Файловый индекс}
\subsubsection{Общее описание}
Система предназначена для сбора, хранения
и анализа информации о состоянии локальных
дисков параллельной вычислительной системы
с целью обеспечить возможность работы
с группами файлов, представляющих
состояния вычислительных процессов.

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

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

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

\subsubsection{Дисковые демоны}
Кроме центрального индекса созданы специальные дисковые демоны, обеспечивающие низкоуровневые
операции с файлами, такие как хеширование или удаление. 
На данный момент реализованы некоторые основные команды, такие как удаление файла, подсчет и проверка
его контрольной суммы (\texttt{MD5}). 
Кроме этого, на дисковый демон возлагается задача создания
избыточной информации и перемещения файлов между узлами.

При запуске он соединяется с индексом и
передает ему информацию о диске, на котором запущен. В случае, если в индексе этого диска не было
--- он добавляется, иначе информация о нем обновляется. 
Идентификатор диска создается методом из библиотеки \textsf{libccp2} (см.  \ref{libccp2}).

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

Создание избыточной информации происходит следующим образом. Сначала на всех демонах
инициализируется операция с уникальным идентификатором. После этого для каждого процесса,
учавствующего в построении коммуникационной сети, передается набор команд по выстраиванию его
локальных \textsf{bio} и указания, с какими надо соединяться по сети или какие соединения принмать 
(подробнее о построение коммуникационных сетей написано в \ref{filebc}). Если в процессе построения
произойдет сбой, данная незаконченая операция будет удалена на всех демонах. После этого, всем
процессам высылается команда запустить операцию. Не учавствующе при этом удалят у себя информацию о
ней как ненужную. При таком подходе устраняется опасность возникновения записей, не относящихся ни к
одной запущеной или еще готовящейся операции. При этом логика построения сетей вынесена в индекс,
где могут быть реализованы рассмотреные в \ref{filebc} алгоритмы.

На данный момент
возможно построение любых сетей с использованием файлов, TCP-соединений и вычисления XOR-сумм,
этого достаточно для обеспечения отказоустойчивости по схеме \textsf{XOR} (см. \ref{filebc-xor})

\subsubsection{Интерфейс}
Процесс создает сетевой сервер на TCP порту 2563 и считывает команды из стандартного ввода.
Кроме этого, создается сервер на TCP порту 2564 принимающий SSLv3 соединения с шифрованием
\texttt{RC4-SHA} и проверкой сертификата клиента. Если проверка не проходит, соединение обрывается,
таким образом есть возможность ограничить доступ к индексу лишь авторизованым приложениям или
интегрировать в систему Globus. На данный момент есть некоторые проблемы с обработкой
прокси-сертификатов задач, но их решение не предоставляет технической трудности и будет решено
при внедрении системы.

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

Ниже приводятся стандартные команды с описанием их действия и разбиению по группам.

\emph{Контрольные команды.} Команды, используемые для управлением работой файлового индекса, такие как
отключение сетевого сервера, отключение клиента или загрузки другой базы.

\emph{Команды, частично обрабатываемые в серверной части} Эти команды не поступают напрямую в ядро
индекса, а обрабатываются в C-сервере.

\emph{Команды приведения индекса к целостному виду.}

\emph{Команды добавления или изменения данных}
Этот класс команд не предназначен для использования вручную. Они не обрабатываются в C-коде и имеют формат
\texttt{<<команда>>~<<тип~данных>>~<<данные>>}. Данные команды, не начинающейся с символа \texttt /,
представляют из себя строковое представление Haskell типов.

\subsubsection{Маршрутизация сообщений}
\label{cpindex-routing}
Команды в индексе отправляются какому-то конкретному получателю, что позволяет отсылать подключеным
клиентам ответ на их запрос, а не на чужой. Реализуется это с помошью связи символьного имени с
соединением, при этом, одному соединению может быть присвоено несколько имен. Так, клиент может
указать какие дополнительные символьные имена ему нужны с помошью команды \textsf{/cntl/alias}. 
Таким образом, 
дисковый демон при подключении может указать, что кроме присвоеного ему при открытии TCP-соединения
имени вида \texttt{inet-[номер соединения]}, он должен получать сообщения для \texttt{disk-[UUID~диска]}
Кроме этого, могут существовать специальные имена. Например, \texttt{disk:broadcast}, при отправке команды на
которое, копия рассылается всем дисковым демонам. Оно используется для построения коммуникационных
сетей.
\end{document}
