Лекция №

Сетевые службы

 Сетевые файловые системы

 Вопросы реализации сетевой файловой системы

 Распределение клиентов и серверов по компьютерам

  Размещение клиентов и серверов в операционной системе

  Схема реализации файлового сервера

  Кэширование

  Репликация

Практически все современные ОС являются сетевыми, т.е. позволяют пользователям получать доступ, как к локальным ресурсам, так и к ресурсам других компьютеров, подключенных к сети.

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

 

Сетевые файловые системы

Функцией файловой системы является хранение программ и данных и предоставление доступа к ним по мере необходимости.

Распределенная файловая система поддерживается одним или более компьютерами, хранящими файлы.

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

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

Файловые серверы обычно содержат иерархические файловые системы.

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

В распределенной ОС пользователи не знают как реализована файловая система. Они не знают количество файловых серверов, их месторасположение и функции. Современные сетевые файловые системы еще не полностью соответствуют идеалу распределенности. В большинстве ОС пользователь должен явно указать имя файлового сервера при доступе к его ресурсам. В настоящее время продолжается работа по созданию истинно распределенных сетевых файловых систем. Экспериментальные ОС – Amoeba, Mach, Chorus (более прозрачные).

Сетевая файловая система в общем случае включает следующие элементы:

Клиенты сетевой файловой системы – это программы, которые работают на компьютерах, подключенных к сети, и обслуживают запросы приложений на доступ к файлам, хранящимся на удаленном компьютере. Например, Windows Explorer, UNIX shell и другие пользовательские программы.

Клиент сетевой файловой системы передает по сети запросы серверу сетевой файловой системы, работающему на удаленном компьютере. Сервер, получив запрос, выполняет его самостоятельно, либо (более распространенный вариант) передает запрос локальной файловой системе. Ответ передается в обратном направлении.

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

Клиент и сервер сетевой файловой системы взаимодействуют друг с другом по сети по определенному протоколу.

Например, сетевой файловой службой в ОС семейства Windows используется протокол SMB (Server Message Block). Его последние расширенные версии получили название Common Internet File System, CIFS. Как и все протоколы файловых служб, он работает на прикладном уровне модели OSI, используя различные транспортные протоколы для передачи свои сообщений (NetBIOS, его более поздняя реализация NetBEUI, TCP/UDP, IPX).

Основной протокол доступа к файлам и принтерам сетевой ОС NetWare компании Novell – NCP (NetWare Control Protocol).

В различных вариантах ОС семейства UNIX популярен протокол NFS – протокол сетевой файловой системы NFS (Network File System) компании Sun Microsystems.

Замечание. Для одной и той же локальной файловой системы могут существовать различные протоколы сетевой файловой системы. Например, к NTFS можно получить доступ с помощью протоколов SMB, NCP, NFS.

С другой стороны, с помощью одного протокола может реализовываться удаленный доступ к различным локальным файловым системам. Например, протокол SMB используется для доступа к FAT, NTFS, HPFS.

Вопросы реализации сетевой файловой системы

Распределение клиентов и серверов по компьютерам

Размещение клиентов и серверов в операционной системе

В современных ОС эти компоненты оформляются как высокоуровневые драйверы, работающие в составе подсистемы ввода-вывода.

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

На практике такая архитектура применяется редко, т.к. снижается производительность файлового сервера.

Схема реализации файлового сервера

Файловый сервер может быть реализован по одной из двух схем:

  1. с запоминанием данных о последовательности файловых операций клиента – stateful;
  2. без запоминания таких данных – по схеме stateless.

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

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

Рис. Сервер stateful

Клиент файловой службы с сервером stateless должен самостоятельно поддерживать таблицы открытых фалов:

Рис. Сервер stateless

Преимущества серверов stateless:

серверы stateful:

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

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

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

Кроме того, применение серверов stateless затрудняет реализацию блокировок файлов, так как информацию о блокировке файла одним из пользователей необходимо запоминать на всех клиентах файлового сервера.

Кэширование

Скорость доступа к файлам, хранящимся на дисках, существенно повышает кэширование данных.

(Дисковый кэш – подсистема буферизации).

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

Схемы кэширования, применяемые в сетевых файловых системах, отличаются решениями по трем ключевым вопросам:

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

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

Другой путь – алгоритм отложенной записи: вместо того, чтобы выполнять запись на сервер, клиент просто помечает, что файл изменен. Примерно каждые 30 сек. Все изменения в файлах собтраются вместе и отсылаются на сервер за один прием. (Одна большая запись для сетевого обмена более эффективна, чем много коротких.)

И еще один алгоритм – запись по закрытию, в соответствии с которым запись файла на сервер производится только после закрытия файла.

Очевидно, что данные в кэше одного клиента становятся недостоверными, когда данные, модифицированные другим клиентом, переносятся в главную копию файла.

Þ необходимо проверять, являются ли данные в кэше клиента достоверными. В противном случае данные должны быть повторно считаны с сервера.

Существуют два подхода к решению этой проблемы

  1. инициирование проверки клиентом (клиент связывается с сервером и проверяет, соответствуют ли данные в его кэше данным главной копии файла на сервере);
  2. инициирование проверки сервером (клиент, открывающий файл, посылает сообщение серверу о режиме – чтение или запись. Если файл открыт для чтения, то все другие процессы могут его открыть только для чтения. Если файл открыт для записи, то все другие виды доступа запрещены. (UNIX)

Репликация

Репликация – тиражирование.

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

За счет репликации

  1. увеличивается надежность (при отказе одного сервера файл остается доступным на другом);
  2. снижается нагрузка на файловые серверы (за счет распределения нагрузки между несколькими серверами, т.к. клиенты могут обращаться к данным реплицированного файла на ближайший файловый сервер).

Репликация поддерживается сетевой файловой системой в качестве одной из услуг для клиентов. Иногда репликацией занимается отдельная файловая служба.

Ключевым вопросом, связанным с репликацией, является прозрачность.

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

В других системах – репликация выполняется полностью автоматически. Система при этом наз. репликационно прозрачной.

Прозрачность репликации зависит от двух факторов:

Именование реплик.

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

Реализуется такая схема следующим образом.

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

Схема реализуется просто для неизменяемых файлов (реплики всегда идентичны).

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

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

Управление репликацией.

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

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

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

Согласование реплик

Это один из наиболее важных вопросов при разработке системы репликации.

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

Существует несколько способов обеспечения согласованности реплик:

Пусть в сети существует n реплик некоторого файла.

Алгоритм основан на том, что при модификации файла изменения записываются в w реплик, а при чтении файла клиент производит обязательное обращение к r репликам. Значения выбираются так, чтобы w+r>n. При модификации файла наращивается номер версии реплики. Если при записи реплики имеют разные версии, то выбирается максимальное значениеверсии для наращивания и присваивания всем репликам. При чтении клиент имеет возможность сначала проверить версию каждой реплики, выбрать старшую и читать данные из нее.

При выполнении условия w+r>n среди любых выбранных произвольным образом r реплик всегда найдется хотя бы одна из w реплик, в которую записаны последние обновления.

 

Файловая служба имеет две различные части:

  1. собственно файловую службу (операции над отдельными файлами: чтение, запись, добавление);
  2. службу каталогов файловой системы (создание каталогов, добавление и удаление файлов из каталогов и т.п.).