Розподілені файлові системи

Ключовим компонентом будь-розподіленої системи є файлова система. Як і в централізованих системах, в розподіленої системі функцією файлової системи є зберігання програм і даних і надання доступу до них у міру необхідності. Файлова система підтримується однією або більше машинами, званими файл-серверами. Файл-сервери перехоплюють запити на читання або запис файлів, що надходять від інших машин (на серверах). Ці інші машини називаються клієнтами. Кожен посланий запит перевіряється і виконується, а відповідь відсилається назад. Файл-сервери зазвичай містять ієрархічні файлові системи, кожна з яких має кореневої каталог і каталоги більш низьких рівнів. Робоча станція може приєднувати і монтувати ці файлові системи до своїх локальних файлових систем. При цьому монтовані файлові системи залишаються на серверах.

Важливо розуміти різницю між файловим сервісом і файловим сервером. Файловий сервіс - це опис функцій, які файлова система пропонує своїм користувачам. Це опис включає наявні примітиви, їх параметри і функції, які вони виконують. З точки зору користувачів файловий сервіс визначає те, з чим користувачі можуть працювати, але нічого не говорить про те, як все це реалізовано. По суті, файловий сервіс визначає інтерфейс файлової системи з клієнтами.

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

Так як зазвичай файловий сервер - це просто призначений для користувача процес (або іноді процес ядра), що виконується на деякій машині, в системі може бути кілька файлових серверів, кожен з яких пропонує різний файловий сервіс. Наприклад, в розподіленої системі може бути два сервера, які забезпечують файлові сервіси систем UNIX і MS-DOS відповідно, і будь-який призначений для користувача процес користується відповідним сервісом.

Файловий сервіс в розподілених файлових системах (втім як і в централізованих) має дві функціонально різні частини: власне файловий сервіс і сервіс каталогів. Перший має справу з операціями над окремими файлами, такими, як читання, запис або додавання, а другий - зі створенням каталогів і управлінням ними, додаванням і видаленням файлів з каталогів і т.п.

Для будь-якого файлового сервісу, незалежно від того, централізований він або розподілений, найголовнішим є питання, що таке файл? У багатьох системах, таких як UNIX і MS DOS, файл - це неінтерпретіруемая послідовність байтів. Значення і структура інформації в файлі є турботою прикладних програм, операційну систему це не цікавить.

Важливим аспектом файлової моделі є можливість модифікації файлу після його створення. Зазвичай файли можуть модифікуватися, але в деяких розподілених системах єдиними операціями з файлами є СТВОРИТИ і ПРОЧИТАТИ. Такі файли називаються незмінними. Для незмінних файлів набагато легше здійснити кешування файлу і його реплікацію (тиражування), так як виключається всі проблеми, пов'язані з відновленням всіх копій файлу при його зміні.

Файловий сервіс може бути розділений на два типи в залежності від того, чи підтримує він модель завантаження-вивантаження або модель віддаленого доступу. У моделі завантаження-вивантаження користувачеві пропонуються засоби зчитування або запису файлу цілком. Ця модель передбачає наступну схему обробки файлу: читання файлу з сервера на машину клієнта, обробка файлу на машині клієнта і запис оновленого файлу на сервер. Перевагою цієї моделі є її концептуальна простота. Крім того, передача файлу цілком дуже ефективна. Головним недоліком цієї моделі є високі вимоги до дисків клієнтів. Крім того, неефективно переміщати весь файл, якщо потрібна його маленька частина.

Інший тип файлового сервісу відповідає моделі віддаленого доступу, яка передбачає підтримку великої кількості операцій над файлами: відкриття і закриття файлів, читання і запис частин файлу, позиціонування в файлі, перевірка і зміна атрибутів файлу і так далі. У той час як в моделі завантаження-вивантаження файловий сервер забезпечував тільки зберігання і переміщення файлів, в даному випадку вся файлова система виконується на серверах, а не на клієнтських машинах. Перевагою такого підходу є низькі вимоги до дискового простору на клієнтських машинах, а також виключення необхідності передачі цілого файлу, коли потрібна тільки його частину.

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

Принциповою проблемою, пов'язаною зі способами іменування файлів, є забезпечення прозорості. В даному контексті прозорість розуміється в двох слабо помітних сенсах. Перший - прозорість розташування - означає, що імена не дають можливості визначити місце розташування файлу. Наприклад, ім'я / server1 / dir1 / dir2 / x каже, що файл x розташований на сервері 1, але не вказує, де розташований цей сервер. Сервер може переміщатися по мережі, а повне ім'я файлу при цьому не змінюється. Отже, така система володіє прозорістю розташування.

У системах, що складаються з клієнтів і серверів, потенційно є чотири різних місця для зберігання файлів і їх частин: диск сервера, пам'ять сервера, диск клієнта (якщо є) і пам'ять клієнта. Найбільш підходящим місцем для зберігання всіх файлів є диск сервера. Він зазвичай має велику ємність, і файли стають доступними всім клієнтам. Крім того, оскільки в цьому випадку існує тільки одна копія кожного файлу, то не виникає проблеми узгодження станів копій.

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

Значне збільшення продуктивності може бути досягнуто за рахунок кешування файлів в пам'яті сервера. Потрібні алгоритми для визначення, які файли або їх частини слід зберігати в кеш-пам'яті.

При виборі алгоритму повинні вирішуватися два завдання. По-перше, якими одиницями оперує кеш. Цими одиницями можуть бути або дискові блоки, або цілі файли. Якщо це цілі файли, то вони можуть зберігатися на диску безперервними областями (принаймні у вигляді великих ділянок), при цьому зменшується число обмінів між пам'яттю і диском а, отже, забезпечується висока продуктивність. Кешування блоків диска дозволяє більш ефективно використовувати пам'ять кеша і дисковий простір.

По-друге, необхідно визначити правило заміни даних при заповненні кеш-пам'яті. Тут можна використовувати будь-який стандартний алгоритм кешування, наприклад, алгоритм LRU (least recently used), відповідно до якого витісняється блок, до якого найдовше не було звернення.

Кеш-пам'ять на сервері легко реалізується і абсолютно прозора для клієнта. Так як сервер може синхронізувати роботу пам'яті і диска, з точки зору клієнтів існує тільки одна копія кожного файлу, так що проблема узгодження не виникає.