Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы) (1162619), страница 56
Текст из файла (страница 56)
Другими словами, сущность может с легкостью поменять точку доступа,а точка доступа может быть перенацелена на другую сущность.Если для ссылки на сущность использовать адрес, то после изменения точкивхода или назначения ее другой сущности мы получим неверную ссылку. Дляпримера представьте себе, что FTP-служба организации известна только по адресу хоста, на котором запущен РТР-сервер. Как только сервер будет переведенна другой хост, РТР-служба окажется абсолютно недоступной до тех пор, покановый адрес не станет известен всем пользователям этой службы. В этом случаебыло бы значительно лучше сделать так, чтобы РТР-служба имела собственноеимя, никак не связанное с адресом соответствующего РТР-сервера.Точно так же если сущность имеет более одной точки входа, непонятно, какой адрес использовать для ссылки.
Например, как мы говорили в главе 1, множество организаций разносят свои web-службы по нескольким серверам. Еслимы будем использовать адреса этих серверов для ссылок на web-службы, неясно,какой из адресов лучше выбрать. Значительно лучше использовать для webслужбы одно имя, не связанное с адресами web-серверов.Эти прршеры иллюстрируют тот факт, что имя сущности, не связанное с ееадресами, часто значительно проще и удобнее. Такие имена мы называем локально независимыми {local independent).Кроме адресов существуют и другие типы имен, требующие особого рассмотрения, например имена, используемые для однозначной идентификации сущности.
Правильный идентификатор {true identifier) — это имя со следующими свойствами [491]:4 идентификатор ссылается не более чем на одну сущность;> на каждую сущность ссылается не более одного идентификатора;4 идентртфикатор всегда ссылается на одну и ту же сущность (то есть не может быть использован повторно).Использование идентификаторов значительно упрощает создание однозначных ссылок на сущность. Для примера рассмотрим два процесса, каждый из которых ссылается на некие сущности посредством идентификаторов.
Для того4.1. Именованные сущности217чтобы понять, что оба процесса ссылаются на одну и ту же сущность, достаточносравнить на эквивалентность два идентификатора. При использовании обычных(не «идентификаторных») имен такого теста мало. Так, в качестве уникальнойссылки на конкретного человека указывать только его имя и фамилию, например «Джон Смит», явно недостаточно.Точно так же если один и тот же адрес может быть присвоен другой сущности, мы не можем задействовать его в качестве идентификатора. Обсудимиспользование телефонных номеров, которые относительно постоянны в томсмысле, что номер обычно относится к одному и тому же человеку или организации.
Однако задействовать телефонный номер в качестве идентификатора нельзя, потому что он с течением времени может поменяться. Соответственно, новаябулочная Боба может получить старый телефонный номер склада аппаратурыАлисы. В этом случае лучше использовать правильный идентификатор Алисы,а не ее телефонный номер.Адреса и идентификаторы — два очень важных типа имен, каждый из которыхпредназначен для своих целей. Во многих компьютерных системах адреса и идентификаторы хранятся только в форме, удобной для использования машиной, тоесть в форме строк битов.
Так, адреса Ethernet — это, по сути, случайные 48-битные строки. Адреса памяти обычно представлены 32- или 64-битными строками.Еще один важный тип имен — имена, приспособленные для восприятия человеком (human-friendly names), или просто удобные для восприятия. В противоположность адресам и идентификаторам удобное для восприятия имя обычнопредставляется в виде строки символов. Эти имена принимают множество различных форм.
Например, файлы в UNIX-системах имеют имена, состоящие изстрок, длина которых может доходить до 255 символов и определяется толькожеланием пользователя. Аналогично, имена DNS представляются относительнопростой строкой, символы в которой не зависят от регистра.Пространства именИмена в распределенных системах организуются в некоторую сущность, котораяносит название пространства имен (пате space). Пространство имен может бытьпредставлено как направленный граф с двумя типами узлов.
Листовой узел (leafnode), или лист, представлен именованной сущностью и не имеет исходящихиз него ребер. Листовой узел обычно содержит информацию о представляемойсущности — например, ее адрес, — к которой имеют доступ клиенты. С другойстороны, мы можем сохранить в листовом узле состояние этой сущности — какв случае файловой системы, когда листовой узел содержит файл, который онпредставляет. Позже мы еще вернемся к вопросу о содержимом узлов.В противоположность листовому узлу, направляющий узел (directory node)имеет несколько исходящих из него ребер, каждое их которых именовано, какпоказано на рис.
4.1. Каждый узел в графе именования рассматривается как ещеодна сущность распределенной системы и, следовательно, имеет отдельный идентификатор. Направляющий узел хранит таблицу, в которой все исходящие ребрапредставлены в виде пар (метка ребра, идентификатор узла).
Эта таблица называется направляющей таблицей (directory table).218Глава 4. ИменованиеДанные, хранящиесяв узле п1homeп2: "eike"пЗ: "max"п4: "steen"keysn5)"/keys"7home/steen/keys"keysЛистовой узел Qj^^^^^^ jf )\ ^riboxf )"/home/steen/mbox"Рис. 4 . 1 . Обобщенный граф именования с одним корневым узломГраф именования, показанный на рисунке, имеет один узел, а именно пО, у которого имеются только исходящие ребра. Входящих ребер у него нет.
Такой узелназывается корневым узлом {root node)y или корнем, графа именования. Несмотряна то что граф именования может иметь несколько корневых узлов, для простоты многие системы именования имеют лишь один корень. Любой путь в графеименования должен быть представлен последовательностью меток, соответствующих ребрам графа, например:N:<label-1 , label-2, ..., Iabel-n>Здесь N соответствует первому из узлов пути. Эта последовательность называется именем пути {path пате). Если первый узел пути — корень графа именования, это имя называется абсолютгсым именем пути {absolute path name). В противном случае оно называется относительным именем пути {relative path name).Важно понимать, что имена всегда организуются в пространство имен.
Вследствие этого имя всегда определяется только относительно направляющего узла.В этом смысле термин «абсолютное имя» — это, в некотором смысле, обман.Точно так же и разница между глобальными и локальными именами порой может ввести в заблуждение. Глобальным именем {global пате) называется имя, которое обозначает одну и ту же сущность, вне зависимости от того, где в системеоно используется. Другими словами, глобальное имя всегда соответствует одному и тому же направляющему узлу. В противоположность ему, локальное имя{local пате) — это имя, интерпретация которого зависит от того, где это имя используется. Иначе говоря, локальное имя — это лишь относительное имя, и должен быть известен (подразумеваться) направляющий узел, к которому оно относится. Мы вернемся к этим вопросам, когда будем обсуждать разрешение имен.Это описание графа именования похоже на реализацию многих файловыхсистем.
Однако вместо представления имени пути последовательностью именованных ребер, имена путей в файловых системах обычно представляются в видеединой строки, в которой метки разделяются специальным разделяющим символом, например косой чертой (/). Этот символ также используется и для того,чтобы показать, абсолютное это имя или нет. Например, вместо задания именипути в виде nOKhome, steen, mbox> (см. рис. 4.1) обычно используется его строковое представление /home/steen/mbox. Отметим также, что если в один и тот же узел4.1. Именованные сущности219приходят несколько путей, этот узел может соответствовать различным именампутей.
Так, например, на узел п5 можно сослаться в виде /home/steen/keys илипросто в виде /keys. Строковое представление имени пути успешно применяетсяк графу именования не только в файловых системах. В Plan 9 все ресурсы, както: процессы, хосты, устройства ввода-вывода и сетевые интерфейсы, именуютсятаким же образом, как файлы [353].