Хранение программ и данных и доступ к ним в распределенных системах являются функциями файловой системы [1]. Файловая система размещается в одном или нескольких узлах компьютерной сети.
С файловыми системами связаны понятия файлового сервиса и файлового сервера. Функции, выполняемые файловой системой, составляют файловый сервис, включающий операции над отдельными файлами, их чтение или запись, и операции создания и управления каталогами. Программное обеспечение (ПО), предназначенное для реализации файлового сервиса, называют файловым сервером. Это ПО устанавливается в отдельном узле сети, который также называется "файловый сервер". В распределенной системе может быть несколько файловых серверов.
Каждый из файл-серверов, имеющихся в файловой системе, может предлагать различный файловый сервис, например, работу в средах как UNIX, так и Windows.
В простых файловых системах, работающих по модели загрузки-выгрузки (FS), единственными операциями являются создание и чтение файлов. Работа с файлами включает чтение файла с сервера, его обработку на машине клиента и обратную запись файла на сервер. Преимуществом этой схемы является простота реализации, а недостатком - высокие требования к дисковой памяти клиентов.
В других моделях распределенных систем файлы могут модифицироваться, что соответствует модели доступа к удаленным данным. В этой модели предусмотрены открытие и закрытие файлов, чтение и запись частей файла, позиционирование в файле, проверка и изменение атрибутов файла и т.п. Эти операции выполняются на сервере, а не на клиентских машинах. При удаленном доступе снижаются требования к объему дисковой памяти у клиентов, исключается необходимость передачи файла целиком, когда нужна только его часть.
В распределенных системах используются те же принципы организации каталогов, что и в централизованных, в частности, иерархическая организация.
Важной проблемой, связанной со способами именования файлов, является обеспечение независимости от расположения (прозрачности расположения), т.е. возможности перемещения файлов между файл-серверами без изменения имен файлов.
В распределенных системах файлам присваиваются как символические имена, предназначенные для использования людьми, так и двоичные имена, используемые системой. Каталоги обеспечивают отображение между двумя типами имен. Двоичных имен может быть несколько для обеспечения доступа к основному файлу и всем его копиям.
Другой проблемой организации распределенных систем является разделение файлов многими пользователями. Один из способов разделения в случае единственного файл-сервера - последовательная обработка обращений к серверу, т.е. считывается всегда последний вариант изменяемого файла. Можно запретить модификацию файлов, но разрешить обновлять каталоги. Тогда изменение файла сводится к созданию нового файла с возможной заменой старого файла.
При создании распределенных систем требуется распределение серверных и клиентских функций между машинами. Некоторые системы (например, NFS) являются одноранговыми, т.е. отсутствует различие между клиентом и сервером, на всех машинах работает одно и то же базовое программное обеспечение. В другом варианте клиенты и серверы - это принципиально различные машины, как с точки зрения аппаратуры, так и программного обеспечения. Часто файловый сервер - это только пользовательская программа, и система может быть сконфигурирована как клиент, как сервер или как клиент и сервер одновременно. Т
Постоянный поиск имен, особенно при использовании нескольких серверов каталогов, может приводить к большим накладным расходам. В некоторых системах делается попытка улучшить производительность за счет кэширования имен. При открытии файла кэш проверяется на наличие в нем нужного имени. Если оно там есть, то этап поиска, выполняемый сервером каталогов, пропускается, и двоичный адрес извлекается из кэша.
Кэширование файлов используется для повышения производительности системы. Требуются алгоритмы для определения, какие файлы или их части следует хранить в кэш-памяти. Кэш-память на сервере легко реализуется и совершенно прозрачна для клиента. Хотя кэширование на сервере исключает обмен с диском при каждом доступе, все еще остается обмен по сети. Существует только один путь избавиться от обмена по сети - это кэширование на стороне клиента.
Существует несколько способов размещения кэша в системе.
Можно кэшировать файлы внутри адресного пространства каждого пользовательского процесса. Обычно кэш управляется с помощью библиотеки системных вызов. По мере того, как файлы открываются, закрываются, читаются и записываются, библиотека просто сохраняет наиболее часто используемые файлы. Когда процесс завершается, все модифицированные файлы возвращаются на сервер. Хотя эта схема реализуется с чрезвычайно низкими издержками, она эффективна только тогда, когда отдельные процессы часто повторно открывают и закрывают файлы.
Другим местом кэширования является ядро. Недостатком этого варианта является то, что во всех случаях требуется выполнять системные вызовы, даже в случае успешного обращения к кэш-памяти (файл оказался в кэше). Но преимуществом является то, что файлы остаются в кэше и после завершения процессов.
Третьим вариантом организации кэша является создание отдельного процесса пользовательского уровня - кэш-менеджера. Преимущество этого подхода заключается в том, что ядро освобождается от кода файловой системы и тем самым реализуются все достоинства микроядер.
Следует также отметить, что кэширование на стороне клиента вносит в систему проблему несогласованности данных. Одним из путей решения проблемы согласования является использование алгоритма сквозной записи. Когда кэшируемый элемент (файл или блок) модифицируется, новое значение записывается в кэш и одновременно посылается на сервер. Теперь другой процесс, читающий этот файл, получает самую последнюю версию. Один из недостатков алгоритма сквозной записи состоит в том, что он уменьшает интенсивность сетевого обмена только при чтении, при записи интенсивность сетевого обмена та же самая, что и без кэширования.
Следующим шагом в этом направлении является принятие сессионной семантики, в соответствии с которой запись файла на сервер производится только после его закрытия. Этот алгоритм называется "запись-по-закрытию". Как мы видели раньше, этот путь приводит к тому, что если две копии одного файла кэшируются на разных машинах и последовательно записываются на сервер, то второй записывается поверх первого.
Необходимо также выбрать правило вытеснения данных из кэша при его переполнении, например, правило, в соответствии с которым из кэша вытесняется блок, к которому дольше всего не было обращения.
Распределенные системы часто обеспечивают репликацию (тиражирование) файлов в качестве одной из услуг, предоставляемых клиентам. Репликация - это асинхронный процесс переноса изменений данных из исходной файловой системы в файловые системы, принадлежащие различным узлам распределенной файловой системы. Другими словами, система оперирует несколькими копиями файлов, причем каждая копия находится на отдельном файловом сервере. Репликация позволяет увеличить надежность за счет наличия независимых копий каждого файла на разных файл-серверах и распределить нагрузку между несколькими серверами.
Список литературы
1. http://www.citforum.ru/