Эффективное преобразование имен

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

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

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

Кэширование — залог эффективности

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

Для оптимизации процесса поиска имен серверы глобальной сети Internet используют механизм кэширования имен. То есть каждый сервер сохраняет в локальной кэш-памяти информацию о недавно использовавшихся именах, а также сведения о том, какой из серверов предоставил данные для преобразования этого имени. Получив от клиента запрос на распознание имени, сервер, согласно стандартной процедуре, сначала проверяет, имеет ли он полномочия на управление доменом, к которому принадлежит то имя. Если нет, то сервер выполняет поиск данного имени в своей кэш-памяти. В случае нахождения адресной привязки сервер имен извлекает ее из кэш-памяти и отправляет клиенту. При этом сервер уведомляет клиента, что привязка получена не из достоверного источника (nonauthoritative) и передает вместе с ней доменное имя сервера S, от которого он получил эту привязку. Локальный сервер посылает также клиенту дополнительную информацию, в которой указана привязка между именем сервера S и его IP-адресом. В результате клиенты получают ответы быстро, однако содержащаяся в них информация может быть устаревшей. Поэтому, если во главу угла ставится эффективность, клиент воспользуется ответом, полученным из недостоверного источника, и продолжит работу. Если же система должна работать без ошибок, клиент обязан направить запрос официальному серверу домена S и проверить достоверность полученной привязки между именем и адресом.

Кэширование хорошо работает в системе доменных имен, потому что привязки имен к адресам редко изменяются. Тем не менее рано или поздно это все-таки происходит. Поэтому если сервер поместит в кэш адресную привязку в тот момент, когда она была в первый раз затребована, и больше никогда не будет ее изменять, содержимое кэш-памяти со временем устареет и может стать неправильным. Для поддержания в кэш-памяти актуальной информации сервер имен контролирует время нахождения каждой привязки в кэше и удаляет из него элементы, время пребывания которых превысило установленное значение. Получив запрос после того, как соответствующий элемент удален из кэш-памяти, сервер должен обратиться к достоверному источнику и заново получить привязку. Важно то, что серверы имен не используют единое фиксированное время хранения для всех элементов кэш-памяти. Время хранения привязки в кэше определяется достоверным источником, от которого эта привязка получена. Всякий раз, когда официальный сервер имен отвечает на запрос, он помещает в отклик значениевремени жизни (Time То Live, или TTL). Это значение определяет, на какой срок привязка останется без изменений. Следовательно, для уменьшения нагрузки на сеть администратор официального сервера имен должен указать большие значения времени жизни для тех доменов, которые, как предполагается, не будут часто изменяться. Если же предполагается, что содержимое домена будет изменяться довольно часто, значение времени жизни должно быть достаточно малым, чтобы обеспечить достоверность информации.

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

Хранение копии базы данных локального сервера имен на каждом узле сети имеет несколько преимуществ. Очевидно, что благодаря этому существенно ускоряется процесс распознавания имен на локальных узлах сети, поскольку программа распознавателя может работать автономно, не обращаясь к сети. Кроме того, обеспечивается защита узла сети, если локальный сервер имен выйдет из строя. И наконец, уменьшается вычислительная нагрузка на сервер имен, что позволяет ему обслуживать большее количество машин.

Похожие статьи Меню Опрос Фото Популярное