[использование кругового DNS для создания распределенного веб-сервера]материал подготовил: Марат Давлетханов 26.05.2004
Одним из наиболее удачных способов увеличения производительности веб-сервера является создание распределенной системы. В этом случае вместо одного компьютера запросы пользователей обрабатывают сразу несколько машин. Подобное решение имеет много плюсов по сравнению другими вариантами. Однако как можно реализовать его на практике? Ведь в интернете каждому компьютеру соответствует свой уникальный IP-адрес. Так как же заставить две или даже несколько разных машин отвечать на запросы, предназначенные только для одной из них? Самым простым способом является технология кругового DNS.
Вообще-то, круговой DNS — не единственный способ распределения нагрузки между компьютерами, играющими роль одного сервера. Каждый из них имеет свои преимущества и недостатки. Для того чтобы полностью разобраться в них, необходимо разбить задачу на три проблемы — балансировка, надежность и удобство администрирования. Только подробно рассмотрев каждую из них, мы сможем выяснить все преимущества и недостатки любого способа распределения нагрузки в веб-сервере, состоящем из нескольких компьютеров.
Суть технологии кругового DNS заключается в следующем. Всем известно, что в базах данных DNS-серверов хранятся записи, определяющие соответствие между именем хоста и его IP-адресом. Причем обычно каждому домену соответствует адрес одного компьютера. Однако чаще всего один и тот же сайт обладает не одним, а как минимум двумя именами, например, так: www.hostinfo.ru и hostinfo.ru. Так кто же может нам помешать занести в базу DNS две записи, каждая из которых будет соответствовать своему домену и отправлять пользователей на разные компьютеры? Фактически, получается, что у нас функционируют два совершенно отдельных веб-сервера, каждый из которых обслуживает один сайт.
К сожалению, подобное решение не выдерживает никакой критики. Общеизвестно, что количество переходов по адресам с приставкой www значительно выше, нежели без нее. Таким образом, никакой практической пользы использование этого приема не дает — один сервер у нас будет перегружен работой, а второй — простаивать.
К счастью, технология DNS позволяет внести в базу несколько записей с одним и тем же доменным именем. Таким образом, владелец может указать несколько веб-серверов для своего домена. В этом случае первый интернетчик, обратившийся по данному адресу, будет отправлен на первый компьютер, второй — на второй и так далее. А когда сервер «пройдется» по всем записям, соответствующим одному домену, он снова вернется на первую. Таким образом, происходит как бы бег по кругу. именно поэтому такая технология и получила название кругового DNS. Ну, а теперь, когда мы разобрались, как она работает, давайте перейдем к подробному разбору трех основных аспектов проблемы.
Балансировка
Технология DNS позволяет внести в базу несколько записей с одним и тем же доменным именем
Балансировка, пожалуй, является самым главным критерием для подбора способа реализации распределенного сервера. И действительно, мы же хотим перекинуть часть запросов с одного компьютера на другой, увеличив тем самым производительность всей системы в целом. Однако стоит заметить, что балансировка нагрузки в технологии кругового DNS полностью отсутствует. Это решение всего лишь делит количество запросов поровну между всеми компьютерами, входящими в состав распределенного сервера. Между тем, в большинстве случаев эти машины имеют различные мощности и разные объемы системных ресурсов. Таким образом, распределение запросов «поровну
» может легко привести к тому, что один компьютер будет перегружен, а второй — простаивать.
идем дальше. Даже если все компьютеры, входящие в состав распределенного сервера, абсолютно одинаковы, то это не значит, что они будут обрабатывать запросы с одинаковой скоростью. Ведь одному пользователю может потребоваться маленькая страничка, а другой запустит на выполнение скрипты, требующие больших затрат системных ресурсов. Кроме того, известен тот факт, что при достижении определенного порога загрузки сервера пользователи начинают посылать буквально обвальное количество запросов, моментально перегружающих машину. Причины этого, наверное, стоит искать в психологии. Дело в том, что загруженный сервер медленно обрабатывает информацию, поступающую с компьютеров пользователей. Ну, а нетерпеливые интернетчики реагируют на это частыми нажатиями на кнопку Refresh в своих браузерах, то есть отправлением все новых и новых запросов.
Но и это еще не все. В интернете на сегодняшний день большой популярностью пользуются локальные DNS-сервера. Они однажды получают из основной базы определенную запись и в будущем хранят ее. Естественно, локальный DNS-сервер не имеет никакого представления о круговой технологии, а поэтому пользователь всегда будет попадать на один и тот же компьютер. Это значит, что чем раньше будет введена в эксплуатацию машина, тем больше запросов ей придется обрабатывать. Поэтому добавление к распределенному серверу нового компьютера может не оказать ожидаемого эффекта.
Надежность
Надежность распределенного веб-сервера, созданного с помощью кругового DNS, невелика. Если одна из двух машин выходит из строя или останавливается на профилактику, то половина запросов пользователей «падает в пустоту». Причем у этих людей складывается впечатление, что сайт вообще недоступен, в то время как второй компьютер нормально функционирует в составе сервера и даже, может быть, особенно и не загружен. А теперь давайте подумаем, что будет, если мы остановим на профилактику самую старую машину? Вспомните, ведь именно на нее из-за существования локальных DNS-серверов идет основная нагрузка. Поэтому в данном случае подавляющая часть интернетчиков, пытающихся загрузить сайт, получат сообщение Server Unavailable. Таким образом, надежность распределенного веб-сервера, выполненного по технологии кругового DNS, не сильно отличается от надежности одиночной машины.
Удобство администрирования
Балансировка — главный критерий для подбора способа реализации распределенного сервера
С этой точки зрения технология кругового DNS является практически идеальным вариантом. И действительно, не нужно покупать, устанавливать и настраивать специальные устройства или программное обеспечение. Достаточно один раз внести в базу DNS несколько нужных записей, после чего вся система будет отлично работать. Единственный недостаток у этой схемы — необходимость внесения изменений в DNS для плановых остановок одного компьютера на профилактику. Собственно говоря, внести эти изменения можно очень быстро. Проблема заключается в другом. Изменения в базе DNS распространяются по интернету очень медленно. Обычно приходится ждать несколько дней, пока количество запросов к нужной машине падает до приемлемого порога.
Вывод
итак, как мы видим, реализация распределенного веб-сервера с помощью технологии кругового DNS, мягко говоря, далека от идеала. В ней полностью отсутствуют средства балансировки нагрузки, да и надежность оставляет желать лучшего. Кроме того, использование кругового DNS порождает ряд проблем с реализацией некоторых веб-технологий. Возьмем для примера SSL-соединения или поддержку сессий пользователей. Все данные, необходимые для работы, записываются на тот компьютер в составе сервера, на который пользователь отправлял запрос на авторизацию. Однако следующий его запрос может попасть на другую машину, на которой нет нужной информации. Таким образом, интернетчик, оказывается неавторизованным и снова вынужден вводить свой логин и пароль. Ну, и так далее. Поэтому единственным плюсом кругового DNS являются минимальные затраты вре