Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Олифер. Сетевые операционные системы.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
16.5 Mб
Скачать

Файловые stateful- и stateless-cepверы

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

  • с запоминанием данных о последовательности файловых операций клиента, то есть по схеме stateful;

  • без запоминания таких данных, то есть по схеме stateless.

Схема stateful — это обычная для любой локальной файловой службы схема. Stateful-сервер поддерживает тот же набор вызовов, что и локальная система, то есть вызовы open, read, write, seek и close, рассмотренные в главе 7. Открывая файлы по вызову open, переданному по сети клиентом, stateful-сервер в своей внутренней системной таблице должен запоминать, какие файлы открыл каждый пользователь (рис. 11.5). Обычно при открытии файла клиентскому приложению возвращается по сети дескриптор файла f d или другое число, которое используется при последующих вызовах для идентификации файла. При поступлении вызова read, write или seek сервер с помощью дескриптора файла определяет, над каким файлом требуется выполнить требуемое действие. В этой таблице хранится также значение указателя на текущую позицию в файле, относительно которой выполняется операция чтения или записи. Таким об­разом, таблица открытых файлов является хранилищем информации о состоя­нии клиентов.

Рис. 11.5. Сервер с сохранением информации о состоянии (stateful)

Файловый сервер, работающий по схеме stateless, можно назвать «устройством без памяти»: когда клиент посылает запрос на сервер, сервер его выполняет, отсылает ответ, а затем удаляет из своих внутренних таблиц всю информацию о запросе. Между запросами на сервере не хранится никакой текущей информации о состоянии клиента. Для stateless-cepвepa каждый запрос должен содержать исчерпывающую информацию (полное имя файла, смещение в файле и т. п.), необходимую серверу для выполнения требуемой операции. Очевидно, что эта информация увеличивает длину сообщения и время, которое тратит сервер на локальное открытие файла каждый раз, когда над ним производится очередная операция чтения или записи. Серверы, работающее по схеме stateless, не поддерживают в протоколе обмена с сетевыми клиентами таких операций как открытие (open) и закрытие (close) файлов. Принципиально набор ко­манд, которые stateless-cepвер способен предоставлять клиенту, может состоять только из двух команд: read и write (рис. 11.6). Эти команды должны переда­вать в своих аргументах всю необходимую для сервера информацию — имя файла, смещение от начала файла и количество читаемых или записываемых байтов данных.

Рис. 11.6. Сервер без сохранения информации о состоянии (stateless)

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

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

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

Преимущества каждого из подходов сведены в табл. 11.1.

Таблица 11.1. Сравнительные характеристики stateful- и stateless-cepвepoв

Stateless-серверы

Stateful-серверы

Отказоустойчивы

Не нужны вызовы open и close

Меньше памяти сервера расходуется

на таблицы

Нет ограничений на число открытых файлов

Отказ клиента не создает проблем для сервера

Более короткие сообщения при запросах

Выше производительность

Возможно опережающее чтение

Возможна блокировка файлов

Кэширование

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

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

  • месту расположения кэша;

  • способу распространения модификаций;

  • проверке достоверности кэша.

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