Балансировка нагрузки

Системы балансировки нагрузки Web-серверов(Часть 1)



Инструменты для настройки производительности Web-сереров

Индустрия электронной коммерции продолжает развиваться, и сегодня все новые компании начинают общаться со своими клиентами с помощью Web. Высокопроизводительный сайт, способный предоставлять материалы быстро и без сбоев, не только помогает привлекать новых клиентов. Он становится важнейшей предпосылкой успешной деятельности предприятий электронной торговли и повышения их конкурентоспособности. Едва ли потенциальные клиенты когда-нибудь вернутся на раздражающе "тихоходный" узел, где посетитель подолгу ждет реакции на свой запрос, а то и вовсе остается без ответа. Вот почему при планировании инфраструктуры узла Web в любой организации мерам по повышению его производительности следует уделять особое внимание.

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

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

Распределение, или выравнивание нагрузок, приходящихся на несколько серверов, позволяет избежать такой ситуации, когда передаваемые по сети Web пакеты лавиной обрушиваются на один сервер, в то время как другие простаивают без дела. Для распределения нагрузки между Web-серверами обычно используется функция DNS, именуемая циклической выборкой (round-robin feature), которая предусматривает возможность круговой передачи IP-адреса любого Web-сервера, составляющего сайт, любому клиенту; в итоге все Web-серверы становятся в равной степени загружены трафиком. Однако этот механизм недостаточно эффективен в тех средах, где возможности аппаратных и программных компонентов отдельных Web-серверов неравнозначны. Понятно, что в среде с распределенной нагрузкой оснащенная двумя 450-мегагерцевыми процессорами Pentium III и памятью емкостью 1 Гбайт система под управлением Windows 2000 Server может взять на себя более тяжелую ношу, нежели система Windows NT Server с одним 300-мегагерцевым процессором Pentium II и 256 Мбайт памяти. Однако с точки зрения процедуры циклической выборки службы DNS между этими системами нет никакой разницы; более того, данная функция "не имеет представления" о доступности того или иного Web-сервера, поскольку не может определить, работоспособен компьютер или вышел из строя.

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

Что такое система балансировки нагрузки

Рис.2 Система балансировки для одного сайта.

Система балансировки нагрузки Web-серверов - это инструментальное средство, предназначенное для переадресации клиентских запросов на наименее загруженный или наиболее подходящий Web-сервер из группы машин, на которых хранятся зеркальные копии информационного ресурса. Клиент не подозревает о том, что обращается к целой группе серверов: все они представляются ему в виде некоего единого виртуального сервера. Предположим для примера, что мы обслуживаем один Web-сайт и имеем при этом два Web-сервера: web1.acme.com с IP-адресом 193.168.36.1 и web2.acme.com с IP-адресом 193.168.36.2. Эту конфигурацию иллюстрирует Рисунок 2. Представляя наш сайт пользователям Internet, система балансировки нагрузки использует имя виртуального компьютера (пусть это будет имя www.acme.com), а также виртуальный IP-адрес (VIP-адрес - скажем, 193.168.35.10). Чтобы связать имя виртуальной системы и соответствующий VIP-адрес с двумя нашими Web-серверами, мы должны опубликовать имя системы и ее VIP-адрес на сервере DNS. Система балансировки нагрузок постоянно контролирует нагрузки и степень готовности каждого из Web-серверов. Когда на узел http://www.acme.com/ заглядывает посетитель, его запрос поступает не на один из Web-серверов, а в систему балансировки нагрузки. Эта система и принимает решение о том, на какой сервер направить запрос. При этом она руководствуется такими критериями, как загрузка каждого подопечного сервера, а также соблюдает условия и правила, сформулированные администратором. Затем система балансировки нагрузки направляет запрос клиента соответствующему серверу (как правило, она же направляет ответ сервера клиенту, но это зависит от конкретной реализации).

Системы распределения нагрузки могут к тому же обеспечивать выравнивание нагрузок нескольких Web-сайтов. Напомню читателям, что применение нескольких сайтов позволяет размещать серверы-"дублеры" (зеркальные Web-серверы) ближе к посетителям сайта и сокращать задержки при обмене информацией между сайтом и клиентами. Кроме того, при наличии нескольких Web-сайтов появляется возможность равномерно распределять нагрузку между ними, а также обеспечивать высокую степень их готовности и отказоустойчивость в случае нарушений в работе сайта (будь то по причине сбоев в системе энергоснабжения или из-за потери связи с Internet в вычислительном центре). При наличии нескольких сайтов, как показано на Рисунке 6, все системы балансировки нагрузок на всех сайтах имеют одно общее имя виртуальной системы, но разные VIP-адреса. Так, системе балансировки 1 на сайте 1 в Нью-Йорке присвоено имя виртуальной главной машины http://www.acme.com/ с VIP-адресом 193.168 .35.10. А балансировщик 2 на сайте 2 в Лос-Анджелесе, пользующийся тем же именем виртуальной главной машины, имеет уже другой VIP-адрес - 193.200.1.10. Связи всех систем балансировки с локальными Web-серверами устанавливаются так же, как и в случае с одним сайтом. Наряду с мониторингом нагрузок локальных серверов системы балансировки обмениваются со своими "коллегами" на других сайтах информацией о конфигурации и загрузке; при этом проверяется и степень готовности сайта. В итоге все системы балансировки имеют в своем распоряжении общую картину распределения нагрузок и готовности к работе различных узлов. При наличии нескольких сайтов системы балансировки нагрузок часто параллельно выполняют еще одну задачу: берут на себя роль серверов DNS, обслуживающих имя виртуальной системы. Получив через DNS сигнал от клиента, указавшего данное имя, система балансировки возвращает клиенту VIP-адрес сайта, наиболее подходящего с учетом текущего уровня нагрузки, степени удаленности от клиента и других параметров. Затем клиент автоматически получает доступ к этому узлу.

Рис.3 Система балансировки для нескольких сайтов.

Системы балансировки нагрузок делятся на три категории: аппаратные устройства (hardware appliances), сетевые коммутаторы и программные решения. Системы балансировки на базе аппаратного устройства можно рассматривать как "черный ящик"; обычно это функционирующая под управлением UNIX или фирменной ОС машина с процессором Intel, на которой установлена разработанная поставщиком система балансировки нагрузки. Такие системы соответствуют спецификации Plug and Play (PnP), что облегчает работу администраторов узлов Web. Для реализации систем балансировки на базе сетевых коммутаторов используются коммутаторы второго и третьего уровня. В отличие от аппаратных решений эти системы не предусматривают установки дополнительных устройств, через которые Web-серверы подключаются к коммутатору. Если при организации службы распределения нагрузки в пуле Web-серверов используются программные продукты, то можно обойтись без модификации имеющихся сетевых средств и оборудования. Программные пакеты устанавливаются на существующих Web-серверах или на специальных серверах выравнивания нагрузки.

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

Мониторинг состояния серверов

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

При проведении внешнего мониторинга система балансировки нагрузки рассчитывает время отклика сервера, для чего направляет на сервер запрос и замеряет время ответа. Самая простая техника выполнения внешнего мониторинга сервера предполагает использование ping-тестов по протоколу управления сообщениями Internet Control Message Protocol (ICMP). Эти тесты позволяют системе убедиться в готовности сервера к работе и узнать, сколько времени необходимо для передачи информации с сервера на систему балансировки и обратно. Если система балансировки нагрузки не получает отклика от сервера после нескольких последовательных запросов, считается, что данный сервер недоступен. Как правило, администраторы подключают Web-серверы непосредственно к системе балансировки нагрузки, поэтому если время, затрачиваемое на передачу, слишком велико, система заключает, что сервер работает с большой нагрузкой.

Здесь, однако, надо отметить, что в ходе ping-тестов сервера по протоколу ICMP диагностируется только стек протоколов IP; описанный метод не дает представления о состоянии стека TCP, который используется протоколом передачи гипертекста HTTP. Чтобы убедиться в правильности функционирования стека TCP сервера, средство балансировки нагрузки предпринимает попытку установить соединение по протоколу TCP, для чего требуется осуществить состоящий из трех этапов обмен подтверждающими сообщениями. Делается это так. Сначала средство балансировки нагрузки направляет серверу TCP-пакет, в котором значение бита SYN установлено равным 1. Если после этого система балансировки получает от сервера TCP-пакет, в котором значение бита SYN равно 1, а значение бита ACK тоже установлено равным 1, она направляет серверу второй TCP-пакет со значением бита SYN равным 0 и значением бита ACK равным 1. Если обмен подтверждающими сообщениями завершился успешно, значит, TCP-стек сервера функционирует нормально. По завершении такого обмена средство балансировки нагрузки немедленно разрывает соединение с сервером, чтобы исключить непроизводительное использование его ресурсов. Качество TCP-соединения с сервером оценивается системой по такому показателю, как время, необходимое для выполнения всех трех этапов обмена подтверждающими сообщениями.

Наряду с тестированием стеков протоколов лучшие средства балансировки нагрузки могут обеспечивать мониторинг времени отклика и готовности как самого Web-сервера, так и установленных на нем приложений еще одним способом: на сервер направляется запрос по протоколу HTTP на получение информационных материалов или адреса URL. Пусть именем начальной страницы сервера web1.acme.com будет index.htm. Система балансировки нагрузки на Рисунке 2 может инициировать предусмотренную по протоколу HTTP команду Get, запрашивая тем самым у сервера web1.acme.com содержимое страницы index.htm. Если код возврата, направляемый системе Web-сервером, будет 200, значит, начальная страница на сервере web1.acme.com недоступна. Время отклика определяется системой балансировки нагрузки как время с момента отправки запроса на предоставление информации до момента получения кода возврата.

Однако при том, что внешний мониторинг дает возможность получить о сервере полезную информацию, как метод диагностики он имеет свои недостатки. О таких существенных характеристиках сервера, как состояние центрального процессора, памяти, системной шины, шины ввода/вывода, сетевой интерфейсной платы, а также о ряде важных ресурсов системы и прикладных программ администратор имеет лишь отрывочные сведения или вообще никаких. Подробную информацию о нагрузке сервера может предоставить только внутренний мониторинг. Для его выполнения в системе балансировки нагрузки предусмотрены специальные агенты внутреннего мониторинга, которые устанавливаются на каждом сервере. Агент постоянно контролирует состояние своей "среды обитания" и сообщает о нем средству балансировки. Многие поставщики предлагают инструментальные средства для работы со сценариями, которые позволяют администраторам создавать утилиты внутреннего мониторинга для Web-приложений. Внутренний мониторинг широко применяется в программных системах балансировки, но в аппаратных устройствах и в решениях на базе коммутаторов этот метод диагностики реализуется редко.

Выбор сервера

С учетом информации, полученной в ходе внешнего и внутреннего мониторинга серверов, система балансировки нагрузки может выделить сервер, который способен лучше других справиться с обработкой клиентского запроса. Если рабочие характеристики аппаратных и программных компонентов всех серверов пула равнозначны, можно настроить систему балансировки нагрузки так, чтобы она выделяла сервер для обработки очередного запроса по принципу кругового списка, учитывая при этом состояние сервера. Но если система балансировки управляет как сервером с процессором Pentium III, так и еще одной машиной, на которой установлен процессор Pentium Pro, существует возможность отрегулировать эту систему для работы в другом режиме: более мощному серверу будет доставаться большее число запросов. Иначе говоря, речь идет о том же принципе кругового списка, только с учетом весовых коэффициентов.

Современные системы балансировки нагрузки позволяют администратору определять правила выбора сервера по своему усмотрению. Можно, к примеру, включить в эти правила такие критерии, как коэффициент загрузки ЦП и памяти, число открытых соединений TCP и количество пакетов, поступающих на сетевую интерфейсную плату того или иного сервера. Формула, по которой система балансировки определяет уровень загруженности серверов, может выглядеть примерно так: (10 * уровень использования ЦП) + (3 * уровень использования памяти) + (6 * число открытых TCP-соединений) + (3* число переданных пакетов) = загрузка сервера. При получении запроса от клиента система балансировки нагрузки рассчитывает по этой формуле нагрузку каждого сервера и направляет запрос серверу с наименьшей нагрузкой.

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

При организации устойчивого соединения основная задача системы состоит в том, чтобы идентифицировать клиента и связать соответствующий идентификатор с сервером-получателем запроса. Как правило, системы балансировки нагрузки используют в качестве идентификатора клиента применяемый им IP-адрес отправителя. Но все дело в том, что адрес отправителя не обязательно совпадает с реальным IP-адресом клиента. Многие компании и провайдеры, стараясь удержать Web-трафик под контролем и скрыть от посторонних глаз IP-адреса своих пользователей, устанавливают серверы-посредники. И в случае, если на наш гипотетический узел Web поступят запросы от 500 клиентов службы America Online (AOL), а также от 10 клиентов, представляющих другую компанию, баланс нагрузок серверов будет нарушен. Система балансировки свяжет 500 клиентов из AOL, имеющих один и тот же адрес отправителя, с одним сервером, а 10 остальных клиентов - с другим. К счастью, эту проблему можно решить, если воспользоваться системой балансировки нагрузки, оснащенной средствами идентификации IP-адресов отправителей и номеров портов TCP. Подобные системы способны опознавать клиентов даже в том случае, когда последние выходят в Internet через один и тот же proxy-сервер. Такая идентификация возможна потому, что каждое TCP-соединение имеет уникальный IP-адрес отправителя и номер порта TCP. Еще один способ идентификации клиента, проводящего защищенный сеанс связи по протоколу HTTP, состоит в том, чтобы зафиксировать идентификационный номер сеанса связи пользователя по протоколу Secure Sockets Layer (SSL). Протокол SSL назначает каждому установленному сеансу связи специальный идентификатор, а прикладные программы для виртуальных магазинов часто пользуются этим протоколом. Самое современное средство поддержания устойчивых соединений - это распространяемые по сети Web cookie-файлы. Напомню, что эти файлы содержат как сведения о клиенте, так и другие данные (например, о том, с каким сервером клиент связывался в последний раз). Анализ содержимого cookie-файлов помогает системе балансировки нагрузки идентифицировать клиентов и подбирать для них наиболее подходящий сервер. В число поставщиков систем балансировки нагрузки, оснащенных средствами работы с cookie-файлами, входят такие компании, как Alteon WebSystems, ArrowPoint Communications, F5 Networks и Resonate.

Наконец, существует еще один способ выбора сервера - так называемое непосредственное связывание (immediate binding). В соответствии с этим методом системы балансировки нагрузки подбирают сервер для клиента и направляют запрос на него в тот самый момент, когда система получает от клиента пакет TCP SYN. При этом система балансировки выбирает сервер, руководствуясь заданными правилами распределения нагрузки серверов, а также IP-адресом, содержащимся в полученном от клиента пакете TCP SYN. Этот метод обеспечивает высокое быстродействие, но надо сказать, что при его применении система балансировки просто не успевает проанализировать другую информацию: в частности, идентификатор сеанса связи по протоколу SSL, содержимое cookie-файла, адрес URL и данные прикладной программы. Чтобы получить более подробные сведения о клиенте и, соответственно, точнее выбрать для него сервер, системе балансировки нагрузки требуется время для анализа информации уровня приложения. При выборе сервера по методу отложенного связывания система балансировки нагрузки принимает решение о назначении сервера лишь по завершении трехэтапного обмена подтверждающими сообщениями и после установки соединения между ней и клиентом. Система может учитывать содержимое публикуемых материалов, если исследует информацию уровня прикладной программы до выбора сервера для клиента.


НАЗАД   СОДЕРЖАНИЕ   ВПЕРЕД